从不同地方总结摘录而来,附上原文链接原文:https://blog.csdn.net/_/article/details/
ICache和DCache是一种内存,虽然目前接触了好几种内存,寄存器,DDR等,它们在物理上的工作原理虽然不同,但是访问属性却很像。
在速度上
CPU > 寄存器 > Cache > DDR
在容量上
CPU < 寄存器 < Cache < DDR
整个系统中,CPU的供应链由:寄存器+cache+DDR+硬盘/flash 四阶组成

我们的程序在SDRAM中,如果不用cache的话,cpu每执行一条指令,都要去访问SDRAM。速度很慢。加上icache的话,当cpu去访问SDRAM时,会把附近一小块指令放到icache中去,下次执行时它会先看看icache中有没有那些指令,如果有直接从icache中取出来执行,如果没有就去SDRAM中取。
在ZYNQ中的ICache和DCache
zynq中有CORE0 和CORE1两个核心,两个核心各自拥有独立的L1 DCache,并且共享同一个L2 DCache,在ZYNQ 中存在一个Snoop Control Unit (SCU)用于维护CORE0 和CORE1 的L1 DCache 与L2 DCache之间的一致性,无需用户干预。因此,虽然CORE0 和CORE1 的共享内存区域位于DDR中,两者之间的数据传递并不需要考虑DCache 一致性的维护。但是,为了更好阐明多级存储器结构的特性以及DCache 一致性维护的问题,本例程在两核间通过DDR3 共享内存进行数据交互时加入了DCache 一致性操作,最终达到的效果与不使用DCache 一致性操作时相同。
DCache 一致性维护的原理为:在多级存储器结构中,CPU 通过1 级或多级Cache与DDR 产生连接,CPU 本身不直接访问DDR,而是通过Cache 访问DDR。Cache 中始终会暂存一小部分(通常是KB~几MB 量级)CPU 最近访问的DDR 某些地址区域中的数据。因此,在应用程序中对DDR 进行读或写操作,实际上都是CPU 对Cache 进行读或写操作。当DDR 中某个地址范围内的数据突然被除CPU 以外的Master(如DMA)改变时,若此时Cache 中保存了这些区域的数据,且这些数据在Cache 中状态为有效时,当CPU 需要再次读取DDR 这片区域的数据时,就不会让Cache 去读取DDR 中此区域内最新的数据来更新Cache,再从Cache 里读取最新的数据,而是直接从Cache 中读取原来的旧数据,显然这不是我们所期望的结果。这时,便引入了所谓的Cache 一致性问题。
发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/176614.html原文链接:https://javaforall.net
