我在here中已阅读以下内容:
内核可以访问所有内存
我想知道的是,内核如何访问其他进程的内存。
我几乎可以肯定的是,内核无法访问物理内存,它只能访问虚拟内存。
现在每个进程都有一个页表,用于将虚拟地址转换为物理地址。并且由于内核可以访问所有进程的所有页表(我认为内核空间中存在页表),那么如果内核想要访问进程A 的内存,例如,它可以使用进程A 的页面表,并通过此页表访问进程A 的内存。
我说错了吗?
答案 0 :(得分:2)
什么是"其他流程"在这种情况下?
如果一个线程正在执行并且由于某种原因它进入内核并且内核想要读取它的内存,它就可以"只是"在用户空间和内核空间都映射到一个巨大地址空间的体系结构上执行此操作。特别是在x86上就是这种情况。
通常,内核不会访问由不同于切换到内核的线程映射的内存。
如果需要这样的访问,内核会手动浏览相关的页面表#34;。它找到了需要的物理页面,并将其映射以便可以读取。它肯定不会为此目的切换页表。
作为一个有趣的事实,由于x86-64上的地址空间与物理可安装的memroy相比是如此巨大(256TB),因此始终映射整个物理内存。因此,在此体系结构中,内核只计算相关页面在此区域内的位置。