关于cache一致性有关问题
关于cache一致性问题当程序进行下载、调试或者中断连接时指令cache和数据cache不同步,这些操作所产生的指令
关于cache一致性问题 当程序进行下载、调试或者中断连接时指令cache和数据cache不同步,这些操作所产生的指令这时候会被加载到数据cache,但不一定是指令cache,在这种情况下,会产生一致性问题。 问:这是我翻译的一段话,对于数据cache,为什么在程序进行下载、调试、中断时会加载到指令呢?求解释。数据cache不是一直缓存数据么?[解决办法]
探讨 太烂了,没人懂么?[解决办法] 具体看一下上下文,究竟说的哪个方面cache flush.
常见的是防止数据不一至 ram和cache要同步在一些情况,dma不能用cache的ram..... 这些都是程序可以控制的 要注意的,最常见的。
另一种一般不必关心的,就是cpu本身对命令和数据的处理上,因为是流水作业,命令和数据有时要同步刷新,在作中断,调用时,如果用汇编,要注意跳转的处理, cpu本身会对这些情况进行相应处理,所以要处理好。 一般情况不用注意,除非你想了解cpu内部的设计。
[解决办法] 1)数据Cache用来存储使用频繁的变量和数据;如果cache满了,旧的变量/数据就被挤出cache,下次访问则要到RAM中去找了。另外,对数据Cache还有两种主动的操作:
“清空”(clean)--将脏数据回写RAM后,清空Cache。又称为刷回RAM;
“使无效”(Invalidate)--脏数据不回写RAM,弃掉Cache中的现有内容。
2)在loader或debugger指令时,指令仅仅作为是数据传递的结果,暂时出现在数据Cache中,没有指令的属性。因为,待运行的指令一定在指令存储空间或指令cache中。作为CPU来说,也不知道在数据cache中存有指令。所以,说:
The instructions resulting from these operations are loaded into the data cache,
意思不一定是 “指令跑到数据cache中”,而可能是指“指令运行的结果进到数据cache中”。
3)既然切换到完全不同的程序运行,数据cache中保存的变量和数据可能暂时用不上/或无用了,所以就刷回RAM/或者弃掉。 例如,那些脏的变量需要刷回去,临时数据可能会被无效而扔掉。