資料介紹
1 Cache的原理
Cache即高速緩存,它的出現基于兩種因素:一、CPU的速度和性能提高很快,而主存速度較低且價格高;二、程序執行的局部性特點。將速度較快而容量有限的SRAM構成Cache,可以盡可能發揮CPU的高速度。CPU與外設交換數據時經常用到buffer(緩沖),這與緩存極其相似,只不過Cache是為了提高CPU和內存之間的數據交換速度而設計,而buffer是為了提高內存和硬盤(或其他I/O設備)之間的數據交換速度而設計的。
Baidu快照(cache.baidu.com)就是一個緩存的例子,其作用與計算機CPU緩存有類似之處。 Cache的原理如圖1所示。
在讀取內存數據的同時CPU將數據保存到Cache數據區,同時更新Cache映射表(保存地址信息,表示該地址的數據是否已在Cache數據區,即是否命中)。這樣,CPU再次讀取該地址數據時,就可以直接從Cache提取。讀Cache的時間遠小于直接讀內存,可提高CPU讀取數據的效率。
Cache數據區有成塊讀取的特性(Cache映射表保存的地址是塊地址,節省空間,也符合程序執行的局部性特點)。Cache數據區遠遠小于內存空間,就需要相應的替代算法。比如最近最少使用算法,可將新數據替代使用頻率低的數據,同時更新映射表信息。可以推想,Cache空間越大,命中率越高。
寫內存需要直接更新內存。如果映射表存在該地址信息,還需要同時更新Cache數據區。這種Cache訪問方式就稱作“直寫”,Samsung公司的ARM7微處理器S3CA510B就是這種方式。以下所討論的Cache問題除非特殊說明,否則都是“直寫”方式。
2 嵌入式編程時需注意的問題
2.1 訪問外設使用Cache的問題
在訪問內存時使用Cache是不會出現問題的,但如果訪問數據易變外設(數據不依賴于CPU寫操作而改變)時使用Cache就可能出現問題。問題在于外設數據的改變不僅僅依靠CPU寫操作,CPU第一次讀取外設數據時將外設的數據和地址信息保存到Cache,第二次讀取外設數據時就可能有問題出現。這是因為數據直接從Cache提取,而外設的數據可能有改變。
因此,在訪問易變外設時要禁止使能Cache,直接讀取外設數據到CPU,而不經過Cache的任何環節,即保證不改變Cache映射表和Cache數據區內容。
S3C4510B的SYSCFG SFR(特殊功能寄存器)有用來控制Cache使能或不使能的,通過對該SFR的設置可暫時禁止Cache或重新恢復Cache功能。這樣就可以在讀取外設前禁止Cache,讀取結束后重新使能Cache,保證了外設數據讀取的正確性。寫數據到外設時采用“直寫”方式,更沒有問題。
2.2 開關Cache引發的新問題
在Cache開關期間,如果有另一個進程/任務訪問內存,在此期間寫內存并且該內存在Cache中已有映射(注意,它也是被禁止Cache的,所以它不會同時更新Cache數據區的內容),那么在Cache重新使能之后Cache數據區的信息已經過時了,而Cache映射表還是Cache禁止之前的狀態,如果CPU此時讀數據就會得到過時的數據。這樣看來,引發的問題范圍更廣了,連內存的數據讀寫正確性都無法保證。與內存泄漏的影響來比較,內存泄漏如果是一顆定時炸彈,那么Cache問題就可以說是隨時隨地都可能踩上的雷區,因為程序一旦開始就可能引發爆炸。
如圖2所示,Cache使能時Cache映射表和Cache數據區保存了內存的數據信息,這是CPU訪問內存時通過圖中實線箭頭通路實現的。內存的信息可以與Cache的信息保持一致。
Cache禁止時的情況有所變化。由圖2中虛線箭頭通路直接進行內存訪問,且地址0x00處的數據由55變為AA,但Cache區的信息仍為之前的狀態。很明顯,Cache的數據是應該廢棄的,但是Cache映射表仍保存0x00的地址信息。Cache重新使能后,CPU再次讀取0x00地址的數據,由于Cache仍是命中,直接從Cache數據區中提取數據,這樣讀出來的數據就是0x55了。
由S3C4510B數據手冊第4節的第21頁可知:通過對SYSCFG寄存器的CE位置1或清0可使能/關閉Cache,但是Cache沒有內容自動刷新功能,在重新使能Cache時需考慮Cache數據的正確性。
Cache即高速緩存,它的出現基于兩種因素:一、CPU的速度和性能提高很快,而主存速度較低且價格高;二、程序執行的局部性特點。將速度較快而容量有限的SRAM構成Cache,可以盡可能發揮CPU的高速度。CPU與外設交換數據時經常用到buffer(緩沖),這與緩存極其相似,只不過Cache是為了提高CPU和內存之間的數據交換速度而設計,而buffer是為了提高內存和硬盤(或其他I/O設備)之間的數據交換速度而設計的。
Baidu快照(cache.baidu.com)就是一個緩存的例子,其作用與計算機CPU緩存有類似之處。 Cache的原理如圖1所示。
在讀取內存數據的同時CPU將數據保存到Cache數據區,同時更新Cache映射表(保存地址信息,表示該地址的數據是否已在Cache數據區,即是否命中)。這樣,CPU再次讀取該地址數據時,就可以直接從Cache提取。讀Cache的時間遠小于直接讀內存,可提高CPU讀取數據的效率。
Cache數據區有成塊讀取的特性(Cache映射表保存的地址是塊地址,節省空間,也符合程序執行的局部性特點)。Cache數據區遠遠小于內存空間,就需要相應的替代算法。比如最近最少使用算法,可將新數據替代使用頻率低的數據,同時更新映射表信息。可以推想,Cache空間越大,命中率越高。
寫內存需要直接更新內存。如果映射表存在該地址信息,還需要同時更新Cache數據區。這種Cache訪問方式就稱作“直寫”,Samsung公司的ARM7微處理器S3CA510B就是這種方式。以下所討論的Cache問題除非特殊說明,否則都是“直寫”方式。
2 嵌入式編程時需注意的問題
2.1 訪問外設使用Cache的問題
在訪問內存時使用Cache是不會出現問題的,但如果訪問數據易變外設(數據不依賴于CPU寫操作而改變)時使用Cache就可能出現問題。問題在于外設數據的改變不僅僅依靠CPU寫操作,CPU第一次讀取外設數據時將外設的數據和地址信息保存到Cache,第二次讀取外設數據時就可能有問題出現。這是因為數據直接從Cache提取,而外設的數據可能有改變。
因此,在訪問易變外設時要禁止使能Cache,直接讀取外設數據到CPU,而不經過Cache的任何環節,即保證不改變Cache映射表和Cache數據區內容。
S3C4510B的SYSCFG SFR(特殊功能寄存器)有用來控制Cache使能或不使能的,通過對該SFR的設置可暫時禁止Cache或重新恢復Cache功能。這樣就可以在讀取外設前禁止Cache,讀取結束后重新使能Cache,保證了外設數據讀取的正確性。寫數據到外設時采用“直寫”方式,更沒有問題。
2.2 開關Cache引發的新問題
在Cache開關期間,如果有另一個進程/任務訪問內存,在此期間寫內存并且該內存在Cache中已有映射(注意,它也是被禁止Cache的,所以它不會同時更新Cache數據區的內容),那么在Cache重新使能之后Cache數據區的信息已經過時了,而Cache映射表還是Cache禁止之前的狀態,如果CPU此時讀數據就會得到過時的數據。這樣看來,引發的問題范圍更廣了,連內存的數據讀寫正確性都無法保證。與內存泄漏的影響來比較,內存泄漏如果是一顆定時炸彈,那么Cache問題就可以說是隨時隨地都可能踩上的雷區,因為程序一旦開始就可能引發爆炸。
如圖2所示,Cache使能時Cache映射表和Cache數據區保存了內存的數據信息,這是CPU訪問內存時通過圖中實線箭頭通路實現的。內存的信息可以與Cache的信息保持一致。
Cache禁止時的情況有所變化。由圖2中虛線箭頭通路直接進行內存訪問,且地址0x00處的數據由55變為AA,但Cache區的信息仍為之前的狀態。很明顯,Cache的數據是應該廢棄的,但是Cache映射表仍保存0x00的地址信息。Cache重新使能后,CPU再次讀取0x00地址的數據,由于Cache仍是命中,直接從Cache數據區中提取數據,這樣讀出來的數據就是0x55了。
由S3C4510B數據手冊第4節的第21頁可知:通過對SYSCFG寄存器的CE位置1或清0可使能/關閉Cache,但是Cache沒有內容自動刷新功能,在重新使能Cache時需考慮Cache數據的正確性。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 嵌入式系統系列叢書-時間觸發嵌入式系統設計模式 0次下載
- 嵌入式C++編程
- 《C嵌入式編程設計模式》讀書筆記
- C嵌入式編程設計模式
- 視頻教程-嵌入式Linux文件與串口編程-嵌入式
- 視頻教程-嵌入式Linux多任務編程-嵌入式
- 嵌入式linux串口編程
- 嵌入式linux報警,嵌入式Linux下LED報警燈驅動設計及編程.doc
- Linux內核文件Cache機制
- 嵌入式教程之《嵌入式實時內核設計》電子教材免費下載 27次下載
- C嵌入式系統編程 14次下載
- 嵌入式C編程 0次下載
- 嵌入式c語言編程(由淺入深) 0次下載
- 嵌入式CPU指令Cache的設計與實現
- 嵌入式系統上消息機制的實現
- 嵌入式可編程片上系統是什么 598次閱讀
- fpga是嵌入式嗎 2420次閱讀
- 怎么從PC編程轉向嵌入式編程 851次閱讀
- 嵌入式Interet安全通信機制EISCM的應用探討 1867次閱讀
- 如何實現嵌入式系統遠程調試 5401次閱讀
- 基于嵌入式軟件的JNI技術應用解析 1106次閱讀
- 嵌入式處理器中cache數據不一致性的解決方法 3485次閱讀
- 嵌入式系統C語言編程實戰教程合集 9481次閱讀
- 嵌入式軟件開發編程規范介紹 4403次閱讀
- 嵌入式系統內存管理機制詳解 4552次閱讀
- 嵌入式軟件開發編程規范及原則 6761次閱讀
- 嵌入式軟件可靠性設計需注意以下四個方面的問題! 2526次閱讀
- 干貨!使用嵌入式處理器對可編程邏輯器件重編程 1682次閱讀
- 深入了解嵌入式編程 3685次閱讀
- 嵌入式系統開發的流程和提升可靠性的七大技巧 1041次閱讀
下載排行
本周
- 1AN158 GD32VW553 Wi-Fi開發指南
- 1.51MB | 2次下載 | 免費
- 2嵌入式軟件開發符合ISO 26262 功能安全標準
- 1.61 MB | 1次下載 | 免費
- 3AN148 GD32VW553射頻硬件開發指南
- 2.07MB | 1次下載 | 免費
- 4PZT驅動開關電路
- 0.09 MB | 1次下載 | 免費
- 5模擬電路仿真實現
- 2.94MB | 1次下載 | 免費
- 6PCB繪制基礎知識
- 2.44MB | 1次下載 | 免費
- 7EE-38:ADSP-2181 IDMA端口-周期竊取時序
- 75.0KB | 次下載 | 免費
- 8EE-82:使用ADSP-2181 DSP的IO空間對另一個ADSP-2181進行IDMA引導
- 86.86KB | 次下載 | 免費
本月
- 1ADI高性能電源管理解決方案
- 2.43 MB | 452次下載 | 免費
- 2免費開源CC3D飛控資料(電路圖&PCB源文件、BOM、
- 5.67 MB | 139次下載 | 1 積分
- 3基于STM32單片機智能手環心率計步器體溫顯示設計
- 0.10 MB | 132次下載 | 免費
- 4美的電磁爐維修手冊大全
- 1.56 MB | 24次下載 | 5 積分
- 5如何正確測試電源的紋波
- 0.36 MB | 19次下載 | 免費
- 6感應筆電路圖
- 0.06 MB | 10次下載 | 免費
- 7LZC3106G高性能諧振控制器中文手冊
- 1.29 MB | 9次下載 | 1 積分
- 8萬用表UT58A原理圖
- 0.09 MB | 9次下載 | 5 積分
總榜
- 1matlab軟件下載入口
- 未知 | 935121次下載 | 10 積分
- 2開源硬件-PMP21529.1-4 開關降壓/升壓雙向直流/直流轉換器 PCB layout 設計
- 1.48MB | 420062次下載 | 10 積分
- 3Altium DXP2002下載入口
- 未知 | 233088次下載 | 10 積分
- 4電路仿真軟件multisim 10.0免費下載
- 340992 | 191367次下載 | 10 積分
- 5十天學會AVR單片機與C語言視頻教程 下載
- 158M | 183335次下載 | 10 積分
- 6labview8.5下載
- 未知 | 81581次下載 | 10 積分
- 7Keil工具MDK-Arm免費下載
- 0.02 MB | 73810次下載 | 10 積分
- 8LabVIEW 8.6下載
- 未知 | 65988次下載 | 10 積分
評論
查看更多