内存管理单元

内存管理单元(英語:memory management unit,缩写为MMU),有时称作分页内存管理单元(英語:paged memory management unit,缩写为PMMU)。它是一种负责处理中央处理器(CPU)的内存访问请求的计算机硬件。它的功能包括虚拟地址物理地址的转换(即虚拟内存管理)[1]内存保护、中央处理器高速缓存的控制,在较为简单的计算机体系结构中,負責总线仲裁以及存储体切换bank switching,尤其是在8位的系统上)。

MC68451内存管理单元,可与摩托罗拉68010处理器协同使用

工作机制

现代的内存管理单元是以页的方式,分割虚拟地址空间(处理器使用的地址范围)的;页的大小是2的n次方,通常为几KB(千字节)。地址尾部的n位(页大小的2的次方数)作为页内的偏移量保持不变。其余的地址位(address)为(虚拟)页号。

页表条目

内存管理单元通常借助一种叫做轉譯旁觀緩衝區Translation Lookaside Buffer,缩写为TLB)的相联高速缓存(associative cache)来将虚拟页号转换为物理页号。当后备缓冲器中没有转换记录时,则使用一种较慢的机制,其中包括专用硬件(hardware-specific)的数据结构(Data structure)或软件辅助手段。这个数据结构称为分页表,页表中的数据就叫做分页表项(page table entry,缩写为PTE)。物理页号结合页偏移量便提供出了完整的物理地址。

页表或转换后备缓冲器中数据项包括的信息有:一、“脏位”(页面重写标志位,dirty bit)——表示该页是否被写过。二、“存取位”(accessed bit)——表示该页最后使用于何时,以便于最近最少使用页面置换算法least recently used page replacement algorithm)的实现。三、哪种进程可以读写该页的信息,例如用户模式user mode)进程还是特权模式supervisor mode)进程。四、该页是否应被高速缓冲的信息。

有时,TLB或PTE会禁止对虚拟页的访问,这可能是因为没有物理随机存取存储器random access memory)与虚拟页相关联。如果是这种情况,MMU将向CPU发出页错误page fault)的信号。操作系统(operating system)将进行处理,也许会尝试寻找RAM的空白帧,同时建立一个新的PTE将之映射到所请求的虚拟地址。如果没有空闲的RAM,可能必须关闭一个已经存在的页面,使用一些替换算法,将之保存到磁盘中(这被称之为页面调度paging)。在一些MMU中,PTEs或者TLB也存在一些缺点,在这样的情况下操作系统将必须释放空间以供新的映射。

益处

有些情况下,软件自身的错误可以引发页错误,这时内存管理单元可以检测到页错误,然后通知操作系统终止出错的程序。通常来说, 操作系统会为每个程序分配虚拟内存地址,而不会让程序直接访问物理内存。这种内存保护特性可以避免某个程序非法访问其他程序的虚拟内存空间。

此外,内存管理单元能够减少程序的内存碎片化现象。也就是说,当程序分配并释放内存块后,可分配的连续内存块的最大尺寸亦远小于尚未分配的内存量。虚拟内存机制可以在内存分页机制的基础上,将多个不连续的物理内存区块映射为一个连续的虚拟内存块。


  1. ^ Memory management unit, 1981-12-14 [2018-08-15], (原始内容存档于2021-05-12)