嵌入式編程需注意的Cache機(jī)制及其原理._第1頁
嵌入式編程需注意的Cache機(jī)制及其原理._第2頁
嵌入式編程需注意的Cache機(jī)制及其原理._第3頁
嵌入式編程需注意的Cache機(jī)制及其原理._第4頁
嵌入式編程需注意的Cache機(jī)制及其原理._第5頁
已閱讀5頁,還剩2頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)

文檔簡介

1、嵌入式編程需注意的Cache機(jī)制及其原嵌入式編程需注意的Cache機(jī)制及其原理ICache的原理Cache即高速緩存,它 的出現(xiàn)基于兩種因素:一、CPU勺速度和性能提高很快,而主存速度較低且價 格高;二、程序執(zhí)行的局部性特點。將速度較快而容量有限的SRAM勾成Cache,可以盡可能發(fā)揮CPU的高速度。CPU與外設(shè)交換數(shù)據(jù)時經(jīng)常用到 buffer(緩沖),這與緩存極其相似,只不過 Cache是為了提高CPU和內(nèi)存之間 的數(shù)據(jù)交換速度而設(shè)計,而buffer是為了提高內(nèi)存和硬盤(或其他I /0設(shè)備) 之間的數(shù)據(jù)交 嵌入式編程需注意的Cache機(jī)制及其原理1 Cache的原理Cache即高速緩存,它的

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

3、同時更新Cache映射 表(保存地址信息,表示該地址的數(shù)據(jù)是否已在 Cache數(shù)據(jù)區(qū),即是否命中)。 這樣,CPL再次讀取該地址數(shù)據(jù)時,就可以直接從 Cache提取。讀Cache的時 間遠(yuǎn)小于直接讀內(nèi)存,可提高 CPU賣取數(shù)據(jù)的效率。Cache數(shù)據(jù)區(qū)有成塊讀取的特性(Cache映射表保存的地址是塊地址,節(jié)省空 間,也符合程序執(zhí)行的局部性特點)。Cache數(shù)據(jù)區(qū)遠(yuǎn)遠(yuǎn)小于內(nèi)存空間,就需要 相應(yīng)的替代算法。比如最近最少使用算法,可將新數(shù)據(jù)替代使用頻率低的數(shù) 據(jù),同時更新映射表信息??梢酝葡耄珻ache空間越大,命中率越高。寫內(nèi)存需要直接更新內(nèi)存。如果映射表存在該地址信息,還需要同時更新Cache數(shù)據(jù)

4、區(qū)。這種Cache訪問方式就稱作“直寫”,Samsung公司的ARM微 處理器S3CA510蹴是這種方式。以下所討論的 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ù)可能有改變。因此,在訪問

