内核高内存

时间:2011-12-30 22:20:26

标签: operating-system kernel

在操作系统设计中,内核最常映射到高虚拟内存地址,从而获得对高端内存部分的控制。下面留下的空间适用于在用户空间中运行的应用程序,如“Linux 3/1 virtual address split”中的出色方式所述。

我想知道的是,为什么是做出这个设计决定还是为什么内核不使用内存的下半部分?这对我来说并不是很清楚,或者我可能已经监督过了。

编辑:此问题涉及虚拟地址而非物理地址。

1 个答案:

答案 0 :(得分:6)

这种设计的一些优点/原因:

  • 应用程序不需要关心内核的大小和位置,并且可能假装它们是内存中的唯一内容,从大约0开始并向上跨越,只需要很少的代码和数据重定位。因此,应用程序更容易设计和实现,并且它们可能不太可能存在与内存管理相关的错误。
  • 应用程序可能使用更小/更短的地址/指针,因此可以节省一些内存。
  • 在x86 CPU中,16位和32位地址空间从虚拟地址0开始,大约1MB(对于实际和虚拟8086模式),16 MB(i80286 +上的16位保护模式)和4 GB (32位模式,虚幻模式)。将内核置于较低​​地址将减少应用程序可用的地址范围(例如:32位模式下的16位应用程序或64位模式下的32位应用程序)和/或使其内存管理复杂化。将内核移动到虚拟地址空间的顶部通常在x86上是有意义的。

可能还有其他原因,通常是特定于平台的。在某些平台上,这两个选项之间几乎没有区别。然而在其他情况下,优选的内核位置可能位于较低的虚拟地址。细节很重要。