Skip to content

第五章:计算机中的翻译器

这篇文章深入探讨了计算机内存管理,特别是虚拟内存、分页(paging)和内存保护机制。

1. 内存是虚拟的:

  • CPU访问的内存地址实际上是虚拟内存空间中的地址,而不是物理内存(RAM)中的确切位置。
  • 内存管理单元(MMU)充当翻译器,将虚拟内存地址转换为RAM中的物理地址。

2. 分页机制:

  • 操作系统创建一个页表(page table),用于存储虚拟内存到物理内存的映射关系。
  • 页表中的每个条目(page)代表虚拟内存中的一块内存映射到RAM中。
  • x86-64架构默认使用4 KiB大小的页,但也可以启用更大的2 MiB或4 GiB页。

3. 页表和地址转换:

  • 页表位于RAM中,每个条目大小仅为几字节。
  • 启用分页时,操作系统将页表的物理地址存储在页表基址寄存器(PTBR)中,并通过设置控制寄存器来启用MMU。

4. 内存隔离和安全性:

  • 通过分页,每个进程可以拥有自己隔离的内存空间,提高了代码的易用性和安全性。

5. 内核内存和用户内存:

  • Linux将虚拟内存空间的上半部分分配给内核,称为高半部内核(higher half kernel)。
  • 页表条目中的权限标志可以保护内核内存,防止用户态进程访问。

6. 层次化分页和优化:

  • 64位系统具有极大的虚拟内存空间,如果为每个4 KiB的虚拟内存部分都需要一个页表条目,将非常不实用。
  • 层次化分页(hierarchical paging)通过多级页表解决了这个问题,形成了树状结构。

7. 5级分页:

  • 最新的处理器实现了5级分页,增加了一个间接层并扩展了地址空间。

8. 交换(Swapping)和按需分页(Demand Paging):

  • 当内存访问失败时,MMU会触发一个称为“页面错误”(page fault)的硬件中断。
  • 操作系统可以有意让内存访问失败,然后解决问题并将控制权交回CPU。
  • 按需分页允许操作系统将磁盘上的文件映射到虚拟内存,然后在需要时才加载到物理内存中。

9. 页面错误和段错误:

  • 如果页面错误是无效或禁止的访问,内核可能会以段错误(segmentation fault)终止程序。

文章通过解释虚拟内存、分页和内存保护的概念,帮助读者理解计算机如何从启动到运行当前软件的过程。这些机制对于确保系统的稳定性和安全性至关重要。

基于 知识共享 CC BY-NC-SA 许可发布