【问题标题】:How user space memory and kernel space memory is mapped to physical memory in Linux?Linux中用户空间内存和内核空间内存如何映射到物理内存?
【发布时间】:2014-06-10 13:52:41
【问题描述】:

我可以猜到,这个问题可能是重复的,但为了清楚起见,我分开问了。

所以我的理解是,对于 32 位架构,我们有 4 GB 的虚拟内存,其中 3 GB 用于用户空间,1 GB 用于内核空间。

所以我不明白的是,相同的 1 GB 物理内存在用户空间进程和内核空间之间共享,它是如何工作的?

如果问题不清楚,请告诉我,我会尝试添加更多细节。

【问题讨论】:

  • 这是题外话。也许它属于超级用户?
  • 从应用程序的角度来看,您不应该关心。每个进程都在虚拟内存中运行并拥有自己的地址空间。

标签: linux memory linux-kernel


【解决方案1】:

所以我的理解是,对于 32 位架构,我们有 4 GB 的虚拟内存,其中 3 GB 用于用户空间,1 GB 用于内核空间。

没错。每个进程都有 3GB 用于虚拟内存中特定于进程的映射。内核有 1GB 用于其虚拟映射。

所以我不明白的是,用户空间进程和内核空间共享相同的 1 GB 物理内存,它是如何工作的?

操作系统管理所有物理内存,根据需要将其映射到内核虚拟内存或用户虚拟内存。如果进程 X 需要将物理内存页 Y 映射到虚拟地址 Z,那么内核将确保在进程 X 运行时映射到位。

【讨论】:

  • 这是否意味着进程永远不会触及 1 GB 的内核虚拟地址?
  • 在用户空间运行的进程不能直接访问任何内核映射。理论上,内核可以授予进程访问这些映射的某些部分的权限,但我不相信它曾经这样做过。 (可能有一些例外,例如包含配置和/或状态信息的页面的只读映射。)
  • “操作系统管理...” -- 也许提到映射中涉及的显着硬件,MMU,应该被挤进你对问题的回答中“它是如何工作的”.
猜你喜欢
  • 2012-11-15
  • 2016-03-10
  • 2017-11-16
  • 2017-11-16
  • 2012-02-05
  • 1970-01-01
  • 2011-05-02
  • 2012-05-17
  • 2016-05-05
相关资源
最近更新 更多