内核高内存

Seb*_*ler 4 operating-system kernel

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

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

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

Ale*_*nze 6

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

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

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