大家好,
我是 Linux-Kernel 的新手,我目前正在引用 Understanding Linux Kernel 这本书。我读到了关于内存管理的内容,其中关于分页和分段的一切都很好,但我的问题还没有得到解答。 如果两个不同的进程具有相同的线性地址,那么它们在物理地址中的位置是否不同。因为每个 CPU 只有一个全局页面目录,通过观察 32 位线性地址再次映射到物理地址。但是两个进程如何可以内存高达4GB。请解释。
最佳答案
是的,两个不同的进程都可以使用同一个线性指针,但它可以解引用到物理内存中的两个不同位置。那是因为每个进程都有自己的页表,当从一个进程切换到另一个进程时,CPU的页表寄存器也切换为指向新进程的页表。
您是否克隆了自己的 Linux 源代码本地副本?如果没有,请立即去做。您需要在阅读本书时引用它。
现在克隆了吗?好的。转到克隆的工作目录并打开 arch/x86/include/asm/mm_context.h
。向下到第 51 行,您会找到 static inline void switch_mm
。这是将 CPU 从一个进程的虚拟内存空间切换到另一个进程的功能。 (我假设您对 x86 最感兴趣。)现在向下看第 64 行:load_cr3(next->pgd)
。这就是奇迹发生的地方:页表被切换,现在 CPU 将使用新进程的页表解释所有指针。
关于linux - 两个不同进程的两个相同的线性地址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29731062/