为什么在XV6中常量PHYSTOP被定义为0xE000000?

时间:2015-04-23 09:15:00

标签: c unix operating-system xv6

据我所知,在XV6中,PHYSTOP应为1GB。

如果是这样,PHYSTOP应为0x40000000(1GB)而不是0xE000000(224MB),如http://pdos.csail.mit.edu/6.828/2014/xv6/xv6-rev8.pdf中所示:

0203 #define PHYSTOP 0xE000000 // Top physical memory

此外,在XV6中,进程可能从0映射到0x80000000(KERNBASE)。也就是说,进程可能使用2GB的地址空间。如果PHYSTOP不是2GB,怎么可能?

我错过了什么?

1 个答案:

答案 0 :(得分:2)

出于性能原因,

PHYSTOP是一个定义为0xE000000的常量。

如果将PHYSTOP设置得更高,则需要使用mappages映射所有可用内存。操作系统今天即时映射免费页面,但是在xv6上我们将它们映射到操作系统初始化。映射2GB很慢。

请注意,您可以在编译更大的虚拟内存之前更改此值。