gpt4 book ai didi

linux - 内核如何访问其他进程的内存?

转载 作者:太空宇宙 更新时间:2023-11-04 09:18:22 24 4
gpt4 key购买 nike

我已阅读 here 中的以下内容:

the kernel has access to all of the memory

我想知道的是,内核是如何访问其他进程的内存的。

我几乎可以肯定的是内核不能访问物理内存,它只能访问虚拟内存。

现在每个进程都有一个页表,用于将虚拟地址转换为物理地址。并且由于内核可以访问所有进程的所有页表(我想页表存在于内核空间中),那么如果内核想要访问 Process A 的内存,例如,它可以使用进程A的页表,并通过这个页表访问进程A的内存。

我说的对吗?

最佳答案

在这种情况下,“其他进程”是什么?

如果一个线程正在执行并且它出于某种原因进入内核并且内核想要读取它的内存,它可以“只”在用户空间和内核空间都映射到一个巨大地址空间的体系结构上这样做。在 x86 上尤其如此。

通常,内核不会四处访问由与切换到内核的线程不同的线程映射的内存。

如果需要这样的访问,内核会“手动”遍历相关的页表。它找到需要的物理页面并映射它以便它可以读取。它肯定不会为此目的切换页表。

一个有趣的事实是,由于 x86-64 上的地址空间与物理上可安装的内存相比非常大 (256TB),因此始终映射整个物理内存。因此,在此架构上,内核仅计算相关页面在该区域内的位置。

关于linux - 内核如何访问其他进程的内存?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44579582/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com