dma访问主存时_DMA导致Cache数据一致性问题的原因及其解决方式(理论篇)
點擊上方公眾號名稱關注,獲得更多內容
??編 者 悟 語? ????唉!嫉妒之心真的能俘獲它所接觸到的任何目標啊——“欲加之罪,何患無辭”呢?“覺悟高的”更有“愛屋及烏”的絕技哈,。(看到些人和事,感慨一番)
文 章 導 讀
? ? 今天總結一下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數據一致性問題的原因及其解決方式,此為理論篇,后期有時整篇實踐性的哈,還會有存儲相關的內容,小伙伴們敬請期待哈,。
? ? 有問題可以參與讀者討論或后臺留言交流,公眾號18年后新申請的,文章后不支持留言功能的。
免責聲明:本文內容來源于網絡和技術文檔,版權歸原作者所有。如涉及侵權問題,請與我聯系刪除。
推薦文章:
結合RT1052談談訪問存儲機制——緩沖、緩存、共享、執行、阻塞
操作系統中幾個容易混淆的概念
UCOSIII共享資源管理方式匯總
UCOSIII源碼分析之——bsp_os.c文件分析
UCOSIII源碼分析之——bsp_cpu.c文件分析
在RT1052下使用uC-Probe 監控UCOSIII中的資源
專輯推薦:
Python技能專輯
C語言專輯
IDE調試專輯
軟件推薦專輯
軟實力專輯
Linux專輯
掃碼關注我們
?Game Over!總結
以上是生活随笔為你收集整理的dma访问主存时_DMA导致Cache数据一致性问题的原因及其解决方式(理论篇)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: c++ 计算正弦的近似值_数值计算笔记1
- 下一篇: python编写表格程序_python对