跳转至

第十六章、存储器管理单元及保护单元⚓︎

约 1004 个字 预计阅读时间 5 分钟

Chapter1、存储器管理的一般原理⚓︎

单核下的多任务是由于程序间的快速切换,而程序切换是通过存储器管理单元支持的。

两种基本方法:段式管理、页式管理

段式管理:允许应用程序将其存储器视为一系列的段,每段包含一些特定类别的信息。

每次存储器访问都向 MMU 提供一个段选择和一个逻辑地址(相对段基地址的偏移);

各段之间是独立的,因此可能产生碎片化的问题,通过系统拼接成大片虽然可以解决,但效率低;

ARM 体系结构不支持段式管理。

页式管理:逻辑和物理地址分为固定大小的页,通常几 KB,逻辑和物理页之间的关系保存在页表中。

由于单页表将耗费很大的空间,通常采取多级页表(至少两级):

如:地址的高 10 位用于确定一级页表目录中相应的二级页表,次高 10 位确定页表项,即物理页数

ARM 支持页式管理;

Chapter2、ARM 存储器管理单元(MMU)⚓︎

MMU 通过系统控制协处理器 CP15 实现,控制片上 Cache、存储器管理或保护单元、写缓冲器、预取缓冲器等操作

MMU 结构⚓︎

两个基本功能:将虚拟地址转换为物理地址、控制存储器访问权限,中止非法访问

存储器粒度:段(1MB)、大页(64KB/16KB 子页)、小页(4KB/1KB 子页)、微页(1KB)页域

ARM MMU 特有,一组具有特定访问权限的段/页,允许多个不同过程用同一个转换表执行,同时不同程序之间具有保护功能。提供了一种更为轻便的过程转换机制,不必使每个过程都有自己的转换表。

转换过程⚓︎

转换从第一级开始,转换基址寄存器[31:14]结合虚拟地址的位[31:20]形成一个存储器地址,访问第一级描述符

第一级描述符可能是一个段的描述符,也可以是第二级页表的指针,取决于最低两位: - 00——产生转换故障的描述符 - 01——第二级粗页表指针 - 10——段描述符 - 11——第二级精细页表指针

若转换为段,访问权限检查通过后,则存储器地址由段描述符的位[31:20]结合虚拟地址的位[19:0]级联构成

小页转换同理可得

访问权限⚓︎

  • MMU 可能产生对齐、转换、页域以及权限故障
  • 外部存储器系统可能产生 Cache 行取、不可 Cache 或不可缓冲访问以及转换表访问故障
  • 所有故障都称为中止,由处理器作为预取或数据中止异常来处理
  • 数据访问故障使故障状态寄存器(CP15 寄存器 5)和故障地址寄存器(CP15 寄存器 6)更新,以提供故障产生原因和位置的信息
  • 指令访问故障只会在指令执行时产生异常,故障地址可由返回的在 R14 链接寄存器中的地址推断出来

Chapter3、ARM 保护单元⚓︎

定义了不同存储器区域的各种保护及 Cache 功能。通过修改保护单元寄存器 CP15 实现保护单元的结构

  • 保护单元允许将 ARM 的 4GB 寻址空间映射为 8 个区域
  • 每个区域都有可编程的起始地址及大小、可编程的保护及 Cache 性质
  • 这些区域可以重叠,对重叠区域的寻址有固定的优先级

区域定义: - 通过写 CP 寄存器 6 可以定义 8 个区域中每个起始地址及大小(大小为倍数关系,即可不需要加减法,提高速度) - 区域最小为 4KB,最大为 4GB