資料介紹
1 Cache的原理
Cache即高速緩存,它的出現(xiàn)基于兩種因素:一、CPU的速度和性能提高很快,而主存速度較低且價格高;二、程序執(zhí)行的局部性特點(diǎn)。將速度較快而容量有限的SRAM構(gòu)成Cache,可以盡可能發(fā)揮CPU的高速度。CPU與外設(shè)交換數(shù)據(jù)時經(jīng)常用到buffer(緩沖),這與緩存極其相似,只不過Cache是為了提高CPU和內(nèi)存之間的數(shù)據(jù)交換速度而設(shè)計,而buffer是為了提高內(nèi)存和硬盤(或其他I/O設(shè)備)之間的數(shù)據(jù)交換速度而設(shè)計的。
Baidu快照(cache.baidu.com)就是一個緩存的例子,其作用與計算機(jī)CPU緩存有類似之處。 Cache的原理如圖1所示。

在讀取內(nèi)存數(shù)據(jù)的同時CPU將數(shù)據(jù)保存到Cache數(shù)據(jù)區(qū),同時更新Cache映射表(保存地址信息,表示該地址的數(shù)據(jù)是否已在Cache數(shù)據(jù)區(qū),即是否命中)。這樣,CPU再次讀取該地址數(shù)據(jù)時,就可以直接從Cache提取。讀Cache的時間遠(yuǎn)小于直接讀內(nèi)存,可提高CPU讀取數(shù)據(jù)的效率。
Cache數(shù)據(jù)區(qū)有成塊讀取的特性(Cache映射表保存的地址是塊地址,節(jié)省空間,也符合程序執(zhí)行的局部性特點(diǎn))。Cache數(shù)據(jù)區(qū)遠(yuǎn)遠(yuǎn)小于內(nèi)存空間,就需要相應(yīng)的替代算法。比如最近最少使用算法,可將新數(shù)據(jù)替代使用頻率低的數(shù)據(jù),同時更新映射表信息。可以推想,Cache空間越大,命中率越高。
寫內(nèi)存需要直接更新內(nèi)存。如果映射表存在該地址信息,還需要同時更新Cache數(shù)據(jù)區(qū)。這種Cache訪問方式就稱作“直寫”,Samsung公司的ARM7微處理器S3CA510B就是這種方式。以下所討論的Cache問題除非特殊說明,否則都是“直寫”方式。
2 嵌入式編程時需注意的問題
2.1 訪問外設(shè)使用Cache的問題
在訪問內(nèi)存時使用Cache是不會出現(xiàn)問題的,但如果訪問數(shù)據(jù)易變外設(shè)(數(shù)據(jù)不依賴于CPU寫操作而改變)時使用Cache就可能出現(xiàn)問題。問題在于外設(shè)數(shù)據(jù)的改變不僅僅依靠CPU寫操作,CPU第一次讀取外設(shè)數(shù)據(jù)時將外設(shè)的數(shù)據(jù)和地址信息保存到Cache,第二次讀取外設(shè)數(shù)據(jù)時就可能有問題出現(xiàn)。這是因為數(shù)據(jù)直接從Cache提取,而外設(shè)的數(shù)據(jù)可能有改變。
因此,在訪問易變外設(shè)時要禁止使能Cache,直接讀取外設(shè)數(shù)據(jù)到CPU,而不經(jīng)過Cache的任何環(huán)節(jié),即保證不改變Cache映射表和Cache數(shù)據(jù)區(qū)內(nèi)容。
S3C4510B的SYSCFG SFR(特殊功能寄存器)有用來控制Cache使能或不使能的,通過對該SFR的設(shè)置可暫時禁止Cache或重新恢復(fù)Cache功能。這樣就可以在讀取外設(shè)前禁止Cache,讀取結(jié)束后重新使能Cache,保證了外設(shè)數(shù)據(jù)讀取的正確性。寫數(shù)據(jù)到外設(shè)時采用“直寫”方式,更沒有問題。
2.2 開關(guān)Cache引發(fā)的新問題
在Cache開關(guān)期間,如果有另一個進(jìn)程/任務(wù)訪問內(nèi)存,在此期間寫內(nèi)存并且該內(nèi)存在Cache中已有映射(注意,它也是被禁止Cache的,所以它不會同時更新Cache數(shù)據(jù)區(qū)的內(nèi)容),那么在Cache重新使能之后Cache數(shù)據(jù)區(qū)的信息已經(jīng)過時了,而Cache映射表還是Cache禁止之前的狀態(tài),如果CPU此時讀數(shù)據(jù)就會得到過時的數(shù)據(jù)。這樣看來,引發(fā)的問題范圍更廣了,連內(nèi)存的數(shù)據(jù)讀寫正確性都無法保證。與內(nèi)存泄漏的影響來比較,內(nèi)存泄漏如果是一顆定時炸彈,那么Cache問題就可以說是隨時隨地都可能踩上的雷區(qū),因為程序一旦開始就可能引發(fā)爆炸。
如圖2所示,Cache使能時Cache映射表和Cache數(shù)據(jù)區(qū)保存了內(nèi)存的數(shù)據(jù)信息,這是CPU訪問內(nèi)存時通過圖中實線箭頭通路實現(xiàn)的。內(nèi)存的信息可以與Cache的信息保持一致。

