MMU的工作原理

806 阅读3分钟
1、什么是MMU

MMU(Memory Management Unit)是一种硬件设备,通常是集成在CPU内部的一个模块。MMU主要的功能是负责虚拟内存到物理内存的地址映射,也就是把进程使用的虚拟地址映射到真正的物理内存地址上。

在操作系统中,每个进程都有自己的虚拟地址空间,这样可以让每个进程看到的内存地址相互独立,进程之间不会互相干扰。而物理内存是实际的硬件内存空间,所有进程共享同一片物理内存,因此需要一个机制将虚拟地址映射到物理地址。

2、MMU和页目录、页表有什么关系

在使用虚拟内存的操作系统中,内存空间被划分为固定大小的页面,每个页面都有唯一的虚拟地址和物理地址。为了实现地址翻译,操作系统需要建立页表和页目录来描述虚拟地址和物理地址之间的映射关系。

页目录和页表是分层的数据结构,页目录包含多个页表的地址,每个页表描述了一个固定范围的虚拟地址和物理地址的映射。MMU使用这些表来查找虚拟地址对应的物理地址,并将结果返回给CPU。

MMU通过使用特殊的寄存器来保存页目录和页表的地址,以及一些其他的控制信息。当CPU需要访问一个虚拟地址时,MMU会使用这些信息来查找正确的物理地址,然后将结果返回给CPU。如果地址不存在,MMU会触发一个异常,这个异常将被操作系统捕获并处理。

具体来说,x86架构中的MMU使用两个控制寄存器来管理页表和页目录:

  1. CR3寄存器:它保存着当前进程的页目录的物理地址。当CPU发出一个内存访问请求时,MMU会根据当前进程的页目录来查找对应的页表项,并将虚拟地址翻译成物理地址。当操作系统切换进程时,它会更新CR3寄存器来指向新进程的页目录。
  2. CR4寄存器:它包含一些特殊的控制标志,可以用来开启或关闭一些硬件特性,例如写保护模式、物理地址扩展等。操作系统可以使用CR4寄存器来控制MMU的一些行为,以满足不同的需求。

3、MMU工作流程

  1. 当CPU访问内存时,它会将虚拟地址发送给MMU。
  2. MMU会将虚拟地址分解成两部分:页目录索引和页表索引。
  3. MMU会读取CR3寄存器中保存的当前进程的页目录的物理地址,并使用页目录索引来查找页目录项。
  4. 如果页目录项中存在有效的页表的物理地址,则MMU会读取该物理地址,并使用页表索引来查找页表项。
  5. 如果页表项中存在有效的物理地址,则MMU会将页表项中的物理地址与虚拟地址的偏移量相加,得到实际的物理地址,并将该物理地址返回给CPU。
  6. 如果页表项中不存在有效的物理地址,则MMU会引发一个缺页异常,通知操作系统将对应的页面从磁盘读入物理内存,并更新页表项。
  7. 操作系统将页面读入物理内存之后,会更新对应的页表项,并重新执行引起缺页异常的指令。
  8. MMU会重复步骤3-5,直到找到对应的物理地址并返回给CPU。
  9. CPU将实际的物理地址用于读取或写入内存。