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

Syn*_*BBB 4 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
Run Code Online (Sandbox Code Playgroud)

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

我错过了什么?

Dor*_*hen 5

PHYSTOP 是出于性能原因定义为 0xE000000 的常量。

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

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