Cache禁止時的情況有所變化。由圖2中虛線箭頭通路直接進(jìn)行內(nèi)存訪問,且地址0x00處的數(shù)據(jù)由55變?yōu)锳A,但Cache區(qū)的信息仍為之前的狀態(tài)。很明顯,Cache的數(shù)據(jù)是應(yīng)該廢棄的,但是Cache映射表仍保存0x00的地址信息。Cache重新使能后,CPU再次讀取0x00地址的數(shù)據(jù),由于Cache仍是命中,直接從Cache數(shù)據(jù)區(qū)中提取數(shù)據(jù),這樣讀出來的數(shù)據(jù)就是0x55了。
由S3C4510B數(shù)據(jù)手冊第4節(jié)的第21頁可知:通過對SYSCFG寄存器的CE位置1或清0可使能/關(guān)閉Cache,但是Cache沒有內(nèi)容自動刷新功能,在重新使能Cache時需考慮Cache數(shù)據(jù)的正確性。
Cache即高速緩存,它的出現(xiàn)基于兩種因素:一、CPU的速度和性能提高很快,而主存速度較低且價格高;二、程序執(zhí)行的局部性特點(diǎn)。將速度較快而容量有限的SRAM構(gòu)成Cache,可以盡可能發(fā)揮CPU的高速度。CPU與外設(shè)交換數(shù)據(jù)時經(jīng)常用到buffer(緩沖),這與緩存極其相似,只不過Cache是為了提高CPU和內(nèi)存之間的數(shù)據(jù)交換速度而設(shè)計,而buffer是為了提高內(nèi)存和硬盤(或其他I/O設(shè)備)之間的數(shù)據(jù)交換速度而設(shè)計的。
Baidu快照(cache.baidu.com)就是一個緩存的例子,其作用與計算機(jī)CPU緩存有類似之處。 Cache的原理如圖1所示。

