dma访问主存时_DMA导致Cache数据一致性问题的原因及其解决方式(理论篇)
點(diǎn)擊上方公眾號(hào)名稱(chēng)關(guān)注,獲得更多內(nèi)容
??編 者 悟 語(yǔ)? ????唉!嫉妒之心真的能俘獲它所接觸到的任何目標(biāo)啊——“欲加之罪,何患無(wú)辭”呢?“覺(jué)悟高的”更有“愛(ài)屋及烏”的絕技哈,。(看到些人和事,感慨一番)
文 章 導(dǎo) 讀
? ? 今天總結(jié)一下DMA導(dǎo)致Cache數(shù)據(jù)一致性問(wèn)題的原因及其解決方式,首先介紹的Cache及其出現(xiàn)的原因,而后介紹的引起Cache數(shù)據(jù)一致性問(wèn)題的原因,最后簡(jiǎn)要說(shuō)了兩種解決Cache數(shù)據(jù)一致性問(wèn)題的方式,此為理論篇,以后有時(shí)整篇實(shí)踐性的哈,!
????公眾號(hào)新增了“讀者討論”功能,新公眾號(hào)不能留言,大家不要浪費(fèi)討論的機(jī)會(huì)哈,!
1Cache及其出現(xiàn)的原因????1)概述
??? Cache是高速緩存,它主要在內(nèi)存與CPU直接提供一個(gè)中間環(huán)節(jié),以提供數(shù)據(jù)的讀寫(xiě)速度。
??? Cache用于保存最近被訪問(wèn)的存儲(chǔ)空間內(nèi)容的備份。
??? Cache是比較貴的,它用于暫存數(shù)據(jù),一般芯片的空間都不會(huì)太大。
????2)Cache出現(xiàn)的原因
??? Cache的出現(xiàn)是基于兩種因素。
????一是由于CPU的速度和性能提高很快而主存速度較低且價(jià)格高。
????二是程序執(zhí)行的局部規(guī)律性。
??? 3)補(bǔ)充:程序執(zhí)行的局部規(guī)律性
????程序執(zhí)行的局部規(guī)律性包括時(shí)間局部規(guī)律性和空間局部規(guī)律性。
????時(shí)間局部規(guī)律性:在程序執(zhí)行過(guò)程中,剛剛被訪問(wèn)的信息可能很快被再次訪問(wèn),典型情況是程序中存在大量的循環(huán)。
????空間局部規(guī)律性:在程序執(zhí)行過(guò)程中,那些與被訪問(wèn)的地址相臨近的信息也有可能很快被訪問(wèn)。典型情況是程序中存在大量的順序執(zhí)行。
????從局部性規(guī)律可知,程序中的數(shù)據(jù)或者代碼被訪問(wèn)后,該數(shù)據(jù)和代碼以及鄰近的數(shù)據(jù)代碼近期再被訪問(wèn)的概率要遠(yuǎn)大于,近期未被訪問(wèn)的數(shù)據(jù)或者代碼被訪問(wèn)的概率。
????因此,才用速度比較快而容量有限的SRAM構(gòu)成Cache,用來(lái)改善速度較慢的存儲(chǔ)器或總線寬度較窄的存儲(chǔ)器的性能。
????對(duì)于ARM的Cortex-M系列內(nèi)核,到Cortex-M7才出現(xiàn)Cache,前面的Cortex-M0、Cortex-M3、Cortex-M4等都是不帶Cache的。
2Cache的幾個(gè)常用概念????這里只介紹兩個(gè)原來(lái)文章中少的兩個(gè),其他的概念可以看我后面提到的另一篇文章哈,因?yàn)閷?xiě)過(guò),所以就不在這再列一次了。
????① 命中。
??? Cache hit(命中):要訪問(wèn)的數(shù)據(jù)/指令在cache里面。
??? Cache miss(非命中/無(wú)效):要訪問(wèn)的數(shù)據(jù)/指令不在cache里面。
????在Cache開(kāi)啟的情況下,設(shè)備訪問(wèn)某地址的數(shù)據(jù)時(shí)之所以先去找Cache是因?yàn)镃ache的訪問(wèn)速度是比訪問(wèn)內(nèi)存快的,在Cache中找到了想要的數(shù)據(jù)(命中了),訪問(wèn)就會(huì)比較快,找不到再到指定的內(nèi)存位置去找。
????② Non-cachable。
??? CPU對(duì)內(nèi)存的讀寫(xiě)不經(jīng)過(guò)Cache。
????讀分配、寫(xiě)分配、寫(xiě)通、寫(xiě)回等概念我另一篇文章中已經(jīng),請(qǐng)受累移步結(jié)合RT1052談?wù)勗L問(wèn)存儲(chǔ)機(jī)制——緩沖、緩存、共享、執(zhí)行、阻塞,這里就不贅述了。
3數(shù)據(jù)一致性問(wèn)題及其解決方式????1)數(shù)據(jù)一致性問(wèn)題
????引發(fā)數(shù)據(jù)一致性問(wèn)題的情況主要有兩個(gè)。
????① Cache中的數(shù)據(jù)未及時(shí)更新到內(nèi)存。
????② DMA修改了內(nèi)存數(shù)據(jù),但未及時(shí)更新到Cache。
????2)數(shù)據(jù)一致性問(wèn)題的解決方式
????解決數(shù)據(jù)一致性問(wèn)題的方法也很簡(jiǎn)單,只需要手動(dòng)(程序員編寫(xiě)程序)更新數(shù)據(jù)即可,并且NXP官方SDK提供了更新數(shù)據(jù)的函數(shù)。針對(duì)兩種數(shù)據(jù)一致性問(wèn)題解決方法如下:
????① 更新Cache數(shù)據(jù)到內(nèi)存。
????一般芯片自帶的函數(shù)庫(kù)中一般會(huì)提供這樣的更新函數(shù)。
????比如,RT1052函數(shù)庫(kù)中的更新函數(shù)是L1CACHE_CleanDCacheByRange。
????② 無(wú)效化Cache中的數(shù)據(jù)。
????如果內(nèi)存中的數(shù)據(jù)被DMA更改,CPU讀取數(shù)據(jù)之前要無(wú)效化Cache,這樣CPU在Cache中找不到數(shù)據(jù)備份則會(huì)直接從內(nèi)存中讀取。
總結(jié)
? ? 今天總結(jié)了DMA導(dǎo)致Cache數(shù)據(jù)一致性問(wèn)題的原因及其解決方式,此為理論篇,后期有時(shí)整篇實(shí)踐性的哈,還會(huì)有存儲(chǔ)相關(guān)的內(nèi)容,小伙伴們敬請(qǐng)期待哈,。
? ? 有問(wèn)題可以參與讀者討論或后臺(tái)留言交流,公眾號(hào)18年后新申請(qǐng)的,文章后不支持留言功能的。
免責(zé)聲明:本文內(nèi)容來(lái)源于網(wǎng)絡(luò)和技術(shù)文檔,版權(quán)歸原作者所有。如涉及侵權(quán)問(wèn)題,請(qǐng)與我聯(lián)系刪除。
推薦文章:
結(jié)合RT1052談?wù)勗L問(wèn)存儲(chǔ)機(jī)制——緩沖、緩存、共享、執(zhí)行、阻塞
操作系統(tǒng)中幾個(gè)容易混淆的概念
UCOSIII共享資源管理方式匯總
UCOSIII源碼分析之——bsp_os.c文件分析
UCOSIII源碼分析之——bsp_cpu.c文件分析
在RT1052下使用uC-Probe 監(jiān)控UCOSIII中的資源
專(zhuān)輯推薦:
Python技能專(zhuān)輯
C語(yǔ)言專(zhuān)輯
IDE調(diào)試專(zhuān)輯
軟件推薦專(zhuān)輯
軟實(shí)力專(zhuān)輯
Linux專(zhuān)輯
掃碼關(guān)注我們
?Game Over!總結(jié)
以上是生活随笔為你收集整理的dma访问主存时_DMA导致Cache数据一致性问题的原因及其解决方式(理论篇)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: c++ 计算正弦的近似值_数值计算笔记1
- 下一篇: python编写表格程序_python对