微机原理与接口技术 第二章: ARM微处理器硬件结构 主讲人:鞠 雷 山东大学 计算机科学与技术学院
虚拟地址 任何时候,计算机上都存在一个程序能够产生的地址集合,我们称之为地址范围。这个范围的大小由CPU的位数决定,例如一个32位的CPU,它的地址范围是0~0xFFFFFFFF (4G)而对于一个64位的CPU,它的地址范围为0~0xFFFFFFFFFFFFFFFF (64T),这个范围就是我们的程序能够产生的地址范围,我们把这个地址范围称为虚拟地址空间,该空间中的某一个地址我们称之为虚拟地址。与虚拟地址空间和虚拟地址相对应的则是物理地址空间和物理地址,大多数时候我们的系统所具备的物理地址空间只是虚拟地址空间的一个子集,这里举一个最简单的例子直观地说明这两者,对于一台内存为256MB的32bit主机来说,它的虚拟地址空间范围是0~0xFFFFFFFF(4G),而物理地址空间范围是0x000000000~0x0FFFFFFF(256MB)。
Virtual memory management
ARM存储管理单元MMU 在ARM系统中,存储管理单元MMU主要完成以下工作: 虚拟存储空间到物理存储空间的映射。 在ARM中采用了页式虚拟存储管理。它把虚拟地址空间分成一个个固定大小的块,每一块称为一页,把物理内存的地址空间也分成同样大小的页。 MMU的核心部件是TLB,若cache未命中而TLB命中,实现从虚拟地址到物理地址的快速转换(通过TLB)。 TLB中包含最近所访问的物理页的地址变换条目(逻辑页号至物理页号)。
协处理CP15 CP15是为cache和MMU提供系统控制的协处理器。 用于控制ARM的特殊性能: 1、存储器访问权限的控制。 ARM支持最多16个域,每个域的访问控制特性都是由CP15中的寄存器C3中的两位来控制的。 访问权限:没有访问特权,客户类型(用户模式,特权模式),保留,管理者权限.(p53 表2-5) 2、设置虚拟存储空间的缓冲的特性(写缓冲器)。 3、MMU的控制(使能/禁止)。 4、指令、数据缓存的控制(使能/禁止)。
协处理CP15 为控制这些特性, CP15提供了16 个额外寄存器,其中8个与MMU相关 禁止、使能MMU、cache和写缓冲 32bit,每2位设置一个域的4种不同访问属性。 00没有访问权限 这时访问该域将产生访问失效 01客户(client) 根据CP15的C1控制寄存器中的R和S位以及页表中地址变换条目中的访问权限控制位AP来确定是否允许各种系统工作模式的存储访问 10保留 使用该值会产生不可预知的结果 11管理者(manager) 不考虑CP15的C1控制寄存器中的R和S位以及页表中地址变换条目中的访问权限控制位AP,在这种情况下不管系统工作在特权模式还是用户模式都不会产生访问失效 为控制这些特性, CP15提供了16 个额外寄存器,其中8个与MMU相关 禁止、使能MMU、cache和写缓冲 寄存器 作 用 寄存器C1中的某些位 用于配置MMU中的一些操作 寄存器C2 保存内存中一级页表的基地址 寄存器C3 设置域(domain)的访问控制属性 寄存器C4 保留 寄存器C5 内存访问失效状态指示 寄存器C6 内存访问失效时失效的地址((虚拟地址)) 寄存器C8 控制与清除TLB内容相关操作 寄存器C10 控制与锁定TLB内容相关操作 引起访问失效的原因。例,地址未对齐,页表访问失效等。 向C8写入控制字,清除TLB的内容。 锁定TLB,进行替换。
协处理CP15 CP15的寄存器C1的位[0]用于控制禁止/使能MMU 访问CP15寄存器的指令有如下两条: MCR Register -> Coprocessor Register MRC Coprocessor Register -> Register 注意:这两条指令只能在系统模式下执行;在用户模式下执行该指令将引起异常。
ARM存储器存储访问过程 使能MMU时存储访问过程 : 芯片设置为MMU使能(设置CP15的C1寄存器) 根据ARM输出的虚拟地址在TLB中搜索,若TLB命中,则由地址变换条目中的物理页号与逻辑地址的低位拼接成物理地址,以此地址访问内存。 如果虚拟地址对应的地址变换条目不在TLB中,CPU从位于内存中的页表中查询,并把相应的结果添加到TLB中。如果TLB已经满了,则需要根据一定的替换算法进行替换。 。 使能MMU时存储访问过程 : 芯片设置为MMU使能(设置CP15的C1寄存器) 对于允许缓存的存储访问(C、B位允许缓存),如果Cache命中,直接操作数据,若Cache未命中,访问TLB。 虚拟地址高位逻辑页号 物理地址高位物理页号 0x0800 0x0400 0x0800 00e3 0x0400 00e3 虚拟地址 物理地址
ARM存储器存储访问过程 当得到了需要的地址变换条目后(TLB命中),将进行以下的操作: ①得到该虚拟地址对应的物理地址。 ②根据条目中C(cachable)控制位和B(Bufferable)控制位决定是否缓存该内存访问的结果(cache填充)。 C、B来自于段(1M)、大页(64K)、小页(4K)、极小页(1K)描述符。 ③根据存储权限控制位和域访问控制位确定该内存访问是否被允许。如果该内存访问不被允许,CP15向ARM处理器报告存储访问中止。 存储权限控制位AP来自于段、大页、小页极小页描述符。 域访问控制位来自于C3寄存器中的某两位。
ARM存储器存储访问过程 允许缓存(cached)的MMU存储访问示意图如下
ARM存储器存储访问过程 禁止MMU时存储访问过程(禁止TLB) ① 如果芯片禁止cache和write buffer(设置cp15寄存器c1实现),则存储访问将不考虑C和B控制位。 arm不经cache和write buffer与主存交换数据。
ARM存储器存储访问过程 ② 如果芯片禁止MMU时使能cache和write buffer 1、 arm经cache和write buffer,与主存交换数据。 2、禁止MMU时,所有的物理地址和虚拟地址相等,即使用平板存储模式。存储访问不进行权限控制,MMU也不会产生存储访问中止信号。
MMU中的地址变换过程 ARM处理器产生的地址称之为虚拟地址,MMU允许把此地址映射到一个主存地址。 逻辑地址 → (一级/二级 页表) → 物理地址 在页表和TLB中,每一个地址变换条目(页表项,逻辑页与物理页)实际上记录了一个虚拟存储空间的存储块的基地址与物理存储空间相应的一个存储块的基地址的对应关系。 根据存储块大小,可以有多种地址变换.
1-Level Page Table 实现简单,但资源浪费严重,管理4KB的内存地址需要4MB的表页
1-Level Page Table Example 实现简单,但资源浪费严重,管理4KB的内存地址需要4MB的表页
2-Level Page Table
2-Level Page Table Example
MMU中的地址变换过程 MMU使能且Cache和TLB均未命中时,ARM的虚拟地址经页表转换成物理地址。 ARM支持的存储块 (物理页): 段(section):由1MB 的存储器块构成 大页(large page):由64KB 的存储器块构成 小页(small page):由4KB 的存储器块构成 极小页(tiny page):由1KB 的存储器块构成. ARM的页表系统由一级页表和二级页表组成。 一级页表含有一级描述符,包括段描述符以及指向二级页表的指针:粗页表描述符和细页表描述符。 二级页表(粗页表/小页和细页表/极小页)含有二级描述符,包括大页、小页和极小页描述符。 在MMU中实现虚拟地址到物理地址的映射是通过两级页表来实现的: 一级页表中包含有以段为单位的地址变换条目以及指向二级页表的指针。一级页表实现的地址映射粒度较大。以段为单位的地址变换过程只需要一级页表。 二级页表中包含有以大页、小页和微页为单位的地址变换条目。以页为单位的地址变换过程需要二级页表。 一级页表 段描述符(段的起始地址及属性) 粗页表描述符(粗页表起始地址及属性) 细页表描述符(细页表起始地址及属性) 。。。 二级页表 大页(64k)描述符(大页的起始地址及属性) 小页描述符(小页起始地址及属性) 极小页描述符(极小页起始地址及属性) 。。。
一级页表的地址变换过程 CP15的寄存器C2中存放的是内存中页表的基地址。其中位[31..14]为内存中页表的基地址,位[13..0]为0。CP15的寄存器C2的位[31..14]和虚拟地址的位[31..20]结合作为一个32位数的高30位,在将该32位数的低两位值为00,从而形成一个32位的索引值。 cp15的寄存器C2 一级页表的基地址 为0 20 19 31 段、粗页表、细页表描述符地址 页表内序号 虚拟地址 31 14 13 2 1 一级页表的基地址 页表内序号 00 地址变换条目的地址 一级描述符的地址
一级描述符 1 无效 粗表 段 细表 一级描述符类型标识 31 20 19 12 11 10 9 8 - 5 4 3 2 1 8 - 5 4 3 2 1 无效 粗粒度二级页表的基地址 0 域 用户定义 1 段基地址 为0 A P 0 域 C B 细粒度二级页表基地址 为0 域 用户定义 AP访问权限控制位.一个域的访问权限取决于段\大页\小页\极小页描述符的AP位、C1寄存器的SR位和C3的域访问控制位。 祥见P53 表2-5 表2-4 粗表 Cache、写缓冲控制位 粗页表含有256项,8bit 段 细表 存储器分为16个域,8-5指定所属的域。 细页表含有1024项,10bit
段描述符 当一级描述符的位[1:0]为0b10时,该一级描述符为段描述符,它的格式和各个字段的含义如下: 一级描述符的类型标识 本段所属域 访问权限控制 C、B控制位 该段对应物理地址的高12位 当前未使用应为0
基于段的地址变换过程 由寄存器C2的高18位和虚拟地址的高12位求得段描述符的物理地址 由段描述符的物理地址求得段描述符 由段描述符中的段基址和虚拟地址的段内偏移量得到内存变量的物理地址,继而由此地址访问内存变量。 内存变量地址
二级描述符 31 16 15 12 1110 9 8 7 6 5 4 3 2 1 0 00 大页基地址(16bit) AP 3 2 1 C B 01 小页基地址(20bit) 10 极小页基地址(22bit) 11 位 说 明 Bit[1:0]: 页描述符类型标识。00无效;01大页;10小页;11极小 页 C、B: 该二级描述符对应的存储空间的cache和Write Buffer 特性控制位。 APx: 访问权限控制位 大页基地址: 该描述符对应的大页存储空间的物理基地址,64KB对齐 小页基地址: 该描述符对应的小页存储空间的物理基地址,4KB对齐 极小页基地 址: 该描述符对应的极小页存储空间的物理基地址,1KB对齐
粗粒度页表描述符 粗粒度页表描述符,指向二级页表粗页表的指针,其二级页表所含地址变换条目所对应的物理页为:4、64k。 当一级描述符的位[1..0]为0b01(0b代表二进制)时,该一级描述符中包含了粗粒度的二级页表的物理地址,这种一级描述符称为粗粒度页表描述符。它的格式和各个字段的含义如下: 10 9 8 5 4 2 1 31 粗粒度二级页表的基地址 域 用户定义 1 一级描述符的类型标识 由用户定义(必须为0) 本段所在的域的标识符 当前未使用应为0 粗粒度二级页表的基地址,该地址是1KB对齐的
粗粒度页表 粗粒度页表描述符获取二级描述符的过程 由寄存器C2的高18位和虚拟地址的高12位求得粗页表描述符的物理地址 4096项 256项 4096项 256项 根据4k页描述符地址得到4k页描述符,然后由4k页描述符中的基址和虚拟地址的页内偏移量得到内存变量的物理地址,继而以此地址访问内存变量。 由粗页表描述符的物理地址得到粗页表描述符 由粗页表描述符中的基址和虚拟地址的二级页表内序号得到4k页描述符的地址。
粗页表和4k页的二级虚实地址转换 31 20 19 12 11 虚地址 第1步 3 2 L1主页表 4095 L2粗页表 255 第2步 5 虚地址 L1偏移值 L2偏移值 页内地址 第1步 3 2 L1主页表 4095 . L2粗页表 255 . 第2步 5 二级描述符物理地址=L2基地址+2 X 4 4 L2页表项 2 3 一级描述符物理地址=基地址+3 X 4 1 2 L2页表基地址 1 12 11 31 C2基地址 物理基址 20bit 页偏移值 物理地址 复制到TLB
细粒度页表描述符(自学) 细粒度页表描述符,指向二级页表细页表的指针,其二级页表所含地址变换条目所对应的物理页为:1k、4k或64k。 当一级描述符的位[1:0]为0b11时,该一级描述符中包含了细粒度的二级页表的物理地址,称为细粒度页表描述符。它的格式和各个字段的含义如下: 一级描述符的类型标识 由用户定义 本段所在的域的标识符 当前未使用应为0 细粒度二级页表的基地址,该地址是4KB对齐的
细粒度页表(自学) 细粒度页表描述符获取二级描述符的过程 由寄存器C2的高18位和虚拟地址的高12位求得细页表描述符的物理地址 根据1k页描述符地址得到1k页描述符,然后由1k页描述符中的基址和虚拟地址的页内偏移量得到内存变量的物理地址,继而以此地址访问内存变量。 由细页表描述符中的基址和虚拟地址的二级页表内序号得到1k页描述符的地址。 。 由细页表描述符的物理地址得到细页表描述符
MMU中的存储访问权限控制 在MMU中,寄存器C1的R、S控制位和页表项中的访问权限控制位AP联合控制存储访问的权限。 A P S R 表2-3 A P S R 特权级时访问权限 用户级时访问权限 0b00 0b01 0b10 0b11 0 0 1 0 0 1 1 1 X X 没有访问特权 只读 不可预知 读/写
I/O对应的存储器映射空间 ARM中往往将I/O操作映射成存储器操作 输入:存储器读操作 输出:存储器写操作 往往不使用cache
Reading Introduction to Embedded Systems – A Cyber-Physical Systems Approach, E. Lee & S. Seshia Chapter 8, page 208 - 226