540 likes | 978 Views
带 Cache 的内核简要介绍. 带 Cache 的 ARM 宏单元举例. JTAG 及非 AMBA 信号. ARM 内核. CP15. 控制逻辑. 地址. MMU 或 MPU. 写缓冲. AMBA 总线 接口. AMBA 接口. 数据. 地址. 数据写. 数据读. Cache. 议程. Cache、 同步 和写缓冲介绍 存储器保护单元 内存管理单元 紧耦合存储器 带 Cache 的 ARM 处理器. 什么是 cache?. 位于处理器中的少量高速缓冲存储器, 保存最近被访问的存储空间内容的备份
E N D
带Cache的 ARM 宏单元举例 JTAG 及非AMBA信号 ARM 内核 CP15 控制逻辑 地址 MMU 或 MPU 写缓冲 AMBA 总线 接口 AMBA接口 数据 地址 数据写 数据读 Cache
议程 • Cache、同步 和写缓冲介绍 • 存储器保护单元 • 内存管理单元 • 紧耦合存储器 • 带Cache的ARM处理器
什么是 cache? • 位于处理器中的少量高速缓冲存储器, • 保存最近被访问的存储空间内容的备份 • 哪些存储空间需要读入到cache中,要通过MMU 或 MPU来控制 • 依赖于内存的重使用 • 仅用来改善速度较慢的存储器或总线宽度较窄的存储器的性能 • 降低对总线宽度的要求 • 减少功耗 外部 存储器 CPU Cache 总线 接口 地址 数据
Cache 的用法 • 数据以每次传送一行的方式复制到cache 中 • 每个cache行包含连续的数据 • Cache行按其自然的行边界尺寸分配 • Cache中的数据一旦被获取后,立即对内核有效 • 这一处理就是大家所知的数据流动 • 在一个cache 读操作不命中后,将激发cache 行内容的填充 • 但新数据应放在cache 的什么位置? • ARM 处理器支持以下置换策略中的一个或多个: • 随机, • 循环轮换 • 轮换指针指向下一个要填充的cache 行 • 已经使用过的行将被收回和替换 • 对回写数据cache而言, 任何改过的数据都要写到存储器中
结合性 • 简单cache,采用直接映射策略 • 一个特殊的存储器数据项被存放在cache 的某个特定位置。 • 相同cache 地址域的数据项将竞争这一位置。 • 实施简单,执行快捷 • 块结合cache,减少位置竞争 • 一个特殊的存储器数据项被存放在cache 的许多位置 • 如果一个特殊的存储器数据项被存放在cache中的‘n’ 个位置,那么可以说cache是n维的 • 实施较复杂,需要更多的比较硬件
直接映射 Cache Cache 主存储器 0x0000 0x0010 0x0020 0x0030 0x0040 0x0050 地址 0x0060 tag word 0x0070 index 0x0080 0x0090 tag ram 0x0064 01 00..................................01 10 00 数据 =
2-维块结合 Cache Way 0 主存储器 • 替换策略: • 随机 • 循环 • 最近最少使用 (LRU)† Set 0 0x0000 0x0010 0x0020 0x0030 0x0040 Way 1 0x0050 0x0060 0x0070 ? 目标 计数器 0x0080 0x0090 2-Way, 4 Sets Way 0 Way 1 index index tag tag = = †:当前ARM处理器未用 数据
若干定义 • Line: 行, cache的最小可装载单元 – 任何情况下都是存储器中一个连续的字块。 • Tag: 标签,存放在cache 中的存储器地址的一部分,用来识别定位在那里的特定的物理地址。 • Set: 块,一组行,用来保持来自特定存储器空间的数据。 • Way: 维,一个块所含行的数量,就是cache 的维数。 • Index: 索引,存储器地址的一部分,它决定可以存储cache 行的块。
4-维块结合 Cache 2 1 0 7 6 5 4 3 Decoder Decoder Decoder Decoder 地址 存于 TAG中的地址 (22 位) Index Word Unused 31 10 9 5 4 2 1 0 3 5 Cache 行 d0 d1 v d0 d1 Data TAG Line 0 注: 每一个地址索引映射到一个cache 行,该行可存于4维的任意一维中(4维结合) Line 1 Line 30 Line 31 way 0 这里是一个4k cache 的例子: 4 ways x 32 lines (sets) x 8 words = 4kb cache v- 有效位 d0,d1 – 脏位
64-维块结合 Cache 地址 存于 TAG中的地址(25 位) Index Word Unused 31 7 6 5 4 2 1 0 2 3 Cache line 2 1 0 7 6 5 4 3 d0 d1 TAG Data Line 0 Line 1 注: 每个地址索引映射到单一的块,每个块可以存储64不同的地址标签 (64 ways holding 4 lines). Line 62 Line 63 Set 0 Decoder 这里是 ARM922T的例子: 4 sets x 64 lines (ways) x 8 words = 8kb cache 用内容设定地址的存储器 (CAM)
Cache 闭锁 (1) • 部分cache 可能闭锁以避免被清除 • 其间隔尺度随着内核的不同而变化 • 可能在需要保证实时性能时使用 • 需要一个短的子程序来控制行填充 • 提供了例子程序 • 目标计数器范围受限 (cp15之r9) • 闭锁行可免于替换 • 仍可被‘冲洗’ - 那么闭锁机制肯定被清除了
Cache闭锁 (2) 闭锁行 TAG Data TAG Data TAG Data TAG Data Line 0 Line 0 Line 0 Line 0 Line 1 Line 1 Line 1 Line 1 Line 30 Line 30 Line 30 Line 30 Line 31 Line 31 Line 31 Line 31 way 2 way 3 way 0 way 1 Victim Counter • 这是一个4维结合的cache,每维包含32 行 (块). • 单一的目标计数器选择将要替换的维. • 闭锁固定了计数器的基值所以该值以下的通道完全免于替换. • 闭锁具有一维的间隔尺寸 (1/4的cache大小).
Cache闭锁 (3) • 这是一个64维,4个块的结合cache. • 单一的目标计数器选择将要替换的维(每个块中相同数字的行). • 闭锁固定了计数器的基值所以该值以下的块完全免于替换. • 闭锁具有一行的间隔尺寸 (1/64的cache大小). 闭锁行 (通道) TAG Data TAG Data TAG Data TAG Data Line 0 Line 0 Line 0 Line 0 Line 1 Line 1 Line 1 Line 1 Line 62 Line 62 Line 62 Line 62 Line 63 Line 63 Line 63 Line 63 set 0 set 1 set 2 set 3 Victim Counter
Cache Flushing • 保存在cache中的信息将优先与存储器相联系。但并不总是希望如此 • 如果使用了自修改的代码 • 如果MPU或MMU 被重新编程 • 因此需要一种机制来“刷新”cache • 当 cache 被刷新时, cache 行将被标记为无效,然后被重新使用 • 另外,数据cache可能含有‘脏数据’ ,所以要通过分别操作将数据写回存储器 • Cache清理和刷新由CP15指令来实现
时钟 • 固化宏单元内核(硬核) • 硬核 (例如 ARM920T, ARM940T) 有两个时钟输入,提供了灵活的时钟配置方法 • BCLK • AMBA 总线时钟, 为所有的外部总线提供时钟 • 只有在配置为‘快速总线’时才用于内核 • FCLK • 当配置为‘同步’或‘异步’时钟模式,没有外部总线活动时为内核提供时钟 • 可合成内核(软核) • 可综合内核(例如. ARM946E-S, ARM966E-S, ARM926EJ-S)只有单个时钟输入 • 单个时钟输入作为CLK信号 • HCLKEN 是第二个输入,用来生成总线时钟输出 (HCLK) • HCLK 必须能被 CLK整除
同步模式(固化宏单元) FastBus BCLK • 内核及外部总线由BCLK同步. ignored FCLK Synchronous • FCLK 的频率必须比 BCLK.高 • BCLK 只可以在FCLK 为高期间改变. • ASB操作需 BIU与 BCLK 同步. • 最大1 个BCLK 周期的同步延迟. BCLK FCLK Asynchronous • FCLK的频率必须比 BCLK.高. • 二者相位关系没有限制. • ASB操作需 BIU与 BCLK 同步. • 最大1.5个 BCLK 周期的同步延迟. BCLK FCLK
写缓冲器 (1) • 用于消除内核和存储器速度不匹配的影响 • 数据进入缓冲器时是按内核的速度 • 数据写到存储器时按总线的速度 • 存储器访问总是以正确的顺序出现 • 在非cache读, 非缓冲写和cache 行填充时,写缓冲总是首先被排空 • 有一个特定的排空写缓冲操作 内部数据总线 数据寄存器 总线接口单元 d7 d6 d5 d4 d3 d2 d1 d0 内核时钟 总线时钟 a3 a2 a1 a0 内部地址总线 地址寄存器
写缓冲器(2) • 写操作出现以下情况时处理器将停顿: • 写缓冲器满 • 写缓冲器被禁用 • 写到不可用作缓冲的区域 • 在写非缓冲区之前写缓冲器将被排空 • 如果写缓冲在软件的控制下被排空(通过CP15),处理器将停止执行 • 在写缓冲的时候不能产生异常中断 • 异常中断将被忽略
Cache 写策略 Cache External Memory CPU GCd GBd AccessMode Cache External Memory 0 0 Non cacheable, non bufferable 0 1 Non cacheable, bufferable Cache External Memory CPU 1 0 WT, Write Through GCd GCd GBd GBd AccessMode 访问模式 1 1 WB, Write Back Write Buffer 0 0 0 0 Non cacheable, non bufferable 非 cache, 非缓冲 CPU Cache 外部存储器 GCd GBd AccessMode 0 0 1 1 非 cache, 可缓冲 Non cacheable, bufferable 0 0 Non cacheable, non bufferable 1 1 0 0 WT, 直写 WT, Write Through 0 1 Non cacheable, bufferable 1 1 1 1 WB, 回写 WB, Write Back Write Buffer CPU 1 0 WT, Write Through wb 1 1 WB, Write Back Write Buffer • Write Back: • If location is within the cache, only the cache is updated wt 写缓冲 • Write Through: • If location is within the cache, the cache is updated. • Write is also sent to memory via the Write Buffer • 直写: • 如果位置在cache之内, cache 将被更新. 数据也通过写缓冲送至存储器. • 回写: • 如果位置在cache之内,只有 cache 被更新. • 注: 如果数据位置不在cache之内, 数据将被直接写到存储器中。如果存储器是可cache或可缓冲的,写缓冲将被使用 。
存储器管理 • 存储器保护单元 (MPU) 将存储空间分割为带有可编程特权的独立的区域 • 设置简单 • 节省功耗和芯片面积 • 不支持虚拟内存 • 无可用于页表的内存 • ARM940T是一例带有MPU的ARM 内核 • 内存管理单元 (MMU) 提供更多灵活的动态的存储器控制,连同更强大的特权配置 • 设置复杂 • 通过页表支持虚拟内存 • ARM920T是一例带有MMU的ARM 内核
编程模式 • 内核通过写CP15 的寄存器来配置 • cache, 保护单元, 及其他系统操作象大端或小端模式配置. • 定义在 CP15 中的寄存器只能用MCR和 MRC指令访问. • MCR/MRC{cond} p15,opcode_1,rd,cn,cm,opcode_2 • p15 – 指定协处理器 15 • opcode_1 – 总是为0 • rd - ARM 源或目的寄存器 • cn - CP15 主寄存器 • cm – 附属寄存器名 • opcode_2 - 可选的 3比特数用来指定附加信息 • 其他协处理器指令 (CDP,LDC,STC)或在非特权模式使用 MCR/MRC访问CP15 将导致未定义指令异常.
议程 Cache、同步 和写缓冲介绍 • 存储器保护单元 存储器管理单元 紧耦合存储器 ARM 的带Cache 处理器
保护单元 • 用于分割存储器 • 区块可以具有单独的cache属性 • 每个区块可以具有不同的访问设置,例如仅为特权模式 • 区块的大小和基地址是可选的 • 可以是分开的数据区和指令区(哈佛结构) • 在保护单元使能之前至少有一个数据存储区和一个指令存储区被定义 • 区间的大小是可变的,典型值是4KB 到 4GB • 区块的边界值必须等于其大小的整数倍 • 保护单元必须在cache使能之前有效
保护区域举例 注: • 指令区必须有定义为允许文字池访问的相应数据区. • 可以设定可重叠的背景区(Background ). 指令区域图 数据区域图 • 只读 • 可Cache Flash Flash • 只读 • 可Cache 0x25FFFFFF Background Background 0x24000000 • 读写 • 不可cache • 不可缓冲 0x1FFFFFFF Peripherals 0x10000000 • 读写 • 可Cache • 可缓冲 • 只读 • 可Cache 0x0003FFFF SRAM SRAM 0x00000000
MPU 配置步骤 • 参照你的目标系统定义和使能保护寄存器 • CP15之 c6 • 为每个存储区域设定可用于cache或可用于缓冲的属性 • CP15之c2和 c3 • 为每个存储区域设定访问许可 • CP15 之c5 • 使能cache, 设置时钟同步模式,并使能MPU • CP15 之c1 • 其他内核缺省值,象数据存放模式,向量表的位置等都通过c1 设置
议程 Cache、同步 和写缓冲介绍 存储器保护单元 • 存储器管理单元 紧耦合存储器 ARM 的带Cache 处理器
什么是 MMU • 内存管理单元 • 控制存储器的访问权限 • 将虚拟地址转换为物理地址 • MMU 的组成 • 后备变换缓冲器 (TLB) • 最近用于页变换的cache • 页表浮动硬件逻辑 • 更新 TLB • 访问控制逻辑 • 如果MMU 被禁用了 • 外部地址总线将直接输出虚拟地址
虚拟地址到物理地址的映射 虚拟 存储器 变换和校验 机制. 物理 存储器 MMU 变换表 Process D Process C VRAM RAM I TLB Process B ROM D TLB RAM Process A RAM RAM Manager RAM 保护 & 中止
为什么要用 MMU? • 保护单元提供的是粗略的,通常是静态的存储模式 • 不能分配额外的存储空间 • MMU可以“动态地”重新定位存储空间 • 对存储器“重新分配”使其纳入有效的管理 • 将变换过程与系统的其他部分隔离 • 生成所需的页表虚拟存储系统
TLB 和变换表 • TLB是最近用于从虚拟地址 到 物理地址变换的cache • 为大多数存储器访问提供变换和访问权限的信息 • 若TLB 没有命中,页表浮动硬件将从存于物理存储器中的变换表重新找回,然后TLB 被更新 • 如果 TLB 满了, 有的值将因循环编排的方式被覆盖 • 变换表驻留在物理存储器中 • 第一级页表包含4096个变换,通过虚拟地址的位 31:20 索引 • 变换项包含一个指针,指向1MB的段物理空间,连同其属性信息... • 指向另一页表基地址的指针,包含了许多指向较少页物理地址指针 • 好的间隔尺度要求更多的页表,因此也需要更多的物理存储空间!
MMU 转换过程 • 变换过程由硬件完成,对用户是透明的 • 变换表由软件产生 虚拟地址 检查TLB是否包含该虚拟地址 是 否 页表浮动 得到物理地址 更新 TLB 得到物理地址
第一级描述 • 第一级描述是转换表中的一个条目,它可以是: • 一个错误 • 一个段描述 • 一个粗略的或细致的页描述 • 段描述指针指向1Mb 的段物理空间,包括访问权限和可cache和可缓冲的控制位 • 如果第一级取返回的是一个页描述,这将提供第二级描述表的基地址 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 错误 粗略的第二级描述基地址 域选择 1 0 1 粗略页表 段基地址 AP 域选择 1 C B 1 0 段 详细页表 详细的第二级描述基地址 域选择 1 1 1
第二级描述 • 第二级描述保存的是大页,小页的基地址 • 位 [1:0] 代表访问类别 • 微页只支持详细页表 • 加入微页是为了改善存储器以用于更高级的文件分段系统 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 0 0 错误 大页基地址 AP3 AP2 AP1 AP0 C B 0 1 大页 小页基地址 AP3 AP2 AP1 AP0 C B 1 0 小页 微页基地址 AP C B 1 1 微页
第一级变换页表 虚拟地址 第一级转换页表 物理地址 4096 项 1 MB 段 1 MB 段 0xFFF 00000 0xFFF AP Domain Selector 1 C B 1 0 0xFFF 00000 0xFFE 00000 0xFFF AP Domain Selector 1 C B 1 0 0xFFE 00000 0xFFD 00000 0xFFF AP Domain Selector 1 C B 1 0 0xFFD 00000 0xFFC 00000 0xFFF AP Domain Selector 1 C B 1 0 0xFFC 00000 0x006 00000 0xFFC AP Domain Selector 1 C B 1 0 0x006 00000 0x005 00000 0 0 0x005 00000 0x004 00000 0 0 0x004 00000 0x003 00000 Fine Table Base Domain Selector 1 1 1 0x003 00000 0x002 00000 Coarse Table Base Domain Selector 1 0 1 0x002 00000 0x001 00000 0x002 AP Domain Selector 1 C B 1 0 0x001 00000 0x000 00000 0x000 AP Domain Selector 1 C B 1 0 0x000 00000 粗略第二级转换页表 错误 细致第二级转换页表
第一级地址变换 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 索引进入第一级页表 段索引 虚拟地址 +TTB 第一级 页表项 段基地址 AP 域 1 C B 1 0 段基地址 段索引 物理地址
第二级变换页表 大页 16 页 第二级转换页表 64kB 粗略页表 - 256 项 小页 256 页 0 0 Large Page Base AP3 AP2 AP1 AP0 C B 0 1 4kB Small Page Base AP3 AP2 AP1 AP0 C B 1 0 1 1 大页 16页 错误 64kB 小页 256页 细致页表 - 1024 项 4kB 0 0 微页 1024页 Large Page Base AP3 AP2 AP1 AP0 C B 0 1 Small Page Base AP3 AP2 AP1 AP0 C B 1 0 Tiny Page Base AP C B 1 1 1kB
第二级地址变换 索引进入第一级页表 索引进入第二级页表 页索引 虚拟地址 +TTB 粗略/细致第二级描述基地址 页 1 x 1 第一级页表项 + 大页/小页/微页基地址 AP C B x x 31 30 29 28 27 26 25 24 23 22 21 20 19 18 17 16 15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 第二级页表项 大页/小页/微页基地址 页索引 物理地址
域 • MMU 访问主要由域控制 • 所有定义的存储器区域都有一个相关联的域 • 域被定义为2比特的读写区 • 可以定义16个域 • 域通常允许3个状态 • 客户态 – 服从段或页描述中的访问权限 • 管理态 – 忽略段或页描述中的访问权限 • 所以无错误产生 • 无读写态 – 任何访问都将产生一个域错误 • 可以通过简单的协处理器写操作修改域的读写区 31 0 D15 D14 D13 D12 D11 D10 D9 D8 D7 D6 D5 D4 D3 D2 D1 D0
CP15 C13 – 进程 ID 寄存器 • 用于快速的文本切换 (FCSE) • 进程 ID 可以取代虚拟地址的位[31:25] • 如果 CP15 之R13 是0, VA 位[31:25] 未修改 • 有效地允许每个进程运行在相同的虚拟地址空间 • 复未时为0 • MCR/MRC p15,0,Rd,c13,c0,0 • 读进程ID寄存器,返回进程标识 • 写操作将更新进程标识 31 25 24 0 Process ID SBZ
利用进程 ID 寄存器生成地址 OS 进程管理 判决逻辑 进程 ID VA[31:25] MVA[31:0] 修改过的地址 送入 Cache和 MMU 来自内核的指令地址 VA[31:0] VA[24:0]
进程 ID – 映射举例 • 如果 ( 0 VA < 32 MB ) 则 MVA = (32MB Process ID) + VA MMU虚拟地址 (MVA) 4 GB 32 MB 来自内核的虚拟地址 (VA) 4 GB 32 MB 0 MB P0 进程 ID P1 P30 P2 P3 P31 P4 0 MB
MMU 配置步骤 • 在存储器中构造转换页表,定义所需的从虚拟地址到物理地址转换的初始值 • 转换页表项包括可cache和可缓冲的属性 • 也包括访问权限 • 设置变换页表基地址 • CP15 之c2 • 使能cache, 设置时钟同步模式并使能 MMU • CP15之c1 • 其他内核缺省配置如存储模式和向量地址页在这里设置
议程 Cache、同步 和写缓冲介绍 存储器保护单元 存储器管理单元 • 紧耦合内存 ARM 的带Cache 处理器
什么是紧耦合内存? • 取代cache 的一种选择,当其附在速度较慢的外部存储器上时,允许提供高性能的读写操作 • 快速存储器, 紧靠微处理器 • 提供高速性能,而不访问系统总线 • 与等量的cache 相比,在芯片尺寸上付出的代价较小 • 在存储器映射中的位置是固定的 • 代码和数据执行前将被复制到此 • 实时性能能够被准确预测
ARM966E-S 存储器映射 物理存储区图 TCM混叠 0xFFFFFFFF 256MB AHB Unbuffered 0x07FFFFFF Data Alias 2047 32KB 0x07FF8000 256MB AHB Unbuffered Data Alias 1 32KB 0x04008000 Data Memory 32KB 0x10000000 0x04000000 128MB AHB Buffered Instruction Alias 1023 64KB 0x03FF0000 0x08000000 64MB Data Memory Instruction Alias 1 64KB 0x04000000 0x00010000 64MB Instruction Memory Instruction Memory 64KB 0x00000000 0x00000000
ARM946E-S存储器映射 0-1024 KB TCM (Alias 1) 0-1024 KB TCM (Alias 1) 0-1024 KB TCM (Alias 1) 0-1024 KB TCM (Alias 1) 0-1024 KB TCM 0-1024 KB TCM 0-1024 KB TCM 0-1024 KB TCM 1/2 Size 1/2 Size 1/2 Size 1/2 Size 0-1024 KB TCM 0-1024 KB TCM 0-1024 KB TCM 0-1024 KB TCM 内核 TCM 存储器 TCM存储器映射 • 指令TCM的基地址总是 0x0 • 数据 TCM的基地址是其大小的整数倍 • TCM的大小可以指定 • 如果大于其实际大小, 将发生TCM 混淆现象 • 如果小于其实际大小, 某些存储空间将不会出现 • 随后可以放置在更好的地址 • 使能后, TCM 不可以重叠 0-1024 KB TCM
议程 Cache、同步 和写缓冲介绍 存储器保护单元 存储器管理单元 紧耦合内存 • ARM 的带Cache 处理器
命名约定 • ARMx1z (e.g. ARM710T) 表示 cache 和全MMU • ARMx2z (e.g. ARM720T) cache, MMU 及 进程 ID 支持 • ARMx4z (e.g. ARM740T) cache 和保护单元 • ARMx6z (e.g. ARM966E-S) 写缓冲但无cache • ARMxy6 (e.g. ARM946E-S) 紧耦合 SRAM
ARM的带 Cache处理器 • ARM10 系列 - ARM1020E • ARM9E-S系列- ARM926EJ-S, ARM946E-S, ARM966E-S • ARM9TDMI系列- ARM920T, ARM922T, ARM940T • ARM7TDMI系列- ARM710T, ARM720T, ARM740T • StrongARM 和XScale系列 • 更早的 ARM 处理器 - ARM710a, ARM610 等.