内存管理单元
编辑内存管理单元 (MMU),有时称为分页内存管理单元 (PMMU),是一种计算机硬件单元,所有内存引用都通过自身传递,主要执行虚拟内存地址到物理地址的转换。
MMU 有效地执行虚拟内存管理,同时处理内存保护、高速缓存控制、总线仲裁以及在更简单的计算机体系结构(尤其是 8 位系统)中的存储体切换。
概览
编辑现代 MMU 通常将虚拟地址空间(处理器使用的地址范围)划分为页面,每个页面的大小为 2 的幂,通常为几千字节,但它们可能更大。 地址的最低位(页面内的偏移量)保持不变。 高地址位是虚拟页码。
页表条目
大多数 MMU 使用称为页表的内存中项目表,每页包含一个页表条目 (PTE),以将虚拟页码映射到主内存中的物理页码。 PTE 的关联缓存称为转换后备缓冲区 (TLB),用于避免每次映射虚拟地址时都必须访问主内存。 其他 MMU 可能有一个私有的内存数组或寄存器,用于保存一组页表条目。 物理页号与页偏移量结合起来给出完整的物理地址。
PTE 还可能包含有关页面是否已被写入(脏位)、上次使用时间(访问位,用于最近最少使用 (LRU) 页面替换算法)、进程类型(用户模式)等信息 或主管模式)可以读取和写入它,以及它是否应该被缓存。
有时,PTE 禁止访问虚拟页面,可能是因为没有为该虚拟页面分配物理随机存取存储器 (RAM)。 在这种情况下,MMU 向 CPU 发出页面错误信号。 操作系统 (OS) 然后处理这种情况,可能是通过尝试找到空闲的 RAM 帧并设置新的 PTE 以将其映射到请求的虚拟地址。 如果没有可用的 RAM,则可能需要使用某种替换算法选择现有页面(称为受害者),并将其保存到磁盘(称为分页的过程)。 对于某些 MMU,也可能缺少 PTE,在这种情况下,操作系统将不得不为新映射释放一个。
MMU 还可能在非法或不存在的内存访问时分别生成非法访问错误条件或无效页面错误,从而在操作系统处理时导致分段错误或总线错误条件。
好处
在某些情况下,页面错误可能表明存在软件错误,这可以通过使用内存保护作为 MMU 的主要优点之一来防止:操作系统可以使用它来防止错误程序通过不允许访问特定程序的内存来防止错误程序 不应该访问。 通常,操作系统会为每个程序分配其自己的虚拟地址空间。
MMU 还可以缓解内存碎片问题。 分配和释放内存块后,空闲内存可能会变得碎片化(不连续),因此xxx的连续空闲内存块可能比总量小得多。 使用虚拟内存,可以将连续范围的虚拟地址映射到几个不连续的物理内存块; 这种非连续分配是分页的好处之一。
在一些早期的微处理器设计中,内存管理由单独的集成电路执行,例如 VLSI Technology VI475 (1986)、与 Macintosh II 中的 Motorola 68020 CPU 一起使用的 Motorola 68851 (1984),或 Z8010 和 Z8015 (1985) 与 Zilog Z8000 系列处理器一起使用。 后来的微处理器(例如摩托罗拉 68030 和 Zilog Z280)将 MMU 和 CPU 放在同一个集成电路上,英特尔 80286 和后来的 x86 微处理器也是如此。
虽然本文主要关注通常基于页面的现代 MMU,但早期系统使用类似的基本限制寻址概念,并进一步发展为分段。 这些偶尔也会出现在现代建筑中。 x86 体系结构在 80286 中提供了分段而不是分页,并且在 80386 和更高版本的处理器中同时提供了分页和分段(尽管分段的使用在 64 位操作中不可用)。
例子
编辑大多数现代系统将内存划分为大小为 4-64 KB 的页面,通常能够使用所谓的 2 MB 或 1 GB 大小的大页面(通常两种变体都是可能的)。 页面翻译缓存在翻译后备缓冲区 (TLB) 中。 当在 TLB 中找不到页面转换时,一些系统(主要是较旧的 RISC 设计)会陷入操作系统。 大多数系统使用基于硬件的树遍历器。 大多数系统允许禁用 MMU,但有些系统会在陷入操作系统代码时禁用 MMU。
内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/195850/