1. 什么是 mmu
mmu (Memory Management Unit) 即内存管理单元,是 cpu 可选的硬件模块。
2. mmu 能做什么
用于在 CPU 和内存之间实现虚拟内存管理,主要功能是将虚拟地址转换为物理地址。什么是虚拟内存?为什么需要虚拟内存到物理内存的转换?为什么需要 mmu 这个硬件?
2.1 什么是虚拟内存
在编程人员使用角度,虚拟内存与物理内存都是一串数字(地址),只不过在访问虚拟内存时,cpu 发出的地址访问命令总先被 mmu 来劫持,而不是直接通过总线发送到内存控制器上。
2.2 为什么需要虚拟内存
通过虚拟内存这一层封装,使得系统上的所有应用程序都能访问同样的地址,也就是对于单独一个应用程序而言,像是独享了系统的内存,而实际上会通过 mmu 这个硬件将这些地址映射到不同的物理内存地址上。
2.3 为什么需要 mmu 这个硬件
mmu 可以实现虚拟内存到物理内存的转换,应用程序访问的虚拟内存具体落实到那个物理内存上面,由 mmu 与该应用程序的虚拟地址到物理地址的转换表决定。虚拟地址到物理地址的转换表存放在物理内存上面,是由操作系统根据 mmu 这个硬件来为应用程序建立的一张转换表。因此,每个应用程序都有一张内容不同的转换表,这样应用程序就能够访问同一个地址,但物理地址不同,同时也不会访问到其他应用程序的物理内存。
3. mmu 存在的意义
通过 mmu,可以为每个应用程序建立虚拟内存到物理内存的转换关系、内存访问权限,这样子能够有机会去限制应用程序只能访问该访问的地方,使得应用程序对内存的访问变的可控,而不是通过一条指针修改任意内存。让系统从内存上隔离用户程序与内核程序,增强了系统的安全性与可控性。
4. 思考
能用软件实现一套 mmu 的机制吗?应该是不行,cpu 取程序指令的动作没办法进行 hook,如果 cpu 内部执行单元产生的内存地址信号能够有机会通过软件 hook 就有可能。相反,如果 mmu 存在且启用,cpu 执行单元产生的地址信号在发送到内存芯片之前将被 mmu hook 住,这个地址信号称为虚拟地址(virtual address),简称 VA,mmu 通过内存转换表(内存转换表的地址要告诉 mmu)把 VA 翻译成另一个地址(实际物理地址)。