您的位置:首页 > 其它

chche与DMA的一致性问题

2016-08-14 10:17 330 查看
一、chche原理

1. cache是一种高速缓冲存储器,主要作用:提高cpu数据读取速率,协调cpu速度与内存存储速度之间的差异。

2. cpu可以快速的从cache中读取数据,但是如何得到cpu在下一个时间段内用到的内存中的数据? 局部性原理:如果cpu当前时间用到内存中的某块数据,那么就将这块数据的周围数据存入cache中,为下一个时间段cpu读取数据做准备。

3. 直接映像:主存的一个字块只能映像到Cache的一个准确确定的字块中。

 
     全相联映像:指主存的一个字块可以映像到整个Cache的任何一个字块中。

组相联映像:是对全相联和直接映像的一种折中的处理方案

二、chche与DMA的一致性问题

1.在进行DMA操作时,如果没有对cache进行适当的操作,将产生两种错误:① DMA 将外部数据直接传到内存中,但cache
中仍然保留的是旧数据,这样处理器在访问数据时直接访问缓存将得到错误的数据 (DMA从外设读取数据)②处理器在处理数据时数据会先存放到cache 中,此时cache 中的数据有可能还没来得及写回到内存中的数据。如果这时DMA 直接从内存中取出数据传送到外设,外设将可能得到错误的数据(DMA向外设写数据)

2.解决问题的方法:在DMA目标地址范围内禁止chche功能。

3.在DMA目标地址范围内是否使用chche??可以根据DMA缓冲区期望保留的的时间长短来决策。因此出现了①
一致性DMA映射 ②流式DMA映射

三、一致性DMA映射与流式DMA映射

一致性DMA映射申请的缓存区能够使用cache,并且保持cache一致性。一致性映射具有很长的生命周期(该驱动的生命周期),在这段时间内占用的映射寄存器,即使不使用也不会释放。
流式DMA映射方式生命周期比较短,禁用cache。一些硬件对流式映射有优化。建立流式DMA映射,需要告诉内核数据的流动方向。
1. DMA 从外设读取数据到供处理器使用时,可先进性invalidate 操作。这样将迫使处理器在读取cache中的数据时,先从内存中读取数据到缓存,保证缓存和内存中数据的一致性。
2.DMA 向外设写入由处理器提供的数据时,可先进性writeback 操作。这样可以DMA传输数据之前先将缓存中的数据写回到内存中。
如果不清楚DMA 操作的方向,也可先同时进行invalidate 和writeback 操作。操作的结果等同于invalidate 和 writeback 操作效果的和。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: