【问题标题】:Two Identical Linear Addresses of two different Processes?两个不同进程的两个相同的线性地址?
【发布时间】:2015-04-19 14:18:29
【问题描述】:

大家好,

我是 Linux-Kernel 的新手,我目前正在参考《Understanding Linux Kernel》一书。我阅读了有关内存管理的内容,其中关于分页和分段的一切都很好,但我的问题还没有得到解答。 如果两个不同的进程具有相同的线性地址,那么它们在物理地址中的位置是否可以不同。因为每个 CPU 只有一个全局页面目录,通过观察 32 位线性地址再次映射到物理地址。但是两个进程如何可以内存高达 4GB。请解释一下。

【问题讨论】:

  • 这是虚拟内存,只有一部分实际映射到物理内存。

标签: linux linux-kernel


【解决方案1】:

是的,两个不同的进程都可以使用同一个线性指针,但它可以取消引用物理内存中的两个不同位置。那是因为每个进程都有自己的页表,当从一个进程切换到另一个进程时,CPU的页表寄存器也会切换到指向新进程的页表。

您是否已经克隆了自己的 Linux 源代码的本地副本?如果没有,现在就去做。您需要在阅读书籍时参考它。

现在克隆?好的。转到克隆的工作目录并打开arch/x86/include/asm/mm_context.h。转到第 51 行,您会找到static inline void switch_mm。这是将 CPU 从一个进程的虚拟内存空间切换到另一个进程的功能。 (我假设您对 x86 最感兴趣。)现在向下看第 64 行:load_cr3(next->pgd)。这就是魔法发生的地方:切换页表,现在 CPU 将使用新进程的页表解释所有指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-10-25
    • 2012-07-04
    • 2014-12-17
    • 2019-04-05
    • 2011-04-02
    • 1970-01-01
    • 2014-08-05
    • 2021-01-10
    相关资源
    最近更新 更多