RAM如何分为内核空间和用户空间

RAM如何分为内核空间和用户空间

据我了解,在 Linux 中,RAM 分为内核空间和用户空间。内核空间是为运行内核而保留的,用户空间应用程序不应该直接访问那里的内存。

该内存到底是如何划分为内核空间和用户空间的?它是在构建内核时在链接描述文件中定义的吗?

答案1

这主要包括三个方面。

第一个是地址空间

一些架构强烈建议地址空间分割;例如,在 x86-64 上,虚拟地址空间被分成两半,从地址空间的两端增长。在此类架构上,内核遵循建议;在 x86-64 上,地址空间的下半部分用于用户空间分配,上半部分用于内核分配。看Linux中64位进程虚拟地址空间是如何划分的?

其他架构本身不提供这种结构。例如,Linux 内核(以及大多数具有特权级别的其他操作系统)设置自己的地址空间分割在 x86 上、3G/1G、2G/2G、1G/3G(用户空间/内核)。

第二个是内存分配。

虽然地址空间分割是静态的,但内存分配却不是;仅根据需要分配内存。地址空间分割决定了虚拟地址的用途,但它不影响物理内存的使用,也不决定如何使用很多虚拟地址空间的实际使用量也被使用。内核本身为其自己的二进制文件以及其自身用途所需的任何附加内存分配内存;该内存无法换出(请参阅Linux 内核是否使用虚拟内存(用于其数据)?)。

第三个是内存映射。

这完全由内核在硬件(内存管理单元)的帮助下进行管理。始终维护多个映射:内核拥有一两个自己的映射,由所有进程共享,每个进程都有自己的用户空间映射。这确保了进程之间受到保护,并且内核受到用户空间的保护。看Linux进程的虚拟内存空间中拥有内核部分有什么用?地址空间中的Kernel空间是通过什么为我们保留的?

相关内容