在讀取內(nèi)存數(shù)據(jù)的同時CPU將數(shù)據(jù)保存到Cache數(shù)據(jù)區(qū),同時更新Cache映射表(保存地址信息,表示該地址的數(shù)據(jù)是否已在Cache數(shù)據(jù)區(qū),即是否命中)。這樣,CPU再次讀取該地址數(shù)據(jù)時,就可以直接從Cache提取。讀Cache的時間遠(yuǎn)小于直接讀內(nèi)存,可提高CPU讀取數(shù)據(jù)的效率。
Cache數(shù)據(jù)區(qū)有成塊讀取的特性(Cache映射表保存的地址是塊地址,節(jié)省空間,也符合程序執(zhí)行的局部性特點(diǎn))。Cache數(shù)據(jù)區(qū)遠(yuǎn)遠(yuǎn)小于內(nèi)存空間,就需要相應(yīng)的替代算法。比如最近最少使用算法,可將新數(shù)據(jù)替代使用頻率低的數(shù)據(jù),同時更新映射表信息。可以推想,Cache空間越大,命中率越高。
寫內(nèi)存需要直接更新內(nèi)存。如果映射表存在該地址信息,還需要同時更新Cache數(shù)據(jù)區(qū)。這種Cache訪問方式就稱作“直寫”,Samsung公司的ARM7微處理器S3CA510B就是這種方式。以下所討論的Cache問題除非特殊說明,否則都是“直寫”方式。
2 嵌入式編程時需注意的問題
2.1 訪問外設(shè)使用Cache的問題
在訪問內(nèi)存時使用Cache是不會出現(xiàn)問題的,但如果訪問數(shù)據(jù)易變外設(shè)(數(shù)據(jù)不依賴于CPU寫操作而改變)時使用Cache就可能出現(xiàn)問題。問題在于外設(shè)數(shù)據(jù)的改變不僅僅依靠CPU寫操作,CPU第一次讀取外設(shè)數(shù)據(jù)時將外設(shè)的數(shù)據(jù)和地址信息保存到Cache,第二次讀取外設(shè)數(shù)據(jù)時就可能有問題出現(xiàn)。這是因為數(shù)據(jù)直接從Cache提取,而外設(shè)的數(shù)據(jù)可能有改變。
因此,在訪問易變外設(shè)時要禁止使能Cache,直接讀取外設(shè)數(shù)據(jù)到CPU,而不經(jīng)過Cache的任何環(huán)節(jié),即保證不改變Cache映射表和Cache數(shù)據(jù)區(qū)內(nèi)容。
S3C4510B的SYSCFG SFR(特殊功能寄存器)有用來控制Cache使能或不使能的,通過對該SFR的設(shè)置可暫時禁止Cache或重新恢復(fù)Cache功能。這樣就可以在讀取外設(shè)前禁止Cache,讀取結(jié)束后重新使能Cache,保證了外設(shè)數(shù)據(jù)讀取的正確性。寫數(shù)據(jù)到外設(shè)時采用“直寫”方式,更沒有問題。
2.2 開關(guān)Cache引發(fā)的新問題
在Cache開關(guān)期間,如果有另一個進(jìn)程/任務(wù)訪問內(nèi)存,在此期間寫內(nèi)存并且該內(nèi)存在Cache中已有映射(注意,它也是被禁止Cache的,所以它不會同時更新Cache數(shù)據(jù)區(qū)的內(nèi)容),那么在Cache重新使能之后Cache數(shù)據(jù)區(qū)的信息已經(jīng)過時了,而Cache映射表還是Cache禁止之前的狀態(tài),如果CPU此時讀數(shù)據(jù)就會得到過時的數(shù)據(jù)。這樣看來,引發(fā)的問題范圍更廣了,連內(nèi)存的數(shù)據(jù)讀寫正確性都無法保證。與內(nèi)存泄漏的影響來比較,內(nèi)存泄漏如果是一顆定時炸彈,那么Cache問題就可以說是隨時隨地都可能踩上的雷區(qū),因為程序一旦開始就可能引發(fā)爆炸。
如圖2所示,Cache使能時Cache映射表和Cache數(shù)據(jù)區(qū)保存了內(nèi)存的數(shù)據(jù)信息,這是CPU訪問內(nèi)存時通過圖中實線箭頭通路實現(xiàn)的。內(nèi)存的信息可以與Cache的信息保持一致。

