Linux kernel 为什么linux中有内存区域?

Linux kernel 为什么linux中有内存区域?,linux-kernel,virtualization,intel,Linux Kernel,Virtualization,Intel,我在网上读到这篇文章: 由于硬件限制,内核无法将所有页面视为相同。某些页由于其在内存中的物理地址而无法用于某些任务。由于这个限制,内核将页面划分为不同的区域 我想知道那些硬件限制。有人能给我解释一下这些硬件限制并举个例子吗。另外,英特尔是否有任何软件指南对此进行解释 此外,我还了解到虚拟内存分为两部分:内核空间1GB,用户空间3GB。为什么我们要在所有进程的虚拟空间中为内核提供1GB的空间?它如何映射到实际的物理页面?有人能给我指一段干净的文字来解释这一点吗 提前感谢。硬件限制主要与旧设备有关。

我在网上读到这篇文章:

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

我想知道那些硬件限制。有人能给我解释一下这些硬件限制并举个例子吗。另外,英特尔是否有任何软件指南对此进行解释

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


提前感谢。

硬件限制主要与旧设备有关。例如,您有区域\u DMA,它来自
0-16MB
。例如,对于较旧的ISA设备,这是必需的,这些设备不能处理超过
16MB
限制的数据。然后是区域_NORMAL,在那里大多数内核操作都会发生,并永久性地进入内核地址空间


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

硬件限制主要涉及旧设备。例如,您有区域\u DMA,它来自
0-16MB
。例如,对于较旧的ISA设备,这是必需的,这些设备不能处理超过
16MB
限制的数据。然后是区域_NORMAL,在那里大多数内核操作都会发生,并永久性地进入内核地址空间


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

硬件限制主要涉及旧设备。例如,您有区域\u DMA,它来自
0-16MB
。例如,对于较旧的ISA设备,这是必需的,这些设备不能处理超过
16MB
限制的数据。然后是区域_NORMAL,在那里大多数内核操作都会发生,并永久性地进入内核地址空间


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

硬件限制主要涉及旧设备。例如,您有区域\u DMA,它来自
0-16MB
。例如,对于较旧的ISA设备,这是必需的,这些设备不能处理超过
16MB
限制的数据。然后是区域_NORMAL,在那里大多数内核操作都会发生,并永久性地进入内核地址空间


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

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

当然,内核映射是为了节省时间,因为没有开关。1GB用于内核功能,所以如果内核为其功能映射新内存,内核就可以这样做。任何关于Unix的书都可以为您的第二个问题提供详细信息