Linux中虚拟内存到物理内存

Linux中虚拟内存到物理内存

我正在读虚拟内存,有疑问。

1)操作系统如何决定将哪部分虚拟地址加载到物理内存中,哪部分不加载?以便每当发生页面错误时,都会加载其他虚拟内存。

2)特定进程的页表条目存储在哪里?

3) Linux OS 中有两个进程(进程 a 和进程 b)。OS 如何管理两个进程的页表?以便每个进程获得不同的物理地址。

4)假设写入两个进程(进程a和进程b)。在硬盘中,进程a位于位置location_a(进程a的虚拟地址),大小为size_a,进程b位于location_b(location_b = location_a + size_a)(进程a的虚拟地址)。由于这两个进程在内存位置不同,因此它们彼此之间对内存的访问是隔离的。那么虚拟内存是如何隔离内存以保护其他进程对内存的访问的呢?

答案1

  1. 操作系统会按需将页面放入内存。这就是它被称为按需调页的原因。如果进程访问当前不在内存中的页面,则会发生页面错误,从而导致页面被放入内存。相反,如果内存有压力,页面将从内存中弹出(主要是 LRU)。
  2. 页表条目与内核内部的进程数据结构相链接。看这里对于 Linux。
  3. 实现虚拟内存的操作系统使用 MMU(内存管理单元)进行虚拟内存到物理内存的转换。MMU 是一个由操作系统编程的硬件,用于进程所需的页面映射。设置 MMU 后,对虚拟地址的访问将自动定向到正确的物理地址。
  4. 参见上面的 3。尽管虚拟地址相同,但通过适当设置页表(和 MMU),它们会映射到不同的物理地址。

相关内容