我在阅读第9.7.2章:Linux虚拟内存系统(第三版)中关于虚拟内存的教科书:计算机系统--程序员的观点。
我对linux进程的虚拟内存结构感到有点困惑,如下所示:

我的问题是:内核虚拟内存是否为内核运行保留,而虚拟内存的其余部分是否为用户进程保留?内核代码和数据是做什么的?内核虚拟内存中的物理内存是什么?
发布于 2020-02-05 14:58:17
内核虚拟内存是否为运行内核而为用户进程保留剩余的虚拟内存?
是的,有一部分虚拟内存总是为内核保留的,另一部分留给用户空间进程使用。每个进程都有自己的虚拟内存,但是内核总是映射在虚拟内存的较高部分(较高地址)中。此映射对流程是否可见取决于内核页表隔离。
另见:所有进程的虚拟地址空间是否在它们的“内核”部分中都有相同的内容?
内核代码和数据是做什么的?
高虚拟内存的一部分是对实际内核映像的直接映射。也就是说,内核可执行文件及其所有数据。您可以在内核文档的此页中更详细地看到它,标记为“内核文本映射,映射到物理地址0”。
另见:在Linux进程的虚拟内存空间中有一个内核部分有什么用?
内核虚拟内存中的物理内存是什么?
这部分图像完全是误导的。我不知道这本书的作者到底想传达什么信息,但是物理内存绝对不是内核虚拟内存的一部分。他们可能试图解决这样一个事实,即内核虚拟内存中的所有物理内存都有一个直接映射,这在内核文档的同一页上可以再次看到,标记为“所有物理内存的直接映射”。
物理内存是指系统的真实内存(即RAM)。虚拟内存的每个区域被映射到物理内存的某个区域。这个虚拟到物理的映射对进程是完全透明的,并由内核管理.例如,在只读模式下打开相同文件的两个可执行文件通常共享相同的物理内存区域,同时看到两个不同的虚拟地址。
这更准确地描述了虚拟内存和物理内存之间的关系:

发布于 2022-01-14 05:47:08
引用了CSAPP的书,第三版,第9.7.2节,其中显示了图片。
有趣的是,DRAM Linux还将一组连续的虚拟页面(与系统中的总量相等)映射到相应的连续物理页。这为内核提供了一种访问物理内存中任何fic++位置的方便方法--例如,当它需要访问页表或对映射到特定物理内存位置的设备执行内存映射I/O操作时。
我认为图片中的Physical memory仅仅反映了上面描述的内容:一个映射到整个物理内存的虚拟内存区域。
https://stackoverflow.com/questions/60076669
复制相似问题