Linux内核无法支持1GB物理内存和HIGHMEM解决方案

时间:2013-05-09 16:40:42

标签: linux linux-kernel operating-system kernel virtual-memory

我一直在阅读[1]以了解HIGHMEM。文章说“ 如果内核希望能够直接访问系统的物理内存,那么它必须设置页表,将该内存映射到内核的地址空间部分 。这正是我困惑的地方。他们直接访问物理内存是什么意思?这是否意味着明确说明物理地址?(AFAIK,这在Linux内核中是不可能的)然后他们继续声明“ 它必须设置页表,将该内存映射到内核的地址部分空间 ”。这是你在HIGHMEM解决方案中所做的事情,不是吗?请帮助我理解导致HIGHMEM解决方案的问题。

[1] http://lwn.net/Articles/75174/

2 个答案:

答案 0 :(得分:1)

1如果内核希望能够直接访问系统的物理内存,则必须设置页表,将该内存映射到内核的地址空间部分
我认为作者想强调内核需要页表来解决物理内存问题。

2 t必须设置页表,将该内存映射到内核的地址空间部分 地址空间的内核部分也需要页表来映射该内存,而高内存则没有直接的内核映射。您可以在该文章中找到句子“当内核需要使用高内存中的页面时,它必须首先明确设置一个特殊的页面表,以便将其映射到内核的地址空间中。”

答案 1 :(得分:0)

首先,这只与x86-32架构相关

如果你仔细阅读这篇文章,你会得到概念。下面是一个简化(有点粗糙)的方式来看待它:

1)内核以32位平台的COMPLETELY映射输出可寻址内存开始(不论ACTUAL内存是否可用),并为我说1GB用户空间3GB。

2)因为像这样共享内存空间会带来显着的性能优势(查找等非常容易和快速),我们创建了一个内核从0xc0000000开始的世界

3)硬件供应商不断添加奇怪的分页模式,你可能会有超过4GB的内存...但是为了保持可管理性,你必须设置HiMEM的概念,即使你在那里也是如此限制为最大8GB到16GB,因为内核开发人员不想添加很多奇怪的代码来处理32位的更大尺寸

所以问题再一次是32位字只能直接处理4GB内存。