Cache禁止時的情況有所變化。由圖2中虛線箭頭通路直接進(jìn)行內(nèi)存訪問,且地址0x00處的數(shù)據(jù)由55變?yōu)锳A,但Cache區(qū)的信息仍為之前的狀態(tài)。很明顯,Cache的數(shù)據(jù)是應(yīng)該廢棄的,但是Cache映射表仍保存0x00的地址信息。Cache重新使能后,CPU再次讀取0x00地址的數(shù)據(jù),由于Cache仍是命中,直接從Cache數(shù)據(jù)區(qū)中提取數(shù)據(jù),這樣讀出來的數(shù)據(jù)就是0x55了。
由S3C4510B數(shù)據(jù)手冊第4節(jié)的第21頁可知:通過對SYSCFG寄存器的CE位置1或清0可使能/關(guān)閉Cache,但是Cache沒有內(nèi)容自動刷新功能,在重新使能Cache時需考慮Cache數(shù)據(jù)的正確性。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 嵌入式C++編程
- 《C嵌入式編程設(shè)計模式》讀書筆記
- C嵌入式編程設(shè)計模式
- 視頻教程-嵌入式Linux文件與串口編程-嵌入式
- 視頻教程-嵌入式Linux多任務(wù)編程-嵌入式
- 嵌入式linux串口編程
- 嵌入式linux報警,嵌入式Linux下LED報警燈驅(qū)動設(shè)計及編程.doc
- Linux內(nèi)核文件Cache機(jī)制
- 基于DM6646開發(fā)板的多線程編程在嵌入式圖像處理中的應(yīng)用
- 嵌入式教程之《嵌入式實時內(nèi)核設(shè)計》電子教材免費(fèi)下載 27次下載
- C嵌入式系統(tǒng)編程 14次下載
- 嵌入式C編程 0次下載
- 嵌入式c語言編程(由淺入深) 0次下載
- 嵌入式CPU指令Cache的設(shè)計與實現(xiàn)
- 嵌入式系統(tǒng)上消息機(jī)制的實現(xiàn)
- 嵌入式系統(tǒng)中的實時操作系統(tǒng) 1.3k次閱讀
- 嵌入式可編程片上系統(tǒng)是什么 1.2k次閱讀
- fpga是嵌入式嗎 4.8k次閱讀
- 怎么從PC編程轉(zhuǎn)向嵌入式編程 1.4k次閱讀
- 嵌入式Interet安全通信機(jī)制EISCM的應(yīng)用探討 2.4k次閱讀
- 如何實現(xiàn)嵌入式系統(tǒng)遠(yuǎn)程調(diào)試 6.7k次閱讀
- 基于嵌入式軟件的JNI技術(shù)應(yīng)用解析 1.4k次閱讀
- 嵌入式處理器中cache數(shù)據(jù)不一致性的解決方法 3.9k次閱讀
- 嵌入式系統(tǒng)C語言編程實戰(zhàn)教程合集 1w次閱讀
- 嵌入式軟件開發(fā)編程規(guī)范介紹 5k次閱讀
- 嵌入式系統(tǒng)內(nèi)存管理機(jī)制詳解 4.9k次閱讀
- 嵌入式軟件開發(fā)編程規(guī)范及原則 7.4k次閱讀
- 嵌入式軟件可靠性設(shè)計需注意以下四個方面的問題! 2.8k次閱讀
- 干貨!使用嵌入式處理器對可編程邏輯器件重編程 2.1k次閱讀
- 深入了解嵌入式編程 4.2k次閱讀
下載排行
本周
- 1冷柜-電氣控制系統(tǒng)講解
- 13.68 MB | 4次下載 | 10 積分
- 2安川A1000變頻器中文版說明書
- 20.16 MB | 3次下載 | 3 積分
- 3直流電路的組成和基本定律
- 1.67 MB | 2次下載 | 免費(fèi)
- 4丹佛斯2800系列變頻器說明書
- 8.00 MB | 1次下載 | 5 積分
- 5PC8011同步開關(guān)型降壓3.5A單節(jié)鋰電池充電管理電路技術(shù)手冊
- 0.74 MB | 1次下載 | 免費(fèi)
- 6ES7243E+ES8311音頻錄制與播放電路資料
- 0.06 MB | 1次下載 | 5 積分
- 7SDM02 激光測距模塊產(chǎn)品手冊
- 0.43 MB | 1次下載 | 免費(fèi)
- 8SDFM 激光測距模塊模組手冊
- 0.54 MB | 1次下載 | 免費(fèi)
本月
- 1CH341編程器軟件NeoProgrammer_2.2.0.10
- 20.47 MB | 170次下載 | 1 積分
- 22025智能家居傳感器市場分析及創(chuàng)新應(yīng)用
- 3.11 MB | 43次下載 | 免費(fèi)
- 3RV1126B系列開發(fā)板產(chǎn)品資料
- 4.19 MB | 18次下載 | 免費(fèi)
- 4CH341編程軟件下載
- 2.50 MB | 16次下載 | 5 積分
- 5全志系列-米爾基于T153核心板開發(fā)板 四核異構(gòu)、3路千兆網(wǎng),賦能多元化工業(yè)場景
- 3.05 MB | 12次下載 | 免費(fèi)
- 6【開源】60余套STM32單片機(jī)、嵌入式Linux、物聯(lián)網(wǎng)、人工智能項目案例及入門學(xué)習(xí)資源包
- 10.55 MB | 8次下載 | 免費(fèi)
- 7冷柜-電氣控制系統(tǒng)講解
- 13.68 MB | 4次下載 | 10 積分
- 8特斯拉MODEL S車載充電機(jī)主電路回路原理圖
- 0.81 MB | 4次下載 | 3 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935137次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關(guān)降壓/升壓雙向直流/直流轉(zhuǎn)換器 PCB layout 設(shè)計
- 1.48MB | 420064次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233094次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191448次下載 | 10 積分
- 5十天學(xué)會AVR單片機(jī)與C語言視頻教程 下載
- 158M | 183356次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81604次下載 | 10 積分
- 7Keil工具M(jìn)DK-Arm免費(fèi)下載
- 0.02 MB | 73824次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65991次下載 | 10 積分
電子發(fā)燒友App





創(chuàng)作
發(fā)文章
發(fā)帖
提問
發(fā)資料
發(fā)視頻
上傳資料賺積分
評論