32位PowerPC构架通用寄存器分析及总结二.docx
- 文档编号:10912434
- 上传时间:2023-02-23
- 格式:DOCX
- 页数:13
- 大小:302.12KB
32位PowerPC构架通用寄存器分析及总结二.docx
《32位PowerPC构架通用寄存器分析及总结二.docx》由会员分享,可在线阅读,更多相关《32位PowerPC构架通用寄存器分析及总结二.docx(13页珍藏版)》请在冰豆网上搜索。
32位PowerPC构架通用寄存器分析及总结二
32位PowerPC构架通用寄存器分析及总结二
第四部分操作系统环境(OEA-OperatingEnvironmentArchitecture)寄存器寄存器集
OEA寄存器集包含四类寄存器:
1:
配置寄存器(ConfigurationRegisters)
MSR寄存器:
定义处理器的状态,它可以被mtmsr,sc,rfi指令修改;可以被mfmsr读取;
PVR寄存处:
定义寄存器模型的版本和处理器的版本
2:
内存管理寄存器(MemoryManagementRegisters)
BAT寄存器:
OEA定义了四组BAT指令寄存器(IBAT0U-IBAT3U和IBAT0L-IBAT3L),也定义了四组BAT数据寄存器(DBAT0U-DBAT3U和DBAT0U-DBAT3U)
SDR1寄存器:
该寄存器定义了用于虚拟地址转换为物理地址所需要的页表基地址
SR寄存器:
OEA定义了16个32位的SR寄存器(SR0-SR15)
3:
中断处理寄存器(InterruptHandingRegister)
DAR(DataAddressRegister)寄存器:
在DSI(DataStorageInterrupt)和对齐中断发生之后,DAR寄存器被设置成异常指令产生的有效地址;
SPRG0-SPG3寄存器:
提供给操作系统使用
DSISR寄存器:
定义产生DSI(DataStorageInterrupt)和对齐中断的原因
SPR0(Machinestatussave/restoreregister0)寄存器:
在中断中用来保存MSR寄存器,当rfi指令执行时,用来恢复MSR寄存器
SPR1(Machinestatussave/restoreregister1)寄存器:
在中断中用来保存MSR寄存器,当rfi指令执行时,用来恢复MSR寄存器
4:
多功能寄存器(MiscellaneousRegisters)
TB(timebase)寄存器:
具体参考第三部分VEA
DEC寄存器:
这是一个32位的递减计数器
EAR(ExternalAccessRegister)寄存器:
用于访问外部设备
DABR(Dataaddressbreakpointregister):
用来控制数据地址断点功能
PIR(Processoridentificationregister):
在多处理器的芯片上用来标识一个核,例如在MPC8641d芯片上有两个E600的core,就用PIR来定位其中的core。
OEA寄存器集的示意图如下:
4.1MSR寄存器
MSR寄存器定义了处理器的状态,在初始化PowerPC核心时,MSR是第一个被配置的处理器。
当一个中断发生时MSR寄存器的相关位将会发生改变。
它也可以被mtmsr,sc,rfi指令所修改,被mfmsr读取。
格式如下:
各个字段说明:
MSR[0:
12]:
保留位
备注:
在E600内核中使用了保留位中第6位来表示是否使用VltiVec指令
MSR[13]-POW位:
能源管理机制(Powermanagementenable)是否开启
MSR[14]:
保留位
MSR[15]-ILE:
(Interruptlittle-endian)采用小端格式的中断模式是否开启,当中断发生时该位被拷贝到MSR[31]-LE来确定中断上下文的端模式
MSR[16]-EE:
外部中断(Externalinterrupt)是否开启,
MSR[17]-PR:
指令特权级1-用户级 0-系统级
MSR[18]-FR:
浮点运算是否开启
MSR[19]-ME:
机器检测是否开启
MSR[20]-FE0和MSR[23]-FE1:
用来确定浮点数的异常模式,示意图如下:
MSR[21]-SE:
单步调试追踪是否开启
MSR[22]-BE:
分支预测追踪是否开启
MSR[24]:
保留位
MSR[25]-IP:
(Interruptprefix.)中断向量号地址前缀
MSR[26]-IR:
指令地址转换是否开启
MSR[27]-DR:
数据地址转换是否开启
MSR[28:
29]:
保留位
备注:
E600使用了MSR[29]位来表示是否开启性能监视标识模式(PMM-PerformanceMonitorMarkedmode)
MSR[30]-RI:
机器重启或者机器检查中断恢复是否开启
MSR[31]-LE:
小段模式是否开启
备注:
开启相应位置1,关闭置0
4.2PVR寄存器
PVR寄存器是32位的只读寄存器,它存放是PowerPC内核版本号,可以用mtspr指令把PVR的值拷贝到一个通用寄存器GPRs中,它包含两个字段,示意图如下:
Version:
指出内核的版本号
Revision:
指出同一个内核版本的不同修订版本。
例如对于MPC8641D开发班:
PVR的值为:
0x80040010
4.3PIR(ProcessorIdentificationRegister)寄存器
32位的PIR寄存器是一个只读寄存器,它的值用来定位PowerPC多核芯片中的核,我们可以用mtspr指令把PIR的值拷贝到一个通用寄存器GPRs中。
PIR的字段示意图如下:
4.4BAT寄存器
BAT和TLB属于MMU,是用来进行逻辑地址(有时候被称为虚拟地址)和物理地址之间的地址转换,处理的是地址映射关系,PowerPC构架,共提供三种地址转换地模式:
第一种:
页地址转换,通过TLB实现;
第二种:
BAT(块地址转换),将逻辑地址映射到一连续的物理地址;
第三种:
实地址转换,禁止地址转换(MSR[IR]=0,MSR[DR]=0),逻辑地址与物理地址相等,直接将逻辑地址送往地址总线,如果物理内存较小,高位的逻辑地址可能被忽略。
BAT机制可以将一连续的大于一页地址的逻辑地址映射到物理内存中。
如果有效地址与相应的BAT寄存器匹配,将使用BAT寄存器中的信息来转换有效地址为物理地址。
BAT是一种简单有效的映射机制,映射关系比较简单,转换效率上比页转换快,但功能不如页转换强大,最大的缺点就是不能提供虚拟映射机制。
但是如果BAT和页转换相互结合能组成一更为强大高效的转换机制。
特别需要注意的是在做地址映射的时候,TLB匹配和BAT匹配会并行进行。
但如果BAT命中,那么会用BAT中的映射关系去转换地址,TLB会被忽略;如果BAT未命中,那么会尝试用TLB机制去映射地址。
注意:
缓存是CPU和内存空间之间的中继设施,和MMU不一样,它处理的是数据,包括CPU读取的数据和指令。
关于BAT寄存器实现地址转换的机制,PowerPC构架实现的非常精致,我会在PowerPC的MMU部分详细的讲述,这里主要介绍寄存器,就不在讲述MMU啦,O(∩_∩)O~。
4.5SDR1寄存器
为了说清楚SDR1寄存器的在作用,我在这里不得不详述一下PowerPC的页面地址转换的机制,O(∩_∩)O~
PowerPC的MMU从访存指令中获取的32位有效地址EA(EffectiveAddress)分成三个部分:
第一部分EA[0:
3]:
存放的是SR寄存器的索引(范围在0到15),用于选择SR寄存器。
目的是从SR寄存器读取24位的虚拟段号(VSID-virtualsegmentID);
第二部分EA[4:
19]:
存放的是页表索引,用于在页表(PageTable)中定位页表项PTE(PageTableEntry)。
EA[4:
19]和从SR寄存器中读取的24位VSID,拼接52位虚拟地址(VirtualAddress)的前40位,这40位我们称之为虚拟页号(VPN-VirtualPageNumber)
第三部分EA[20:
31]:
页内偏移地址,它和VPN构成52位虚拟地址。
这样我们就可以得到52位的虚拟地址,然后有虚拟地址的VPN位,我们在TBL或者页表中找到20位的物理页号(RPN-Physicalpagenumber),它和EA[20:
31]构成32位的物理地址。
示意图如下:
备注:
从图中我们可以看出有效地址到物理地址,PowerPC构架需要先把有效地址(EA)转化虚拟地址(VA),然后从VA中获得VPN之后,就会在TLB或者页表(PageTable)中检索页表项PTE(PageTable Entry)。
然后从PTE中获取RPN,然后从ByteOffset拼接成物理地址(RPA-PhysicalAddress)。
这一过程PowerPC构架实现的非常精致,虽然也是MMU部分的内容,我实在是忍不住想在这里把它描述清楚。
这一过程主要分成三个步骤:
4.5.1第一个步骤:
由32位的有效地址EA转换成52位的虚拟地址VA
这一步骤如上图所示,非常的清晰,这里就不在赘述了。
这一过程主要分成两个步骤:
4.5.1第一个步骤:
由32位的有效地址EA转换成52位的虚拟地址VA
这一步骤如上图所示,非常的清晰,这里就不在赘述了。
4.5.2第二个步骤:
由52位的虚拟地址VA转化成32位的物理地址
这一步骤比较复杂,听我慢慢道来。
这一步骤里面也分为三个小步:
第一个小步:
先由52位的虚拟地址(VA)找到页表项组(PTEGs)的地址;
第二个小步:
再从页表项组(PTEGs)中逐个查找,从而找到页表项(PTE)的地址;
第三个小步:
最后从PTE中取出RPN和和字节偏移地址(ByteOffset)连接,构成32位的物理地址。
具体过程如下:
4.5.2.1由52位的虚拟地址VA找到页表项组(PTEGs)的地址
解释一下,PowerPC构架中的页表由页表项组(PTEGs)构成的,而每个PTEGs又是有PTE构成的,每个PTE有8个字节。
MMU为了找到目标页表项PTE,它使用两个hash函数(我们称之为主hash函数和次函数函数),我们首先用主hash函数找到一个PTEGs,在PTEGs中逐个需找目标PTE,如果里面不存在目标PTE,我们在用次hash函数再找一组PTEGs,再在其中需找目标PTE,如果还不在的话,此时就会发生缺页中断,交由操作系统来处理了。
备注:
为了描述清楚问题,我们来解释一下主hash函数和次hash函数。
主hash函数:
输入参数:
虚拟地址VA[5:
23]
有效地址EA[4:
19](即PageIndex,也是VA[24:
39])
处理:
将这两个地址继续或操作,由于两个位段长度不同,我们第二个位段的高位补3个0,这样都形成了19位的长度,便于进行OR操作。
输出:
上述两个位段的或操作的结果
次hash函数:
出入参数:
上述主hash函数的输出结果
输出:
上述主hash函数输出结果的反码
两个hash函数处理过程如下:
解释完两个函数之后,我们继续上面的话题:
由52位的虚拟地址(VA)找到页表项组(PTEGs)的地址的机制。
由52的虚拟地址提供两个字段VA[5:
23]和VA[4:
19](即也是有效地址EA[4:
19])提供给主hash函数,主hash函数经过运算之后给我们提供了19位计算结果。
我们怎么来使用这个hash函数呢?
这就牵涉到我们这一节将的主题SDR1寄存器(实在抱歉,现在才说到本节的主题哈,O(∩_∩)O~)
32位的SDR1寄存器的格式如下所示:
SDR1[0:
15]位:
称为HTABORG位,它保存的是32位页表(PageTable)物理地址的高16位;
SDR1[23:
31]位:
称为HTABMASK位,页表地址的掩码;
需要注意的是SDR[0:
15]的16位数值是内存中页表数目的上限,也可以理解为页表的基址一部分,这一部分到底有多少位,是由HTABMASK决定的。
为了更详细的说明这种机制,我们举一个例子来说明:
比如说页表基址为0xA6000000,即二进制:
0b10100110000000000000000000000000
而SDR1寄存器的值为0b10100110000000000000000000000011,
其中SDR1[0:
15](即HTABORG):
1010011000000000
SDR1[23:
31](HTABMASK):
000000011
因为HTABMASK的后两位是连续的两个1,所以HTABORG中的后两位将参与计算PTEGs在页表中的偏移地址,HTABORG中的高14位10100110000000将作为页表的基址的高地址部分,剩下的32-14位补0就是页表的基地址。
备注:
至于为什么HTABMASK的后端有多少个连续的1,HTABORG的后端就是相同数目个连续的0,我们在后面的运算中可以清晰的看出来(其实就是不让这些数据位有效,来使得hash函数的相同数目的位参与计算PTEGs在页表中的偏移地址)
由于通过主hash函数计算出来的PTEGs可能不一定含有目标PTE,所以我们又根据次hash函数函数计算一个PTEGs地址,如果两个PTEGs都没有目标PTE,就是让操作系统产生缺页中断。
示意图如下:
为了更清楚的说明hash函数计算页表(PageTable)内PTEGs地址的过程,我们再看下面的例子:
在上面的4.5.2.1中,我们找到了页表项组(PTEGs)的地址,现在我们只要从从页表项组(PTEGs)中逐个查找,我们的目标PTE地址。
我们需要先从通过主hash计算出来的PTEGs组中逐个查找目标PTE,如果不存在的话,我们再在通过次hash表计算出来的PTEGs组中逐个查找,如果还找不到的话,就让OS产生缺页中断把包含目标PTEGs的页表调入主存,我们再次重复上述过程。
4.5.2.3得到物理地址
我们从在2.5.2.2中获取到的PTE中取出RPN和和字节偏移地址(ByteOffset)连接,构成32位的物理地址。
这个示意图如下:
待续。
。
。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 32 PowerPC 构架 通用 寄存器 分析 总结