Tag: xv6

尝试在xv6操作系统中实现三重间接时,XV6崩溃

最初的xv6-rev7操作系统包含: 12个定向块 1间接blcok(指向128个区块) 这意味着我们有140个街区。 每个块的大小为512KB ==> 512 * 140 = 71,680~ = 70KB是xv6中文件大小的限制。 我想在xv6中实现三重间接访问,以支持大小为40MB的文件。 为了做到这一点,我需要在三重间接之前实现双重间接。 所以我从12支队伍中拿走了2个定向区块。 1表示双重间接,1表示三重间接。 这就是我现在所拥有的: 直接:10个街区 单个间接:128 双重间接:128 * 128 三重间接:4 * 128 * 128(我使用的是4而不是128,因为这足够40MB) 这就是为什么#define NDIRECT 10和uint addrs[NDIRECT+3]; 文件大小限制=(10 + 128 + 128 * 128 + 4 * 128 * 128)* 512kb = 42,013,696~ = 42MB 所以我理解这个概念。 三重间接的实现在文件fs.c中的函数bmap中。 这就是它的样子: 出于某种原因,当我尝试创建大小为8.5MB的文件时,它失败了: 我正在使用bochs模拟器 […]

xv6添加一个计算系统调用的系统调用

编辑: 得到它了 这是我做的: 在syscall.c中: extern int numSysCalls; 在sysproc.c中: int numSysCalls = -1; 好的,所以我正在努力实现一个简单的系统调用,它返回系统调用的次数。 看起来很简单,但我收到一个我不明白的错误… 基本上,这就是我所做的:在syscall.c中有一个名为syscall()的函数,用于检查它是否是一个系统调用。 我基本上已经声明了一个变量,并且每次调用此函数时都会递增它。 syscall.c中的Var声明: 18: int16_t numSysCalls = -1; //global Syscall()函数: 115: void syscall(void){ 116: numSysCalls++; … 我得到的错误: kernel/syscall.c:116: error: ‘numSysCalls’ undeclared (first use in this function) kernel/syscall.c:116: error: (Each undeclared identifier is reported only once kernel/syscall.c:116: error: for each function it […]