第四部分操作系统环境(OEA-Operating Environment Architecture)寄存器寄存器集

OEA寄存器集包含四类寄存器:

1:配置寄存器(Configuration Registers

MSR寄存器:

定义处理器的状态,它可以被mtmsr, sc, rfi指令修改;可以被mfmsr读取;

PVR寄存处:

定义寄存器模型的版本和处理器的版本

2:内存管理寄存器(Memory Management Registers

BAT寄存器:

OEA定义了四组BAT指令寄存器(IBAT0U-IBAT3U和IBAT0L-IBAT3L),也定义了四组BAT数据寄存器(DBAT0U-DBAT3U和DBAT0U-DBAT3U)

SDR1寄存器:

该寄存器定义了用于虚拟地址转换为物理地址所需要的页表基地址

SR寄存器:

OEA定义了16个32位的SR寄存器(SR0-SR15)

3:中断处理寄存器(Interrupt Handing Register

      DAR(Data Address Register)寄存器:

在DSI(Data Storage Interrupt)和对齐中断发生之后,DAR寄存器被设置成异常指令产生的有效地址;

SPRG0-SPG3寄存器: 提供给操作系统使用

DSISR寄存器: 定义产生DSI(Data Storage Interrupt)和对齐中断的原因

SPR0(Machine status save/restore register 0)寄存器:

在中断中用来保存MSR寄存器,当rfi指令执行时,用来恢复MSR寄存器

     SPR1(Machine status save/restore register 1)寄存器: 在中断中用来保存MSR寄存器,当rfi指令执行时,用来恢复MSR寄存器

4:多功能寄存器(Miscellaneous Registers

TB(time base)寄存器:

具体参考第三部分VEA

DEC寄存器:这是一个32位的递减计数器

EAR(External Access Register)寄存器:用于访问外部设备

DABR(Data address breakpoint register):用来控制数据地址断点功能

PIR(Processor identification register):在多处理器的芯片上用来标识一个核,例如在MPC8641d芯片上有两个E600的core,就用PIR来定位其中的core。

OEA寄存器集的示意图如下:

4.1 MSR寄存器

MSR寄存器定义了处理器的状态,在初始化PowerPC 核心时,MSR是第一个被配置的处理器。当一个中断发生时MSR寄存器的相关位将会发生改变。它也可以被mtmsr, sc, rfi指令所修改,被mfmsr读取。

格式如下:

各个字段说明:

MSR[0:12]:保留位

备注:在E600内核中使用了保留位中第6位来表示是否使用VltiVec指令

MSR[13]-POW位:能源管理机制(Power management enable)是否开启

MSR[14]:保留位

MSR[15]-ILE:(Interrupt little-endian)采用小端格式的中断模式是否开启,当中断发生时该位被拷贝到MSR[31]-LE来确定中断上下文的端模式

MSR[16]-EE:外部中断(External interrupt)是否开启,

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:(Interrupt prefix.)中断向量号地址前缀

MSR[26]-IR:指令地址转换是否开启

MSR[27]-DR:数据地址转换是否开启

MSR[28:29]:保留位

备注:E600使用了MSR[29]位来表示是否开启性能监视标识模式(PMM-Performance Monitor Marked mode)

MSR[30]-RI:机器重启或者机器检查中断恢复是否开启

MSR[31]-LE:小段模式是否开启

备注:开启相应位置1,关闭置 0

4.2 PVR寄存器

PVR寄存器是32位的只读寄存器,它存放是PowerPC内核版本号,可以用mtspr指令把PVR的值拷贝到一个通用寄存器GPRs中,它包含两个字段,示意图如下:

Version:指出内核的版本号

Revision:指出同一个内核版本的不同修订版本。

例如对于MPC8641D开发班:

PVR的值为:0x8004 0010

4.3 PIR(Processor Identification Register)寄存器

32位的PIR寄存器是一个只读寄存器,它的值用来定位PowerPC多核芯片中的核,我们可以用mtspr指令把PIR的值拷贝到一个通用寄存器GPRs中。

PIR的字段示意图如下:

4.4 BAT寄存器

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.5 SDR1寄存器

为了说清楚SDR1寄存器的在作用,我在这里不得不详述一下PowerPC的页面地址转换的机制,O(∩_∩)O~

PowerPC的MMU从访存指令中获取的32位有效地址EA(Effective Address)分成三个部分:

第一部分 EA[0:3]:存放的是SR寄存器的索引(范围在0到15),用于选择SR寄存器。目的是从SR寄存器读取24位的虚拟段号(VSID-virtual segment ID);

第二部分 EA[4:19]:存放的是页表索引,用于在页表(Page Table)中定位页表项PTE(Page Table Entry)。EA[4:19]和从SR寄存器中读取的24位VSID,拼接52位虚拟地址(Virtual Address)的前40位,这40位我们称之为虚拟页号(VPN-Virtual Page Number)

第三部分 EA[20:31]:页内偏移地址,它和VPN构成52位虚拟地址。

这样我们就可以得到52位的虚拟地址,然后有虚拟地址的VPN位,我们在TBL或者页表中找到20位的物理页号(RPN-Physical page number),它和EA[20:31]构成32位的物理地址。

示意图如下:

备注:从图中我们可以看出有效地址到物理地址,PowerPC构架需要先把有效地址(EA)转化虚拟地址(VA),然后从VA中获得VPN之后,就会在TLB或者页表(Page Table)中检索页表项PTE(Page Table Entry)。然后从PTE中获取RPN,然后从Byte Offset拼接成物理地址(RPA-Physical Address )。

这一过程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和和字节偏移地址(Byte Offset)连接,构成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](即Page Index,也是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位页表(Page Table)物理地址的高16位;

SDR1[23:31]位:称为HTABMASK位,页表地址的掩码;

需要注意的是SDR[0:15]的16位数值是内存中页表数目的上限,也可以理解为页表的基址一部分,这一部分到底有多少位,是由HTABMASK决定的。

为了更详细的说明这种机制,我们举一个例子来说明:

比如说页表基址为0xA600 0000,即二进制:0b1010 0110 0000 0000 0000 0000 0000 0000

而SDR1寄存器的值为0b1010 0110 0000 0000 0000 0000 0000 0011,

其中SDR1[0:15](即HTABORG):1010 0110 0000 0000

SDR1[23:31](HTABMASK):0 0000 0011

因为HTABMASK的后两位是连续的两个1,所以HTABORG中的后两位将参与计算PTEGs在页表中的偏移地址,HTABORG中的高14位1010 0110 0000 00将作为页表的基址的高地址部分,剩下的32-14位补0就是页表的基地址。

备注:至于为什么HTABMASK的后端有多少个连续的1,HTABORG的后端就是相同数目个连续的0,我们在后面的运算中可以清晰的看出来(其实就是不让这些数据位有效,来使得hash函数的相同数目的位参与计算PTEGs在页表中的偏移地址)

由于通过主hash函数计算出来的PTEGs可能不一定含有目标PTE,所以我们又根据次hash函数函数计算一个PTEGs地址,如果两个PTEGs都没有目标PTE,就是让操作系统产生缺页中断。

示意图如下:

为了更清楚的说明hash函数计算页表(Page Table)内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和和字节偏移地址(Byte Offset)连接,构成32位的物理地址。

这个示意图如下:

转自:http://blog.sina.com.cn/s/blog_70dd16910100yjog.html

32位PowerPC构架通用寄存器分析及总结二相关推荐

  1. 32位PowerPC构架通用寄存器分析及总结一

    第一部分 32位 PowerPC构架下寄存器概述 32 位PowerPC构架寄存器模型可以分成三个类级别:UISA,VEA,OEA,我们根据这三个级别把PowerPC所使用的所有寄存器分为三类: 第一 ...

  2. 32位PowerPC构架通用寄存器分析及总结三

    4.6SR(Segment Registers)寄存器 OEA定义了16个32位的SR寄存器,段寄存器SR可以使用mtsr/mfsr,mtsrin/mfsrin指令进程访问. 随着CR[0]位(我们称 ...

  3. 【软件周刊第 24 期】Ubuntu 17.04 正式发布,不再支持 32 位 PowerPC(PPC)架构

    2019独角兽企业重金招聘Python工程师标准>>> PostgreSQL 10 新增特性 PostgreSQL 10 新增了多项新特性,这里梳理几项主要内容: 声明式分区 在以前 ...

  4. 32位PowerPC常用指令集总结

    第一部分 PowerPC 精简指令集计算机(RISC)简介 PowerPC 体系结构是一种精减指令集计算机(Reduced Instruction Set Computer,RISC)体系结构,定义了 ...

  5. PowerPC VxWorks BSP分析(1)--PowerPC体系结构

    POWER 是 Power Optimization With Enhanced RISC 的缩写,是 IBM 的很多服务器.工作站和超级计算机的主要处理器.POWER 芯片起源于 801 CPU,是 ...

  6. 32位系统处理64位数据

    64位返回值 x86平台 ARM平台 参数传递及加减运算 x86平台 ARM平台 右移 x86平台 ARM平台 32位数据转换为64位数据 x86平台 ARM平台 32位系统的通用寄存器GPR只能容纳 ...

  7. 64位程序调用32位dll

    转自:https://blog.csdn.net/yanmanm/article/details/81870436 https://blog.csdn.net/nie2314550441/articl ...

  8. pyinstaller64位windows电脑打包32位exe 5500字超详细教程

    目录 壹.方法简介 贰.安装32位python 一.下载安装包 二.安装python 叁.安装第三方库 一.检查安装 二.安装第三方库与pyinstaller 三.pyinstall 肆.打包exe文 ...

  9. 键盘与显示实验程序c语言,16位微机原理,32位微机原理接口教学实验系统,64位微机原理接口实训...

    TW-X38 16.32位微机原理与接口教学实验系统 一.硬件概述 TW-X38现代32位微机原理与接口技术教学实验系统的升级换代产品,采用Intel i386EX嵌入式微处理器作为系统核心,全面支持 ...

最新文章

  1. 原型模式(Prototype)
  2. python 深浅拷贝案例_python-浅拷贝、深拷贝实例以及讲解
  3. ListView在列表中新增一行的操作(增加、取消)
  4. 自定义listView添加滑动删除功能
  5. 工作三年左右的Java程序员跟大家谈谈从业心得
  6. c++-内存管理-array allocator
  7. 【渝粤教育】电大中专建筑材料 (3)作业 题库
  8. python 绘图 hist bin参数_Python-hist,distplot bin宽度不一致问题的解决方案
  9. 展望 | 2020年人工智能八大趋势
  10. python3 全局变量 局部变量_Python3获取变量名并修改函数内部的外部变量和局部变量,python3,在,local...
  11. poj 2192 Zipper
  12. 商业创业计划书的21条重要事项
  13. 中国34个省市用字体logo 石昌鸿 字体设计-借用手法
  14. 摄氏度和开氏度的换算_k与摄氏度的换算(摄氏度与开氏度换算)
  15. 做过启动盘的U盘怎么复原?三种方法教你
  16. SVN文件夹对号图标(更新、冲突等)不显示
  17. 全屏滚动插件之 fullpage.js
  18. mysql Error 1412: Table definition has changed, please retry transaction
  19. LeetCode 题解随笔:贪心算法
  20. 计算机论文致谢词范文500字,论文致谢词范文500字(精选6篇)

热门文章

  1. eclipse building workspace太慢或者 js出错问题解决
  2. 一招长期引流并锁定客户的活动,饺子馆靠“比赛”做到月入10万
  3. html 对话框 flatballoon,福建省厦门市2020届高三毕业班第一次质量检查英语试题(含答案)...
  4. ios uitableviewcell 添加uibutton无法Highlighted问题
  5. 浏览器肉搏时代 市场细化明显
  6. 百度搜索URL参数解析详解与对快排的作用!
  7. 社区发现算法——LFM算法
  8. windows php 多线程
  9. 淘宝钻石展位怎么做?大神导航,一个神奇的网站,从此开启大神之路!
  10. mysql sql ppt_SQL入门学习