不同进程的虚拟内存地址空间之间的隔离是否不适用于特权进程和交换?

不同进程的虚拟内存地址空间之间的隔离是否不适用于特权进程和交换?

来自 Linux 编程接口

包含数据的虚拟内存页可以被换出(除非使用 mlock() 或类似方法将其锁定在内存中),然后可以由特权程序从交换区域中读取。

我了解到一个进程的虚拟内存地址空间不能被另一个进程访问。上面的引用让我想知道

  • 该隔离声明不适用于另一个特权进程吗?

  • 这是否不适用于交换中的部分,而仅适用于物理内存中的部分?

答案1

地址空间隔离确实适用于特权进程,但在某些情况下,存储在内存中的数据最终可能会以迂回方式被特权进程访问。

一旦数据处于交换状态,任何具有足够特权的进程(IE具有足够权限运行以读取底层文件或设备的人)可以直接读取交换存储,并访问那里的数据。地址空间隔离在这里失效了,因为数据可以通过内存子系统以外的其他方式访问。

请注意,在较旧的内核或配置了 的内核上/dev/kmem,具有足够读取权限的进程可以读取内存中的任何进程的数据,这也会破坏地址空间隔离,这次是通过读取物理内存而不通过虚拟内存层。

相关内容