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行换进,增加了系统不必要的开销。
存储器相关文章:存储器原理
评论