5、易變外設(shè)時要禁止使能 Cache,直接讀取外設(shè)數(shù)據(jù)到CPU而不經(jīng) 過Cache的任何環(huán)節(jié),即保證不改變 Cache映射表和Cache數(shù)據(jù)區(qū)內(nèi)容。S3C4510B勺SYSCFSFFR特殊功能寄存器)有用來控制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中已有映射(注意,它也是被

6、禁止Cache的,所以它不會同時更 新Cache數(shù)據(jù)區(qū)的內(nèi)容),那么在Cache重新使能之后Cache數(shù)據(jù)區(qū)的信息已經(jīng) 過時了,而Cache映射表還是Cache禁止之前的狀態(tài),如果CPL此時讀數(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的信息保持

7、一致。I - -JIaCache禁止時的情況有所變化。由圖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頁可知:通過對SYSCF寄存器的CE位置 1或清0可使能/關(guān)閉Cache,但是Cache沒有內(nèi)容自動刷新功能,在重新使能 Cache時需考慮Cache數(shù)據(jù)的

8、正確性。為了證實以上說法,循環(huán)執(zhí)行如下測試程序:如果沒有Cache的影響,結(jié)果應(yīng)該是55 aa aa??梢?,Cache關(guān)閉再打開的確 可造成Cache數(shù)據(jù)過時。3其他CPU解決方案Atmel公司的AT91RM9200口 Samsung公司的S3C44B0用這兩種CPU先后移植 過操作系統(tǒng),且在對外設(shè)訪問的整個過程中 Cache都是使能的。它們的解決方 案是什么呢?AT91RM920是ARM系列帶有MM啲CPU MM對內(nèi)存有分頁管理功能,可以實 現(xiàn)多個進(jìn)程的內(nèi)存空間保護(hù)。 Cache是通過MM管理的,這也是Cache和MMU 經(jīng)常同時存在的原因。S3C44B(和S3C4510BW樣都是Samsu

9、ng公司產(chǎn)品,并且都不帶 MMU與 S3CA510不同的是,S3C4480自帶的SFR可以配置非緩存范圍,即使 Cache使 能,所設(shè)置范圍的地址空間訪問也不通過 Cache實現(xiàn)。這樣,可以很方便地實 現(xiàn)內(nèi)存是緩存區(qū),其他外設(shè)是非緩存區(qū)。這兩種方案對于S3C4510睹E無法實現(xiàn)。網(wǎng)絡(luò)上有人用volatile關(guān)鍵字解決外 設(shè)訪問問題。volatile 關(guān)鍵字是在源代碼中給編譯器看的,它可能影響編譯器 的編譯結(jié)果,但是最終CPU執(zhí)行都體現(xiàn)到匯編語句,如果匯編語句都不能解決 Cache問題,volatile 語句也是不可能解決的。對于易變數(shù)據(jù)的外設(shè)使用volatile 關(guān)鍵字是應(yīng)該的,可避免編譯器的

10、優(yōu)化,比 如以下語句:I1 Ui-二-Mla在兩次讀取portAdd地址的數(shù)據(jù)相同時等待,可以用到等待信號跳變的程序。 如果將volatile 關(guān)鍵字去除,有可能經(jīng)編譯器優(yōu)化,Value2不會從實際的 portAdd地址讀取數(shù)據(jù),而是利用 Valuel讀取語句的中間寄存器直接獲得。4本文解決方案由S3C4510盯冊上第5節(jié)的第4頁可知,可以通過兩種方式保證 Cache數(shù)據(jù)的 正確: 對Cache映射表的Tag RAM數(shù)據(jù)清零。Cache映射表數(shù)據(jù)一般是通過上電復(fù) 位清零的,如果Cache或內(nèi)存段的設(shè)置被修改,則會造成 Cache映射表數(shù)據(jù)廢 棄,這時就需要通過程序?qū)?Cache映射表數(shù)據(jù)清0。

11、S3C4510BS供非Cache方式訪問控制位,控制位 ADDR26(地址線26位)為“ 1”時,按非Cache方式訪問。因此,Cache使能的情況下,地址0x000 00000X3FFFFFF按 Cache方式訪問,而 0x400 0000 0x7FF FFFF按非 Cache 方式訪問。實際上,0x000 0000+offset 與 0x400 0000+offset(offset 在 0x000 00000X3FF FFFF之間)是同一地址,不同的是 Cache是否起作用??梢缘玫絻煞N解決方案:(1)Cache映射表手動更新既然在開關(guān)Cache之后內(nèi)容過時,并且 CPU不會自動刷新,可以

12、通過手動更新的辦法來拋棄廢舊信息。也就是說,將Tag RAM區(qū)(前面所說的Cache映射表)清除,這樣所有Cache數(shù)據(jù)區(qū)的內(nèi)容都不使能, 再次讀取數(shù)據(jù)時同時更新 Cache映射表和Cache數(shù)據(jù)區(qū)內(nèi)容,之后才能使用。 清除操作將Tag RAM的 1 KB內(nèi)容清零,需要消耗一定時間;并且這樣操作后 Cache是0命中率的,只有一定訪問次數(shù)后 Cache信息重新填滿,才能恢復(fù)正 常的命中率。因此,頻繁地開關(guān) Cache時采用這種方案是不可取的。(2)bit26 位控制Cache使能S3C4510B勺地址線為26位(bitObit25),實際上CPU可訪問空間為32位 (bitObit31)。一般我們都不使用 bit26bit31,不過S3C4510B勺這些位有 著特殊的控制功能。通過bit26的高電平可以禁止該地址的 Cache功能,因此 將外設(shè)的地址由原來的 ADDR_PORT為(ADDR PORT(1 &lt ;<26),就可以實現(xiàn) 外設(shè)訪問時Cache不使能。這樣就不用改為 SYSCF(的 Cache使能控制位。比較 來看,SYSCF(的 Cache使能位是控制整個CPU訪問的Cache使能與否,而 bit26

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論