zone_highmem 为何不能像 zone_normal 作永久映射,线性映射

这有什么好解释的?32位的虚拟空间是4G,现在的PC动不动就是8G,16G内存的,怎么线性映射?

■网友
低端的896M是线性映射。。1G的空间里面大多数是高端映射。。这部分不是线性映射。。楼上说的很对啊。。虚拟内存就那么小,你物理内存越来越大。。这么小的虚拟内存到这么大的物理内存。。你想怎样让它映射。。当然不能线性映射啦。。896够够的了补充一下以前学习的关于这部分的笔记。。个人理解哈。错误请指出。 【zone_highmem 为何不能像 zone_normal 作永久映射,线性映射】 zone_highmem 为何不能像 zone_normal 作永久映射,线性映射


■网友
因为在32位中,分给内核的虚拟地址只有1G,如果全部永久映射,那么内核就只能访问到1G以下物理内存了,也就是说1G以上的物理内存地址没发访问了,这不行啊

■网友
high mem只有32位系统才有这个概念。出现的原因是能够给内核使用的虚拟地址不可能与物理内存一样大的。而实际存在每个物理地址都能映射给内核访问的需求,因而就只能有一部分物理内存动态停靠到内核的虚拟地址空间了。内核虚拟地址不能和物理地址一样大的原因:1. 有PAE的情况,虚拟地址4g,物理内存大于4g。2. 没有PAE情况,由于每个与进程共用虚拟地址空间,内核占2g,应用进程就只剩2gb了。所以通常内核有1gb,应用进程3gb。而实际物理内存可能是4gb。每一个物理地址都有可能需要映射给内核访问:比如说应用malloc内存,写数据,然后给内核通过网络发送。malloc到的内存物理上可以是任意位置的(除了内核占用的)。


    推荐阅读