E500的内存管理分析

关键字:TLB e500   e500的内存管理由两级TLB实现。我们把一级的TLB简称为L1,把二级的TLB简称为L2。其中L1对系统程序员不可见,L1的刷新和维护都由CPU的内部硬件逻辑实现。L1的刷新数据来自于L2,程序员可以通过编程来改变L2中的内容,从而也可以间接的改变L1中的内容。
下面我们主要讨论L2的逻辑
L2由两个TLB数组组成,这两个TLB数组是统一的TLB,也就是说它们既可以缓存指令也可以缓存数据。我们把这两个L2的数组分别称为L2TLB1和L2TLB2。其中L2TLB1有16个表项,并且每一个表项可以影射的内存大小可变。(对于e500v1来说,可变得范围为4k到256M,对于e500v2来说,可变范围为4k到4G范围)。L2TLB2有512个表项,而且只支持4k的固定大小的内存影射。
我们可以通过以下指令来操作L2中的两个TLB数组:
tlbre
tlbwe
tlbsx
tlbsync
tlbivax
mtspr
系统程序员需要在程序启动时对L2TLB1或者L2TLB2进行编程,建立相应的内存影射来满足自己程序运行的需要。当系统刚刚启动,e500默认会在L2TLB1数组的第一个表项里填充内容,对整个地址空间的最后4k地址进行影射。内容如下:
V 1
TS 0
TID[0-7] 0x00
EPN[32-51] 0xFFFFF
RPN[32-51] 0xFFFFF
SIZE[0-3] 0001
SX/SR/SW 111
UX/UR/UW 000
WIMGE 01000
X0-X1 00
U0-U3 0000
IPROT 1
e500规范规定,系统已启动,应该从0xFFFFFFFC开始运行,一般来说这个地方存放了一条跳转指令,跳转到系统为我们已经影射好的最后的4k的代码中,而在最后的4k代码中,我们需要进行TLB的映射,否则我们只能使用最后的4k空间。
(未完待续) 作者:michael.kang([email protected])

你可能感兴趣的:(编程)