【发布时间】:2017-11-18 15:51:16
【问题描述】:
我在here中阅读了以下内容:
内核可以访问所有内存
我想知道的是,内核如何访问其他进程的内存。
我几乎可以肯定的是内核不能访问物理内存,它只能访问虚拟内存。
现在每个进程都有一个页表,用于将虚拟地址转换为物理地址。而且由于内核可以访问所有进程的所有页表(我想页表存在于内核空间中),那么如果内核想要访问 Process A 的内存,例如,它可以使用进程A的页表,并通过这个页表访问进程A的内存。
我说的对吗?
【问题讨论】:
-
内核当然可以根据需要访问物理内存。但是您对它如何访问进程内存的方式是正确的。
-
这不是一个真正的问题。 SO 是针对您尝试编写的程序的问题,而不是关于操作系统设计的问题。
-
@Barmar "如果内核愿意,当然可以访问物理内存" 我认为 CPU 在保护模式下无法访问物理地址,所以为了内核要访问物理内存,必须先将 CPU 切换到保护模式,对吗?
-
1.保护模式并不意味着使用虚拟内存(分页) - 您可以进入 PM 并仍然使用直接访问内存。 2. 内核(如果不是全部的话,大多数)按设计在 PM 和 VM 中运行。 3.虚拟地址可以1:1映射到真实地址
标签: linux memory linux-kernel x86 operating-system