0

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

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

4

2 回答 2

1

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

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

于 2013-05-10T02:34:29.293 回答
0

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

如果你仔细阅读这篇文章,你就会明白其中的概念。下面是一种简化(而且有点粗略)的方式来看待它:

1) 内核开始时为 32 位平台完全映射出可寻址内存(无论实际可用内存如何),我说 1GB 给我 3GB 给用户空间。

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

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

所以问题再次是 32 位字只能直接寻址 4GB 的内存。

于 2013-05-10T02:56:16.660 回答