LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1183|回复: 0

Linux内核如何使用大于1GB的物理内存。

[复制链接]
发表于 2007-5-20 01:37:45 | 显示全部楼层 |阅读模式
Linux内核建立页表时,最多就建立了从PAGE_OFFSET(第3GB开始到4GB结束)的1G线性地址的映射供内核使用。
那么Linux是如何使用大于1GB的物理内存的呢?
答案是:通过物理内存区域。内核为了支持这种需求,特地的为每个cpu创建了不同的内存区域。有ZONE_DMA (0-16 MB),ZONE_NORMAL (16-896 MB)和ZONE_HIGHMEM (896 MB and higher)。内核通过每个区域的struct mem_map来创建所有物理页的信息。
如果一个应用程序进行了系统调用,请求分配内存,如果不是DMA的请求,如果ZONE_NORMAL的物理页表已经用尽。那么内核会通过kmap()自动去找ZONE_HIGHMEM区域把这个页面临时映射到内核所能管理的从3G到4G的虚拟地址空间中。但是kmap的映射是临时性的,并且有时会不可用。所以内核对大内存的支持还称不得上完美。

如果要使用内存区域的特性,必须要在编译内核时加上HIGHMEM_CONFIG选项。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表