ARM体系结构与编程(第2版)第5章探索.ppt

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
5.5.1 快速上下文切换技术原理 快速上下文切换技术(FCSE)的引入避免了这种开销。它位于CPU和MMU之间,如果两个进程使用了同样的虚拟地址空间,则对CPU而言,两个进程使用了同样的虚拟地址空间;快速上下文切换机构对各进程的虚拟地址进行变换,这样,系统中除了CPU之外的部分看到的是经过快速上下文切换机制变换的虚拟地址。快速上下文切换机制将各进程的虚拟空间变换成不同的虚拟空间。这样,在进行进程间切换时,就不需要进行虚拟地址到物理地址的重映射了。 快速上下文切换机构将CPU发出的每个虚拟地址按照上述的规则进行变换,然后发送到系统中的其他部分。变换过程如图5.12所示。 * 5.5.2 快速上下文切换技术编程接口 CP15中的寄存器C13用于快速上下文切换。其编码格式如下所示。 31 25 24 0 访问寄存器C13的指令格式如下所示: MCR p15, 0, Rd, c13, c0, 0 MRC p15, 0, Rd, c13, c0, 0 当PID的值为0时,MVA=VA,相当于禁止了FCSE。系统复位后PID即为0。 当PID的值不为0时,相当于使能了FCSE。 * PID 0 5.6 与存储系统相关的程序设计指南 本节主要介绍与ARM存储系统相关的程序设计用到的一些概念。如果说前面的几章介绍了ARM存储系统内部的结构,本节是从外部来看ARM的存储系统,即ARM存储系统提供的对外接口。当用户通过这些接口来访问ARM存储系统时,需要遵守一定的规则,本节将介绍这些规则。 * 5.6.1 地址空间 ARM体系使用单一的普通地址空间。该地址空间的大小为232个8位字节。这些字节单元的地址是一个无符号的32位数值,其取值范围为0~232-1。 ARM的地址空间也可以看作是230个32位的字单元。这些字单元的地址可以被4整除,也就是说,该地址的低两位为0b00。地址为A的字数据包括地址为A、A+1、A+2、A+3四个字节单元的内容。 在ARM版本4及以上的版本中,ARM的地址空间也可以看作是231个16位的半字单元。这些半字单元的地址可以被2整除,也就是说,该地址的最低位为 0b0。地址为A的半字数据包括地址为A、A+1两个字节单元的内容。 * 5.6.1 地址空间 各存储单元的地址作为32位的无符号数,可以进行常规的整数运算。这些运算的结果进行232取模。即运算结果发生上溢出和下溢出时,地址将会发生卷绕。比如,如果运算结果为(0xffffffff+0x80),实际上地址值为0x80。为了使程序便于和将来版本兼容,在程序中尽量使地址运算的结果在0~0xffffffff之间。如果程序中跳转指令的目标地址依赖于地址值卷绕,则指令执行的结果将不可预知。所以在程序中应该保证向前跳转不超过0xffffffff,向后跳转不超过0x0。 在程序的正常执行时,每执行一条ARM指令,当前指令计数器值加4个字节;每执行一条Thumb指令,当前指令计数器值加2个字节。但是,当发生地址值上溢出时,执行的结果将是不可预知的。 LDC、LDM、STC及STM指令可能访问一段连续的存储单元。每执行一次读取/写入操作,目标单元的地址值加4个字节。如果这种地址更新造成地址值上溢出,则指令执行的结果将是不可预知的。 * 5.6.2 存储器的格式 在ARM中,如果地址A是字对齐的,有下面几种: 地址为A的字单元包括字节单元A、A+1、A+2及A+3。 地址为A的半字单元包括字节单元A、A+1。 地址为A+2的半字单元包括字节单元A+2、A+3。 地址为A的字单元包括半字单元A、A+2。 这样,每个字单元中包含4个字节单元或者两个半字单元;一个半字单元中包含两个字节单元。但是在字单元中,4个字节哪一个是高位字节,哪一个是低位字节则有两种不同的格式:Big-endian格式和Little-endian格式。 * 5.6.3 非对齐的存储访问操作 1. 非对齐的指令预取操作 2. 非对齐的数据访问操作 执行的结果不可预知。 忽略字单元地址的低两位的值,即访问地址为(Address AND 0XFFFFFFC)的字单元;忽略半字单元地址的最低位的值,即访问地址为(Address AND 0XFFFFFFE)的半字单元。 忽略字单元地址值中的低两位的值;忽略半字单元地址的最低位的值。由存储系统实现这种“忽略”。也就是说,这时该地址值原封不动地送到存储系统。 * 5.6.4 指令预取和自修改代码 在ARM中允许指令预取。在CPU执行当前指令的同时,可以从存储器中预取其后的若干条指令,具体预取多少条指令,不同的ARM实现中有不同的数值。

文档评论(0)

***** + 关注
实名认证
内容提供者

我是自由职业者,从事文档的创作工作。

1亿VIP精品文档

相关文档