Linux内核在直接映射(线性映射)区域中映射尽可能多的RAM的合理性是什么?

时间:2014-12-09 02:18:38

标签: linux memory-management linux-kernel arm

以下讨论适用于32位ARM Linux。

  1. 假设我的系统中有512MB物理RAM。对于常见配置,所有这些512MB物理RAM将通过内核的直接映射(0xC000 0000到0xE000 0000)进行映射。 问题是:内核本身只使用这些RAM的一部分;大多数这些RAM都将分配给用户空间。为什么要在内核的虚拟空间(0xC000 0000到0xE000 0000)中映射所有这些512MB物理RAM?为什么内核只是映射这些RAM的一部分用于它的唯一用途(比如64MB RAM)?

  2. 如果物理RAM大于1GB,事情会变得有点复杂。让我们说直接映射的区域大小为768MB。结果将是1GB中的768MB被直接映射到内核的虚拟空间。我猜其余的RAM(256MB)分为两个地方:高内存区域或内核分配给用户空间。但我仍然没有看到将如此多的物理RAM映射到内核虚拟空间的任何优势。

1 个答案:

答案 0 :(得分:3)

实际上这个问题可以简化为: 如果内核只直接映射物理RAM的一小部分(比如512MB中的64MB)会有什么缺点?

在进一步讨论之前,了解

是有益的
  • 打开MMU后,CPU发出的每个地址都是虚拟的 地址。
  • 如果内核想要访问RAM中的任何地址,则必须在实际访问之前设置映射。

如果内核只直接映射物理RAM的一小部分,那么成本是每次内核需要访问RAM的其他部分时,它需要在访问该地址之前设置临时映射并在访问后拆除该映射,这是非常乏味和低效率。

如果该映射是预先设置的并且始终存在,则会为内核节省大量的麻烦。