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