ARM存储器之:高速缓冲存储器Cache
(2)寄存器c7
CP15中的寄存器c7主要用于控制Cache和写缓存。
注意 | c7有时也用于其他相似的功能,如果系统中存在预测缓存(prefetchbuffers)和分支目标(branchtarget)Cache,c7也将负责对它们进行控制。 |
c7是一个只写存储器,可以使用协处理器指令MCR对其进行操作。如果程序中包含读c7的操作,那么指令的结果不可预知。
使用MCR指令写该寄存器的命令格式如下所示。
MCRP15,0,Rd>,c7>,CRm>,opcode2>
其中,CRm和opcode2的不同组合,决定指令执行的不同操作。具体组合与操作的对应关系见表15.15。
表15.15 CRm与opcode2不同组合与操作的应用关系
CRm | Opcode2 | 含义 | 数据 |
c0 | 4 | 等待中断 | 0(SBZ,shouldbezero) |
c5 | 0 | 使整个指令Cache无效 | 0 |
c5 | 1 | 使指令Cache中某行无效 | 虚拟地址 |
c5 | 2 | 使指令Cache中某行无效 | 组号/索引 |
c5 | 4 | 清空预取缓存区 | 0 |
c5 | 6 | 清空整个分支目标Cache | 0 |
c5 | 7 | 清空分支目标Cache中的某入口项 | 生产商定义 |
c6 | 0 | 使整个数据Cache无效 | 0 |
续表
CRm | Opcode2 | 含义 | 数据 |
c6 | 1 | 使数据Cache中的某行无效 | 虚拟地址 |
c6 | 2 | 使数据Cache中的某行无效 | 组号/索引 |
c7 | 0 | 使整个统一Cache无效 哈佛结构中,使整个数据Cache和指令Cache无效 | 0 |
c7 | 1 | 使统一Cache中某行无效 | 虚拟地址 |
c7 | 2 | 使统一Cache中某行无效 | 组号/索引 |
c8 | 2 | 等待中断 | 0 |
c10 | 1 | 清理数据Cache行 | 虚拟地址 |
c10 | 2 | 清理数据Cache行 | 组号/索引 |
c10 | 4 | 清除写缓存区 | 0 |
c11 | 1 | 清理统一Cache行 | 虚拟地址 |
c11 | 2 | 清理统一Cache行 | 组号/索引 |
c13 | 1 | 预取指令Cache中的某行 | 虚拟地址 |
c14 | 1 | 清理并使数据Cache中的某行无效 | 虚拟地址 |
c14 | 2 | 清理并使数据Cache中的某行无效 | 组号/索引 |
c15 | 1 | 清理并使统一Cache中的某行无效 | 虚拟地址 |
c15 | 2 | 清理并使统一Cache中的某行无效 | 组号/索引 |
(3)寄存器c9
将Cache进入存储系统的注意目的是要提高系统的平均访问速度。但Cache是一把双刃剑,在某些情况下,可能使系统的性能更遭。下面列出了3种使Cache性能明显下降的原因。
①Cache访问未命中,处理器转向主存寻址数据,这期间的延时对系统性能影响很大。
②在回写型Cache中,如果Cache中的数据所在地址被存储管理单元重新定位(即Cache中存储的为虚地址数据),那么数据回写的操作延时很大。
③当处理器需要一个字节数据,而此数据恰好不在Cache中,那么Cache的替换策略就会将整个Cache行换进,增加了系统不必要的开销。
![](https://webstorage.eepw.com.cn/images/2014/m/wx.png)
加入微信
获取电子行业最新资讯
搜索微信公众号:EEPW
或用微信扫描左侧二维码