音影先锋亚洲天堂网|电影世界尽头的爱完整版播放|国产 熟女 91|高清无码免费观看欧美日韩|韩国一区二区三区黄色录像|美女亚洲加勒比在线|亚洲综合网 开心五月|7x成人在线入口|成人网站免费日韩毛片区|国产黄片?一级?二级?三级

嵌入式編程需注意的Cache機制及其原理

出處:ljxlike 發(fā)布于:2010-06-07 10:06:23

  1 Cache的原理

  Cache即高速緩存,它的出現(xiàn)基于兩種因素:一、CPU的速度和性能提高很快,而主存速度較低且價格高;二、程序執(zhí)行的局部性特點。將速度較快而容量有限的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)就是一個緩存的例子,其作用與計算機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的時間遠小于直接讀內(nèi)存,可提高CPU讀取數(shù)據(jù)的效率。

  Cache數(shù)據(jù)區(qū)有成塊讀取的特性(Cache映射表保存的地址是塊地址,節(jié)省空間,也符合程序執(zhí)行的局部性特點)。Cache數(shù)據(jù)區(qū)遠遠小于內(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)期間,如果有另一個進程/任務(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中虛線箭頭通路直接進行內(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ù)的正確性。

  為了證實以上說法,循環(huán)執(zhí)行如下測試程序:

  如果沒有Cache的影響,結(jié)果應(yīng)該是55 aa aa??梢姡珻ache關(guān)閉再打開的確可造成Cache數(shù)據(jù)過時。

  3 其他CPU解決方案

  Atmel公司的AT91RM9200和Samsung公司的S3C44B0,用這兩種CPU先后移植過操作系統(tǒng),且在對外設(shè)訪問的整個過程中Cache都是使能的。它們的解決方案是什么呢?

  AT91RM9200是ARM9系列帶有MMU的CPU。MMU對內(nèi)存有分頁管理功能,可以實現(xiàn)多個進程的內(nèi)存空間保護。Cache是通過MMU管理的,這也是Cache和MMU經(jīng)常同時存在的原因。

  S3C44B0和S3C4510B同樣都是Samsung公司產(chǎn)品,并且都不帶MMU。與S3CA510不同的是,S3C4480自帶的SFR可以配置非緩存范圍,即使Cache使能,所設(shè)置范圍的地址空間訪問也不通過Cache實現(xiàn)。這樣,可以很方便地實現(xiàn)內(nèi)存是緩存區(qū),其他外設(shè)是非緩存區(qū)。

  這兩種方案對于S3C4510B都無法實現(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)該的,可避免編譯器的優(yōu)化,比如以下語句:

  在兩次讀取portAdd地址的數(shù)據(jù)相同時等待,可以用到等待信號跳變的程序。如果將volatile關(guān)鍵字去除,有可能經(jīng)編譯器優(yōu)化,Value2不會從實際的portAdd地址讀取數(shù)據(jù),而是利用Valuel讀取語句的中間寄存器直接獲得。

  4 本文解決方案

  由S3C4510B手冊上第5節(jié)的第4頁可知,可以通過兩種方式保證Cache數(shù)據(jù)的正確:

  ①對Cache映射表的Tag RAM數(shù)據(jù)清零。Cache映射表數(shù)據(jù)一般是通過上電復(fù)位清零的,如果Cache或內(nèi)存段的設(shè)置被修改,則會造成Cache映射表數(shù)據(jù)廢棄,這時就需要通過程序?qū)ache映射表數(shù)據(jù)清0。

 ?、赟3C4510B提供非Cache方式訪問控制位,控制位ADDR[26](地址線26位)為“1”時,按非Cache方式訪問。因此,Cache使能的情況下,地址0x000 0000~0x3FFFFFF按Cache方式訪問,而0x400 0000~0x7FF FFFF按非Cache方式訪問。實際上,0x000 0000+offset與0x400 0000+offset(offset在0x000 0000~0X3FF FFFF之間)是同一地址,不同的是Cache是否起作用。

  可以得到兩種解決方案:

  (1)Cache映射表手動更新  既然在開關(guān)Cache之后內(nèi)容過時,并且CPU不會自動刷新,可以通過手動更新的辦法來拋棄廢舊信息。也就是說,將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位(bit0~bit25),實際上CPU可訪問空間為32位(bit0~bit31)。一般我們都不使用bit26~bit31,不過S3C4510B的這些位有著特殊的控制功能。通過bit26的高電平可以禁止該地址的Cache功能,因此將外設(shè)的地址由原來的ADDR_PORT改為(ADDR PORT∣(1<<26)),就可以實現(xiàn)外設(shè)訪問時Cache不使能。這樣就不用改為SYSCFG的Cache使能控制位。比較來看,SYSCFG的Cache使能位是控制整個CPU訪問的Cache使能與否,而bit26只控制當(dāng)前訪問的一個具體地址的Cache使能與否。采用這種解決方案理論上有依據(jù),并且可以發(fā)揮CPU的功能。

  5 修改程序后的試驗結(jié)果

  修改Cache解決方案后,可以解決內(nèi)存訪問錯誤的問題。經(jīng)過測試,采用“bit26位控制Cache使能”的方案可以順利訪問外設(shè),代碼執(zhí)行始終是在Cache使能的情況下,并且不影響內(nèi)存數(shù)據(jù)。若完全關(guān)閉Cache的程序,執(zhí)行同樣代碼需要花費5~8倍的時間。


  
關(guān)鍵詞:嵌入式編程需注意的Cache機制及其原理AT91RM9200S3C4510BS3C44B0嵌入式編程

版權(quán)與免責(zé)聲明

凡本網(wǎng)注明“出處:維庫電子市場網(wǎng)”的所有作品,版權(quán)均屬于維庫電子市場網(wǎng),轉(zhuǎn)載請必須注明維庫電子市場網(wǎng),http://m.58mhw.cn,違反者本網(wǎng)將追究相關(guān)法律責(zé)任。

本網(wǎng)轉(zhuǎn)載并注明自其它出處的作品,目的在于傳遞更多信息,并不代表本網(wǎng)贊同其觀點或證實其內(nèi)容的真實性,不承擔(dān)此類作品侵權(quán)行為的直接責(zé)任及連帶責(zé)任。其他媒體、網(wǎng)站或個人從本網(wǎng)轉(zhuǎn)載時,必須保留本網(wǎng)注明的作品出處,并自負版權(quán)等法律責(zé)任。

如涉及作品內(nèi)容、版權(quán)等問題,請在作品發(fā)表之日起一周內(nèi)與本網(wǎng)聯(lián)系,否則視為放棄相關(guān)權(quán)利。

廣告
OEM清單文件: OEM清單文件
*公司名:
*聯(lián)系人:
*手機號碼:
QQ:
有效期:

掃碼下載APP,
一鍵連接廣大的電子世界。

在線人工客服

買家服務(wù):
賣家服務(wù):
技術(shù)客服:

0571-85317607

網(wǎng)站技術(shù)支持

13606545031

客服在線時間周一至周五
9:00-17:30

關(guān)注官方微信號,
第一時間獲取資訊。

建議反饋

聯(lián)系人:

聯(lián)系方式:

按住滑塊,拖拽到最右邊
>>
感謝您向阿庫提出的寶貴意見,您的參與是維庫提升服務(wù)的動力!意見一經(jīng)采納,將有感恩紅包奉上哦!