2015-04-23 30 views
1

據我所知,在XV6中,PHYSTOP應該是1GB。爲什麼在XV6中,恆定PHYSTOP被定義爲0xE000000?

如果是這樣,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,它怎麼可能?

我錯過了什麼?

回答

2

PHYSTOP是出於性能原因定義爲0xE000000的常量。

如果將PHYSTOP設置得更高,則需要使用mappages映射所有可用內存。現在,操作系統可以隨時映射免費頁面,但是在xv6上,我們將它們映射到OS初始化。映射2GB很慢。

請注意,在編譯更大的虛擬內存之前,您可以更改此值。