为什么我们在linux中有内存区域?

时间:2015-06-01 06:14:39

标签: linux-kernel virtualization intel

我正在page上看到这个:

  

由于硬件限制,内核无法将所有页面视为相同。某些页面由于其在内存中的物理地址而无法用于某些任务。由于这种限制,内核将页面划分为不同的区域。

我想知道那些硬件限制。有人可以解释一下那些硬件限制并举个例子。同样,有没有英特尔的软件指南解释这个?

另外,我读到虚拟内存分为两部分,内核空间为1GB,用户空间为3GB。为什么我们在内核的所有进程的虚拟空间中提供1GB空间?它是如何映射到实际的物理页面的?有人可以指点一个干净的文字来解释这个吗?

提前致谢。

2 个答案:

答案 0 :(得分:1)

硬件限制主要涉及旧的devies。例如,您有 ZONE_DMA ,来自0 - 16MB。这是例如较旧的ISA设备所需的设备无法超过16MB限制。然后你有了 ZONE_NORMAL ,大​​多数内核操作都会在这里进行,并永久地被压入内核地址空间。

1GB3GB拆分很简单。这里有虚拟地址,因此对于您的应用程序,内存地址始终从0x00000000开始,保留的是内核内容的第1 GB。为什么这样做非常简单:您拥有内核模式和用户模式。在内核模式下,您可以使用系统调用。如果您没有将内核内存映射到虚拟地址空间,则必须执行上下文切换以使您陷入内核模式(上下文切换:将当前上下文保存到内存,从内存加载另一个上下文 - >耗时) 。但由于内核模式操作可以在同一个虚拟地址空间中进行,因此您无需将上下文切换为例如分配新内存或执行任何其他系统调用。

答案 1 :(得分:1)

关于处理器用户空间中1GB内核映射的第二个问题

内核被映射为无需切换的节省时间。 1 GB用于内核功能,因此如果内核为其功能内核映射新内存,则内核可以执行此操作。任何有关Unix的书都可以为您提供详细信息