Memory 内核虚拟内存空间和进程虚拟内存空间

Memory 内核虚拟内存空间和进程虚拟内存空间,memory,memory-management,linux-kernel,virtualization,Memory,Memory Management,Linux Kernel,Virtualization,我在读教科书:计算机系统程序员的观点,在第9.7.2章:Linux虚拟内存系统(第三版)中谈到了虚拟内存 我对linux进程的虚拟内存结构有点困惑,如下所示: 我的问题是:内核虚拟内存是否为内核运行而保留 剩下的虚拟内存是为用户进程保留的吗?内核代码和数据做什么?内核虚拟内存中的物理内存是什么 内核虚拟内存是否为内核运行保留,其余虚拟内存是否为用户进程保留 是的,有一部分虚拟内存始终保留给内核,另一部分留给用户空间进程使用。每个进程都有自己的虚拟内存,但内核总是映射到虚拟内存的更高部分(更高的

我在读教科书:计算机系统程序员的观点,在第9.7.2章:Linux虚拟内存系统(第三版)中谈到了虚拟内存

我对linux进程的虚拟内存结构有点困惑,如下所示:

我的问题是:内核虚拟内存是否为内核运行而保留 剩下的虚拟内存是为用户进程保留的吗?内核代码和数据做什么?内核虚拟内存中的物理内存是什么

内核虚拟内存是否为内核运行保留,其余虚拟内存是否为用户进程保留

是的,有一部分虚拟内存始终保留给内核,另一部分留给用户空间进程使用。每个进程都有自己的虚拟内存,但内核总是映射到虚拟内存的更高部分(更高的地址)。此映射是否对流程可见取决于

另见:

内核代码和数据做什么

高虚拟内存的一部分是实际内核映像的直接映射。也就是说,内核可执行文件及其所有数据。您可以在这里的内核文档中看到更多详细信息,标记为“内核文本映射,映射到物理地址0”

另见:

内核虚拟内存中的物理内存是什么

图像的那一部分完全是误导性的。我不知道这本书的作者到底想传达什么信息,但物理内存肯定不是内核虚拟内存的一部分。他们可能试图解决这样一个事实,即内核虚拟内存中存在所有物理内存的直接映射,这可以在内核文档中再次看到,标记为“所有物理内存的直接映射”

物理内存是指系统的实际内存(即RAM)。虚拟内存的每个区域都映射到物理内存的某个区域。这种虚拟到物理的映射对进程是完全透明的,由内核管理。例如,在只读模式下打开相同文件的两个可执行文件通常共享相同的物理内存区域,同时看到两个不同的虚拟地址

这更准确地描述了虚拟内存和物理内存之间的关系:


资料来源:

请你把问题的措辞改清楚一点好吗?我想我不明白你所说的“为什么我们需要为每个进程复制内核代码和数据,内核中的物理内存做什么?”还有,你能提供教科书的名称/作者吗?那张照片很奇怪。谢谢,我还有两个问题要问。我不明白为什么每个进程都需要将内核可执行文件及其所有数据加载到它的虚拟地址。设计虚拟内存中所有物理内存的直接映射的动机。@yi_li阅读了我链接的帖子: