问题标签 [xv6]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - XV6:ptable 初始化
我在谈论:
它位于 proc.c 文件中。
有人可以解释它在哪里初始化吗?因为,在 proc.c 中,我从未见过向其中添加某些东西(进程)。
更准确地说,假设我正在查看调度程序代码:
在:
你可以看到我们正在循环遍历 ptable 中的每个进程。我的问题是,他们是如何到达那里的?谢谢!
c - 了解 XV6 makefile 中的代码块
我试图从 XV6 makefile 中理解以下代码块:
我在哪里可以找到解释上述所有选项的参考资料?例如,我试图在 GNU 网站上查找选项“-N”,但没有找到。
提前致谢
c - 在 xv6 中实现内核级线程
我正在尝试在 xv6 中实现内核级线程。
我目前的主要问题是了解 CPU 如何获取有关当前进程的信息以及如何修改它以指向当前线程。
我知道它与这条线有某种联系:
在proc.h
,但我不完全理解它是如何工作的以及为什么工作。
c - 为什么在 XV6 中常量 PHYSTOP 被定义为 0xE000000?
据我所知,在 XV6 中,PHYSTOP 应该是 1GB。
如果是这样,PHYSTOP 应该是 0x40000000 (1GB) 而不是 0xE000000 (224MB),如http://pdos.csail.mit.edu/6.828/2014/xv6/xv6-rev8.pdf中所示:
此外,在 XV6 中,进程可能从 0 映射到 0x80000000(KERNBASE)。也就是说,一个进程可能使用 2GB 的地址空间。如果 PHYSTOP 不是 2GB,怎么可能?
我错过了什么?
operating-system - qemu request for a disc image
I am trying to get qemu up and running with xv6 but I am having some trouble with compiling xv6. what are the types of disc images that qemu accepts. for instance does Qemu accept .ISO files? I tried loading FreeBSD but I am getting the error from QEMU that there is no bootable device.
operating-system - 为什么 xv6 调度程序在每个循环开始时调用 sti()?
配套书说
在空闲的 CPU 上定期启用中断的原因是可能没有 RUNNABLE 进程,因为进程(例如,shell)正在等待 I/O。如果调度程序一直禁用中断,则 I/O 将永远不会到达。
但我认为我们只需要在外部 for 循环之前调用 sti() 一次,因为每次我们释放 ptable.lock 时,都会再次启用中断。
c - xv6 - '+' 在切换句中是什么意思
我正在修改 XV6,我正在尝试了解有关 trap.c 的一些信息
当它说“case T_IRQ0 + IRQ_IDE”时,这是否意味着这两个都必须发生?
一个进程可以输入多个案例吗?
c - 尝试在 xv6 操作系统中实现三重间接时 XV6 崩溃
原xv6-rev7操作系统包含:
12个定向块
1个间接块(指向128个块)
这意味着我们有 140 个区块。
每个块的大小为 512KB ==> 512 * 140 = 71,680 ~= 70KB 是 xv6 中文件大小的限制。
我想在 xv6 中实现三重间接访问,以支持大小为 40MB 的文件。
为了做到这一点,我需要在三重间接之前实现双重间接。
所以我从我有的 12 个中取出了 2 个定向块。
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
所以我理解这个概念。三重间接的实现bmap
在文件中的函数中fs.c
。
这是它的外观:
出于某种原因,当我尝试创建大小为 8.5MB 的文件时,它失败了:
我正在使用 bochs 模拟器
我也不确定我需要在 mkfs.c 中更改哪些值:
fs.h:
fs.c:
mkfs.c:
大文件.c:
c - xv6操作系统——三重间接的实现
xv6 mkfs.c 文件声明变量:
该声明应该适用于具有 12 个直接块和 1 个间接块的 inode,我不明白为什么 nblocks 被定义为 985?一个 inode 中的块数是 140(间接 128 + 直接 12),所以我不完全理解 985 来自哪里以及 1024 的大小。
如果我能理解那部分,我想我将能够更改变量以支持三重间接。
谢谢!
xv6 - 为什么必须映射所有物理内存来初始化空闲页面列表?
配套书在第32 页说
有一个引导问题:必须映射所有物理内存,以便分配器初始化空闲列表,但是使用这些映射创建页表涉及分配页表页。
我不明白为什么。为什么内核不直接填充所有 4K[end,PHYSTOP)
页面struct run
不像 range 那样[end,4M)
所有 4K 页面?
为什么所有物理内存都必须已经映射?