【问题标题】:Kernel virtual memory space and process virtual memory space内核虚拟内存空间和进程虚拟内存空间
【发布时间】:2020-05-21 10:03:40
【问题描述】:

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

我有点被linux进程的虚拟内存结构弄糊涂了,如下图:

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

【问题讨论】:

  • 能否请您重新表述您的问题以更清楚?我不认为我理解您所说的“为什么我们需要为每个进程复制内核代码和数据以及内核中的物理内存有什么作用?”的意思?
  • 另外,你能提供教科书的名字/作者吗?这张图很奇怪。

标签: memory memory-management linux-kernel virtualization


【解决方案1】:

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

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

另见:Do the virtual address spaces of all the processes have the same content in their “Kernel” parts?

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

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

另请参阅:What's the use of having a kernel part in the virtual memory space of Linux processes?

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

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

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

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

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

【讨论】:

  • 谢谢,我还有两个问题。我不明白为什么每个进程都需要将内核可执行文件及其所有数据加载到它的虚拟地址。以及设计所有物理内存在虚拟内存中的直接映射的动机。
  • @yi_li 阅读了我链接的帖子:unix.stackexchange.com/a/472229/272806
猜你喜欢
  • 2012-08-02
  • 1970-01-01
  • 2023-03-17
  • 2011-12-27
  • 2016-04-28
  • 1970-01-01
  • 1970-01-01
  • 2021-09-11
  • 2012-05-14
相关资源
最近更新 更多