关于ICache和DCache

关于ICache和DCache从不同地方总结摘录而来 附上原文链接原文 https blog csdn net article details nbsp nbsp ICache 和 DCache 是一种内存 虽然目前接触了好几种内存 寄存器 DDR 等 它们在物理上的工作原理虽然不同 但是访问属性却很像 在速度上 nbsp CPU gt 寄存器 gt Cache gt DDR nbsp 在容量上 nbsp C

从不同地方总结摘录而来,附上原文链接原文: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

(0)
上一篇 2026年3月26日 下午9:29
下一篇 2026年3月26日 下午9:29


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号