点击上方公众号名称关注,获得更多内容
✎编 者 悟 语
唉!嫉妒之心真的能俘获它所接触到的任何目标啊——“欲加之罪,何患无辞”呢?“觉悟高的”更有“爱屋及乌”的绝技哈,。(看到些人和事,感慨一番)
文 章 导 读
今天总结一下DMA导致Cache数据一致性问题的原因及其解决方式,首先介绍的Cache及其出现的原因,而后介绍的引起Cache数据一致性问题的原因,最后简要说了两种解决Cache数据一致性问题的方式,此为理论篇,以后有时整篇实践性的哈,!
公众号新增了“读者讨论”功能,新公众号不能留言,大家不要浪费讨论的机会哈,!
1Cache及其出现的原因
1)概述
Cache是高速缓存,它主要在内存与CPU直接提供一个中间环节,以提供数据的读写速度。
Cache用于保存最近被访问的存储空间内容的备份。
Cache是比较贵的,它用于暂存数据,一般芯片的空间都不会太大。
2)Cache出现的原因
Cache的出现是基于两种因素。
一是由于CPU的速度和性能提高很快而主存速度较低且价格高。
二是程序执行的局部规律性。
3)补充:程序执行的局部规律性
程序执行的局部规律性包括时间局部规律性和空间局部规律性。
时间局部规律性:在程序执行过程中,刚刚被访问的信息可能很快被再次访问,典型情况是程序中存在大量的循环。
空间局部规律性:在程序执行过程中,那些与被访问的地址相临近的信息也有可能很快被访问。典型情况是程序中存在大量的顺序执行。
从局部性规律可知,程序中的数据或者代码被访问后,该数据和代码以及邻近的数据代码近期再被访问的概率要远大于,近期未被访问的数据或者代码被访问的概率。
因此,才用速度比较快而容量有限的SRAM构成Cache,用来改善速度较慢的存储器或总线宽度较窄的存储器的性能。
对于ARM的Cortex-M系列内核,到Cortex-M7才出现Cache,前面的Cortex-M0、Cortex-M3、Cortex-M4等都是不带Cache的。
2Cache的几个常用概念
这里只介绍两个原来文章中少的两个,其他的概念可以看我后面提到的另一篇文章哈,因为写过,所以就不在这再列一次了。
① 命中。
Cache hit(命中):要访问的数据/指令在cache里面。
Cache miss(非命中/无效):要访问的数据/指令不在cache里面。
在Cache开启的情况下,设备访问某地址的数据时之所以先去找Cache是因为Cache的访问速度是比访问内存快的,在Cache中找到了想要的数据(命中了),访问就会比较快,找不到再到指定的内存位置去找。
② Non-cachable。
CPU对内存的读写不经过Cache。
读分配、写分配、写通、写回等概念我另一篇文章中已经,请受累移步结合RT1052谈谈访问存储机制——缓冲、缓存、共享、执行、阻塞,这里就不赘述了。
3数据一致性问题及其解决方式
1)数据一致性问题
引发数据一致性问题的情况主要有两个。
① Cache中的数据未及时更新到内存。
② DMA修改了内存数据,但未及时更新到Cache。
2)数据一致性问题的解决方式
解决数据一致性问题的方法也很简单,只需要手动(程序员编写程序)更新数据即可,并且NXP官方SDK提供了更新数据的函数。针对两种数据一致性问题解决方法如下:
① 更新Cache数据到内存。
一般芯片自带的函数库中一般会提供这样的更新函数。
比如,RT1052函数库中的更新函数是L1CACHE_CleanDCacheByRange。
② 无效化Cache中的数据。
如果内存中的数据被DMA更改,CPU读取数据之前要无效化Cache,这样CPU在Cache中找不到数据备份则会直接从内存中读取。
总结
今天总结了DMA导致Cache数据一致性问题的原因及其解决方式,此为理论篇,后期有时整篇实践性的哈,还会有存储相关的内容,小伙伴们敬请期待哈,。
有问题可以参与读者讨论或后台留言交流,公众号后新申请的,文章后不支持留言功能的。
免责声明:本文内容来源于网络和技术文档,版权归原作者所有。如涉及侵权问题,请与我联系删除。
推荐文章:
结合RT1052谈谈访问存储机制——缓冲、缓存、共享、执行、阻塞
操作系统中几个容易混淆的概念
UCOSIII共享资源管理方式汇总
UCOSIII源码分析之——bsp_os.c文件分析
UCOSIII源码分析之——bsp_cpu.c文件分析
在RT1052下使用uC-Probe 监控UCOSIII中的资源
专辑推荐:
Python技能专辑
C语言专辑
IDE调试专辑
软件推荐专辑
软实力专辑
Linux专辑
扫码关注我们
❖Game Over!