cache write-Through模式下应用的注意事项

来源:互联网 发布:line聊天软件 官方网站 编辑:程序博客网 时间:2024/04/30 14:12

I. cache与DMA

cache工作方式分为直写(Write-through)和回写(Copy-Back)详细介绍见http://blog.csdn.net/kklvsports/article/details/9208475

cache设置Copy-Back工作模式,写操作的时候在将数据写入cache并更新Dirty标志后,不会将数据写入cache对应的主存(只有在该缓存行需要被替换时,cache中的数据才会刷入主存中)。由于DMA(Direct Memory Access)操作无需CPU参与CPU不知道,因此此时如果有DMA(Direct Memory Access)操作需要读取刚才写的内容的话,取到的数据将是错误的,因为此时cache中的数据还未刷入主存。类似DMA写入主存某个地址数据时,CPU不知情也不会更新该地址对应cache中的内容,如果此时CPU要取DMA刚写入的数据话,取到的数据也是错误的。

如何解决上述问题呢?

1. 硬件如果支持snoop功能的话,使能snoop,让硬件保证。

2. DMA访问的空间设置为不可cache属性,但是这样影响性能

3. DMA写主存后,对对应主存地址的cache进行invalidate操作,这样CPU在访问的时候会从主存取得正确的数据;DMA读主存前,对对应主存地址的cache进行flush操作,将cache中较新的数据刷入主存。

II. i-cache和d-cache

L1 Cache分为指令cache(i-cache)和数据cache(d-cache),他们是彼此分离的,互相不感知。取指令的时候查看i-cache,读写数据的时候查看d-cache。所以,如果CPU要执行刚刚拷贝的指令(这些指令是作为数据被首先放到d-cache中)的话,在此之前要将d-cache中的指令flush到主存,并且将i-cache无效,以执行正确的代码。

参考 《see mips run 2rd edition》

0 0