5.3 Power PC CPU的内存管理机制
在嵌入式开发领域,Power PC、ARM等功耗相对较低的CPU应用得比较广泛,在此简单介绍一下Power PC的内存管理机制,作为对Intel CPU内存管理机制内容的一个补充。
图5-14示意了PPC(Power PC)CPU的内存管管理机制。
图5-14 Power PC的内存转换机制
在PPC的指令系统中,最初的地址叫做Effective address。在32位CPU中,Effective address是32位的。Effective与IA32内存管理机制中的线性地址类似,在PPC中所有编程层面涉及的地址,包括对指令和数据的寻址,都是以有效地址进行的。
PPC的实现,可以把内存分成4KB大小的页面,以分页机制进行管理;也可以把物理内存分成长度可变化(但最小长度不能低于128KB)的块(block),以块为单位进行管理。在以页为基础的内存管理机制中,进一步把页组织成段,整个地址空间被分割成大小为256MB的16个段,分别对应16个段描述符。与IA32的一个不同点是PPC的段数量是固定的,整个系统就是16个。以块(Block)为基础的管理机制中,对每个块有一个BAT与之对应,系统中的BAT组成一个寄存器数组。进行内存寻址时,CPU会对一个Effective address同时进行BAT匹配和段匹配(以Effective address的高4比特来索引一个段描述符),其中BAT优先级更高,即若Effective地址匹配BAT成功,则对段的匹配将被忽略,否则使用段匹配结果进行寻址。
我们重点介绍一下PPC的段页管理机制。CPU在寻址的过程中,根据Effective地址的高4比特定位到一个段描述符之后,根据段描述符中的一个特殊的标志(T标志)来确定进一步的动作。若T标志为0,则进入分页机制的处理程序,根据段描述符以及Effective地址的剩余比特形成一个虚拟地址(虚拟地址的长度是52比特),然后根据虚拟地址查找段表,进而获得物理地址;若T标志为1,则进入一种叫做Direct-Store的处理程序,这种处理程序是老式PPC CPU上的一种加快设备访问的机制,在新的PPC CPU中将会被淘汰,因此不用太关注。图5-15示意了PPC CPU根据Effective地址获取物理地址的过程。
图5-15 Power PC的段页管理机制
在查找段表的过程中,会把52比特的虚拟地址中的VPN(虚拟页面号,实际上是VPN字段中的一部分比特),通过一个特定的HASH算法,获得目标页表项在页表中的物理地址,进而分析页表项,从中获得物理地址。既然是HASH算法,就可能会出现冲突。在不冲突的情况下,一次就可以获得正确的页表项,若出现了冲突,则进一步采用冲突处理算法,依次比较冲突的目标项,从中选择匹配的一项。通过合理的设计页表组织结构和大小(由操作系统完成),可以大大地提高命中概率。
需要注意的是,与IA32 CPU一样,PPC CPU也有一种实地址模式(Read address mode)。在这种模式下,PPC的有效地址直接映射为物理地址,但与IA32的实地址模式不同的是,IA32的实地址模式是16位模式。