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

yi *_* li 3 memory virtualization memory-management linux-kernel

我正在阅读教科书:Computer Systems A Programmer\xe2\x80\x99s Perspective,第9.7.2章:Linux虚拟内存系统(第三版)中讨论了虚拟内存。

\n\n

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

\n\n

内存示意图

\n\n

我的问题是:内核虚拟内存是否为内核运行保留,而其余虚拟内存是否为用户进程保留?内核代码和数据的作用是什么?而内核虚拟内存中的物理内存又有何作用呢?

\n

Mar*_*lli 5

\n

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

\n
\n\n

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

\n\n

另请参阅:所有进程的虚拟地址空间在其 \xe2\x80\x9cKernel\xe2\x80\x9d 部分中是否具有相同的内容?

\n\n
\n

内核代码和数据的作用是什么?

\n
\n\n

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

\n\n

另请参阅:Linux 进程的虚拟内存空间中拥有内核部分有什么用?

\n\n
\n

而内核虚拟内存中的物理内存又有何作用呢?

\n
\n\n

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

\n\n

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

\n\n

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

\n\n

虚拟内存映射

\n\n

资料来源:https ://computationstructures.org/lectures/vm/vm.html

\n