问题标签 [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.

0 投票
4 回答
6544 浏览

c - XV6:ptable 初始化

我在谈论:

它位于 proc.c 文件中。

有人可以解释它在哪里初始化吗?因为,在 proc.c 中,我从未见过向其中添加某些东西(进程)。

更准确地说,假设我正在查看调度程序代码:

在:

你可以看到我们正在循环遍历 ptable 中的每个进程。我的问题是,他们是如何到达那里的?谢谢!

0 投票
1 回答
507 浏览

c - 了解 XV6 makefile 中的代码块

我试图从 XV6 makefile 中理解以下代码块:

我在哪里可以找到解释上述所有选项的参考资料?例如,我试图在 GNU 网站上查找选项“-N”,但没有找到。

提前致谢

0 投票
1 回答
1975 浏览

c - 在 xv6 中实现内核级线程

我正在尝试在 xv6 中实现内核级线程。

我目前的主要问题是了解 CPU 如何获取有关当前进程的信息以及如何修改它以指向当前线程。

我知道它与这条线有某种联系:

proc.h,但我不完全理解它是如何工作的以及为什么工作。

0 投票
1 回答
1628 浏览

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,怎么可能?

我错过了什么?

0 投票
1 回答
171 浏览

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.

0 投票
2 回答
1647 浏览

operating-system - 为什么 xv6 调度程序在每个循环开始时调用 sti()?

配套书说

在空闲的 CPU 上定期启用中断的原因是可能没有 RUNNABLE 进程,因为进程(例如,shell)正在等待 I/O。如果调度程序一直禁用中断,则 I/O 将永远不会到达。

但我认为我们只需要在外部 for 循环之前调用 sti() 一次,因为每次我们释放 ptable.lock 时,都会再次启用中断。

0 投票
2 回答
753 浏览

c - xv6 - '+' 在切换句中是什么意思

我正在修改 XV6,我正在尝试了解有关 trap.c 的一些信息

当它说“case T_IRQ0 + IRQ_IDE”时,这是否意味着这两个都必须发生?

一个进程可以输入多个案例吗?

0 投票
1 回答
2172 浏览

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 10uint 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:

0 投票
1 回答
412 浏览

c - xv6操作系统——三重间接的实现

xv6 mkfs.c 文件声明变量:

该声明应该适用于具有 12 个直接块和 1 个间接块的 inode,我不明白为什么 nblocks 被定义为 985?一个 inode 中的块数是 140(间接 128 + 直接 12),所以我不完全理解 985 来自哪里以及 1024 的大小。

如果我能理解那部分,我想我将能够更改变量以支持三重间接。

谢谢!

0 投票
1 回答
234 浏览

xv6 - 为什么必须映射所有物理内存来初始化空闲页面列表?

配套书在第32 页说

有一个引导问题:必须映射所有物理内存,以便分配器初始化空闲列表,但是使用这些映射创建页表涉及分配页表页。

我不明白为什么。为什么内核不直接填充所有 4K[end,PHYSTOP)页面struct run不像 range 那样[end,4M)所有 4K 页面?

为什么所有物理内存都必须已经映射?