- 论坛徽章:
- 0
|
前面几位回答的都很好。我觉得有个地方需要再强调下:
所有的物理内存都必须直接由内核来控制。 不可能出现有部分物理内存,内核看不到而用户程序可以看到的情况。
在这个前提下,如果把内核的3G-4G虚拟地址写死映射到物理内存的0-1G,那么大于1G的物理内存就“永远”也访问不了了。不论是内核还是用户程序。那么如果机器上装了2G, 或者4G的内存,这时只能用1G, 其他的都跟没装一样。
而用了高端内存后,大于1G的物理地址也可以动态的访问了。
这个就是写死和用高端内存的根本区别。accessory 发表于 2010-03-25 00:22
老大,俺有不同看法。
即使内核把3-4G全部直接用OFFSET+x方式映射上了物理页,用户空间还是可以分配到高于1G的物理内存的啊。
因为高于1G的物理页可以映射到用户空间的0-3G中去的。
这个时候如果被映射了高于1G物理页的进程通过int 0x80进入内核,内核可以通过0-3G的地址访问这些物理页。
但是内核不能用3-4G的线性地址来访问高于1G的物理页啦。
总之吧,如果不保留高端内存这个128M线性地址的话,中断代码、软中断代码、内核线程等就无法访问高于1G的物理页了。
但是通过int 0x80可以执行到的代码可以通过0-3G线性地址访问。
如果保留了128M线性地址空间的话,所有代码皆大欢喜 |
|