《電子技術應用》
您所在的位置:首頁 > 嵌入式技術 > 業界動態 > 嵌入式系統中的CACHE問題

嵌入式系統中的CACHE問題

2008-08-18
作者:陳 曦, 李漢寧

  摘? 要: 描述了在實時嵌入式系統" title="嵌入式系統">嵌入式系統開發中遇到的與CACHE有關的問題。對引起這些問題的原因——CACHE和RAM的不一致性進行了討論。最后,提出了解決問題的方法。

  關鍵詞: 嵌入式實時系統? CACHE? 不一致性

?

  隨著社會的發展、人們生活水平的提高,人們對嵌入式計算機應用的要求也越來越高。因此,對嵌入式系統的性能要求也越來越高。明顯體現在嵌入式系統的CPU速度的不斷提高上。但問題也隨之而來,嵌入式CPU的主頻不斷地提高,一方面加強了CPU的處理能力" title="處理能力">處理能力,另一方面,在速度上造成了與慢速的系統存儲器極不相配的情況,從而影響了整個系統的性能。

為了解決這個問題,引入了CACHE技術。CACHE是一種高速緩沖存儲器,是為了解決CPU和主存之間速度不匹配而采用的一項重要技術。通過在主存和高速CPU之間設置一個小容量的高速存儲器,在其中存放CPU常用的指令和數據,CPU對存儲器的訪問主要體現在對SRAM的存取,CPU可以不必加等待狀態而保持高速操作。

  采用CACHE技術,解決了CPU與主存之間速度不匹配的問題;但它又帶來了一些其它問題,如本文將提到的一致性問題。

1 問題的發現與原因

  在進行某嵌入式系統項目的開發過程中,有一個環節需要使用DMA方式進行數據傳輸。當程序運行后,發現傳到目的地的數據塊中經常會有一些錯誤的字節。如:數據本應為00 01 02 03 04 05 06 07 08 09 0A 0B ...(16進制),結果卻是00 01 02 03 00 00 00 00 08 09 0A 0B ...。在某些環節也出現了類似的問題。例如,通過HDLC通道向外發送數據,發送的總是緩沖區初始化時的內容,實際要發送的數據總是發不出去,但使用調試工具看內存中的數據,卻是正確的。

  經過一段時間的調試,發現出現這種現象的環節都使用了DMA傳輸數據。在通過HDLC通道發送數據的例子中,HDLC通道內部也是用DMA方式從內存直接讀數據并向外發送。經過分析,認為問題的原因是出在CACHE上,是由于CACHE數據與內存數據的不一致性造成的。

  所謂CACHE數據與內存數據的不一致性,是指:在采用CACHE的系統中,同樣一個數據可能既存在于CACHE中,也存在于主存中,數據一樣則具有一致性,數據若不一樣就叫做不一致性。具體表現在兩個方面:

  (1)更新時可能CACHE中的數據更新,而主存未更新,則造成數據丟失;

  (2)在有DMA控制器的系統和多處理器系統中,有多個部件可以訪問主存。這時,可能其中有些部件是直接訪問主存,也可能每個DMA部件和處理器配置一個CACHE。這樣,主存的一個區塊可能對應于多個CACHE中的一個區塊。于是會產生主存中的數據被某個總線部件更新過,而某個CACHE中的內容未更新,造成數據過時。

2 問題的分析

  要解釋這個問題,首先要了解CACHE的工作模式。CACHE的基本工作模式有兩種:write-through模式和 copyback模式。在write-through模式下,所有的寫操作都寫入CACHE和RAM,保證了CACHE和RAM的一致。然而,每次對RAM都有寫操作會使處理器的處理能力降低,并且占用總線帶寬。在copyback模式下,寫操作只寫入CACHE,不寫入RAM,從而提高了處理器性能和總線帶寬。copyback模式下,CACHE中的內容只有在需要的時候才寫到RAM中。當CACHE中無可用空間時,一般使用最近最少使用算法(LRU)來決定哪一個CACHE項被替換。copyback模式提供了很高的系統性能,但是需要更多的一致性作保證。為了便于理解,給出一個使用了CACHE的系統的邏輯框圖,如圖1所示。

?

  該系統中兩個地方會發生CACHE的不一致性:

  (1)數據CACHE/RAM

  數據CACHE與RAM之間的問題源于處理器和其他總線控制器對RAM的異步讀寫訪問。DMA設備和其他總線控制器對RAM的訪問是引起CACHE一致性問題的主要原因,這個問題可以通過在程序中加入一些代碼來解決。

  (2)共享CACHE LINE

  當一個CACHE LINE被兩個以上的線程共享時,也會產生一致性問題。當某個線程使一個CACHE LINE無效時,這個CACHE LINE中的一些項可能屬于另外一個線程。這個問題也可以通過一定的方法來避免,只要在分配內存時大小是CACHE LINE大小的整數倍即可。

  在哈佛體系結構、copyback模式和無軟件干預的前提下,最佳的保持一致性的方法就是使用具有總線監聽能力的硬件。將CACHE、RAM、DMA設備和其它所有的總線主控設備都連到一個物理總線上,以使CACHE可以對該總線上的總線交互過程進行監聽,CACHE將對總線上的地址周期和控制(讀/寫)比特監聽,數據周期則被延遲到需要時才進行。當CACHE中的一項被一個異步操作修改時,該CACHE項就會被標為無效。如果處理器對一個已經被標為無效的CACHE項進行訪問時,CACHE就會從RAM中重新載入有效數據。在copyback模式下,處理器對CACHE進行寫操作時,RAM相應地址中的內容就變成過時。如果另外一個設備想訪問RAM中的這部分內容,CACHE就會搶占該訪問周期,將有效的數據寫入RAM。然后被搶占的訪問周期重新開始并將讀到RAM中的有效數據。但是,目前提供監聽能力的板子并不多。

3 解決的方法

  根據上面的" title="面的">面的分析和討論,可見問題正是由數據CACHE / RAM的不一致性引起的。雖然關掉CACHE就可以解決一致性的問題,并且能夠減小程序開發的復雜度。但是一個高性能的系統是需要CACHE的,關掉CACHE會大大降低系統的性能。因此,本文僅討論在程序中加入代碼來克服一致性問題的方法。

  可以采用以下幾種加入代碼的方法來解決一致性的問題(本文使用WIND RIVER公司的嵌入式" title="的嵌入式">的嵌入式實時多任務操作系統VxWORKS,下面的函數都是VxWORKS提供的):

  (1)對于時間上不是那么關鍵的程序段,可以先用下面的代碼維護數據CACHE的一致性。

  cacheInvalidate (DATA_CACHE, address, bytes);

??????????????????????????????????????????????????????? ?/* 輸入緩沖區*/

  ...

  cacheFlush (DATA_CACHE, address, bytes);??????

??????????????????????????????????????????????????????? ? /*輸出緩沖區*/

  (2)對于時間上比較關鍵的程序段,采用如下原則:在每次使用輸出緩沖區前將其更新;在每次使用輸入緩沖區前使其無效。

  將緩沖區標示為“non-cacheable”可以防止一致性問題,這需要MMU支持。在分配緩沖區時,將其標示為“non-cacheable”即可。然而,動態緩沖區在釋放時要標為“cacheable”,否則內存總會產生大量的緩沖區碎片。

  下面給出一個高性能的驅動程序例子,它把更新/無效的概念進行了擴展。不是對整個CACHE系統,而是對每一個緩沖區都這樣做。即通過分配對CACHE安全的緩沖區,在一個緩沖區的基礎上操作,從而防止了不需要的更新/無效操作。在這個例子中使用了CACHE庫中的函數cacheDMAMalloc( ),宏CACHE_DMA_INVALIDATE和CACHE_DMA_FLUSH實現一致性。在第4行調用函數cacheDMAMalloc( )后,如果指針返回為非空,則說明分配到了一塊對于一致性問題來說是安全的緩沖區。

  第7行驅動程序在緩沖區中寫入要傳給外部設備的數據,在第9行準備傳給外設" title="外設">外設之前,驅動程序必須更新數據CACHE以保證要傳的數據是在內存中,而不是在CACHE中。

  當驅動程序準備讀外設傳給內存的數據,在第13行驅動程序處理這些數據之前,必須使數據CACHE中對應于輸入緩沖區的那部分無效以消除這些包含過時內容的條目。之后,驅動程序才能安全地處理從內存中取來的輸入數據。

  1:???? STATUS drvExample (pBuf)

  2:???? void *pBuf;??????? ??????????????? /* 緩沖區指針 */

  3:???? }

  4:??????????? pBuf = cacheDMAMalloc (BUF_SIZE);

  5:??????????? if (pBuf == NULL)

  6:??????????? return (ERROR);?????????????/*內存分配失敗*/

  7:?????????????????????????????????????? ?/*其它初始化代碼和向發送緩沖區填數據*/

  8:??????????? CACHE_DMA_FLUSH (pBuf, BUF_SIZE);

  9:??????????? drvWrite (pBuf);??? ??????? /*向外設發送數據*/

  10:?????????? ……????????????????????????/* 其它代碼 */

  11:?????????? drvWait ();?????????????????/*等待外設來的數據*/

  12:?????????? CACHE_DMA_INVALIDATE (pBuf, BUF_SIZE);

  13:?????????????????????????????????????? /* 處理外設來的數據 */

  14:?????????? cacheDMAFree (pBuf);??????? /*釋放內存 */

  15:?????????? return (OK);

  16:?? ?}

?

參考文獻

1 Motorola Inc. MPC860 PowerQUICC User's Manual, 1998

2 Wind River system Inc. VxWorks Programmer's Guide. 1999

3 Wind River system Inc. Tornado User's Guide 2.0, Edition 1. 1999

4 呂京建,肖海橋. 面向二十一世紀的嵌入式系統綜述.中國單片機公共實驗室.

本站內容除特別聲明的原創文章之外,轉載內容只為傳遞更多信息,并不代表本網站贊同其觀點。轉載的所有的文章、圖片、音/視頻文件等資料的版權歸版權所有權人所有。本站采用的非本站原創文章及圖片等內容無法一一聯系確認版權者。如涉及作品內容、版權和其它問題,請及時通過電子郵件或電話通知我們,以便迅速采取適當措施,避免給雙方造成不必要的經濟損失。聯系電話:010-82306118;郵箱:aet@chinaaet.com。
热re99久久精品国产66热_欧美小视频在线观看_日韩成人激情影院_庆余年2免费日韩剧观看大牛_91久久久久久国产精品_国产原创欧美精品_美女999久久久精品视频_欧美大成色www永久网站婷_国产色婷婷国产综合在线理论片a_国产精品电影在线观看_日韩精品视频在线观看网址_97在线观看免费_性欧美亚洲xxxx乳在线观看_久久精品美女视频网站_777国产偷窥盗摄精品视频_在线日韩第一页
  • <strike id="ygamy"></strike>
  • 
    
      • <del id="ygamy"></del>
        <tfoot id="ygamy"></tfoot>
          <strike id="ygamy"></strike>
          悠悠资源网久久精品| 欧美亚洲尤物久久| 黄色精品一区二区| 亚洲一区区二区| 国产精品激情| 欧美伊人久久大香线蕉综合69| 国产精品揄拍一区二区| 一本色道精品久久一区二区三区| 欧美不卡一区| 欧美一区二区黄| 欧美国产欧美亚洲国产日韩mv天天看完整| 欧美午夜精品久久久久久浪潮| 亚洲国产婷婷综合在线精品| 欧美高清不卡| 国产日韩欧美一二三区| 国产精品夜夜夜一区二区三区尤| 欧美三区视频| 国产精品成人一区二区艾草| 夜夜嗨av一区二区三区四季av| 亚洲国产日韩在线一区模特| 欧美日韩亚洲精品内裤| 亚洲欧美日韩高清| 国产精品麻豆成人av电影艾秋| 欧美国产国产综合| 麻豆成人综合网| 亚洲激情第一区| 在线观看中文字幕不卡| 欧美国产日韩亚洲一区| 国产日韩欧美三级| 日韩视频在线播放| 国产伦精品一区二区三区免费迷| 久久这里有精品视频| 免费久久久一本精品久久区| 亚洲视频1区| 国产精品久久久| 一区二区三区精品在线| 性娇小13――14欧美| 欧美视频你懂的| 久久久久久久久久久久久女国产乱| 亚洲精品九九| 亚洲视频在线观看视频| 久久免费视频观看| 日韩一级免费观看| 亚洲一区二区三区中文字幕在线| 欧美一区二区三区电影在线观看| 亚洲视频一区二区| 影音先锋日韩有码| 欧美日韩国产一级片| 99视频日韩| 亚洲精品乱码久久久久久按摩观| 欧美精品一区二区三区在线看午夜| 午夜免费日韩视频| 久久久综合精品| 美女999久久久精品视频| 欧美精品日韩综合在线| 亚洲精品影视| 麻豆精品91| 久久福利电影| 亚洲永久网站| 日韩亚洲精品视频| 欧美日本成人| 一色屋精品视频在线观看网站| 一区二区在线视频| 欧美一级午夜免费电影| av成人激情| 亚洲精品男同| 亚洲国产天堂久久国产91| 欧美成年人在线观看| 欧美高清在线视频| 午夜一级在线看亚洲| 免费成人av资源网| 欧美福利小视频| 欧美福利专区| 亚洲深夜影院| 国产裸体写真av一区二区| 国产日韩一区二区三区| 欧美精品一区二区在线播放| 欧美在线精品免播放器视频| 欧美视频中文字幕| 欧美日韩成人在线播放| 国产一区二区欧美| 99视频热这里只有精品免费| 99爱精品视频| 在线激情影院一区| 欧美黑人在线观看| 在线精品视频一区二区| 欧美成人一区二区三区片免费| 欧美一区二区三区四区在线观看地址| 亚洲国产精品传媒在线观看| 亚洲激情图片小说视频| 一区二区福利| 国内精品久久久久影院 日本资源| 国内精品模特av私拍在线观看| 欧美一级欧美一级在线播放| 国产日产亚洲精品| 欧美一级专区| 在线一区二区三区四区| 亚洲与欧洲av电影| 久久gogo国模裸体人体| 亚洲欧美欧美一区二区三区| 日韩一级视频免费观看在线| 亚洲高清视频的网址| 国产乱码精品一区二区三区av| 国产视频一区三区| 欧美在线日韩在线| 久久精品动漫| 国产日产亚洲精品| 欧美看片网站| 亚洲夜间福利| 一区二区三区视频免费在线观看| 久久免费精品日本久久中文字幕| 欧美国产第一页| 一色屋精品亚洲香蕉网站| 欧美视频在线免费看| 亚洲一区二区日本| 久久久免费精品视频| 国产精品久久久一区二区| 国产精品99久久不卡二区| 久久精品欧美日韩精品| 日韩午夜在线观看视频| 一本久久a久久免费精品不卡| 免费高清在线一区| 久久精品二区三区| 99re6这里只有精品| 牛人盗摄一区二区三区视频| 国产专区欧美专区| 亚洲欧美日韩精品久久亚洲区| 亚洲精品男同| 日韩视频中午一区| 亚洲午夜激情在线| 欧美极品一区二区三区| 国产日韩欧美一区二区三区在线观看| 欧美日韩高清在线播放| 国产精品电影在线观看| 亚洲国产岛国毛片在线| 欧美高清在线精品一区| 欧美人成在线视频| 一区二区久久久久| 狠狠色综合一区二区| 日韩一级在线观看| 久久精品国产久精国产一老狼| 激情亚洲网站| 久久人人爽爽爽人久久久| 国产麻豆精品在线观看| 欧美亚洲视频在线看网址| 欧美精品久久久久a| 夜夜嗨av色一区二区不卡| 欧美中文字幕在线| 黑人一区二区| 亚洲激情偷拍| 亚洲大胆人体视频| 欧美性开放视频| 亚洲福利视频在线| 亚洲狼人综合| 欧美一级专区免费大片| 欧美一级片久久久久久久| 国产乱码精品一区二区三区五月婷| 亚洲日本va午夜在线电影| 久久久久久久一区二区三区| 亚洲国产专区| 蜜桃av一区二区| 国产精品午夜春色av| 欧美成人精品一区| 精品成人国产| 国产亚洲一区二区精品| 一本不卡影院| 国产综合色产在线精品| 欧美日韩精品在线视频| 亚洲综合视频一区| 欧美激情第六页| 99视频精品免费观看| 国产日韩在线视频| 欧美日韩免费| 一色屋精品视频在线观看网站| 欧美与黑人午夜性猛交久久久| 欧美精品福利| 伊人伊人伊人久久| 亚洲精品网站在线播放gif| 欧美大色视频| 免费永久网站黄欧美| 欧美精品成人91久久久久久久| 亚洲一二三区视频在线观看| 欧美日韩国产免费观看| 亚洲视频香蕉人妖| 午夜在线电影亚洲一区| 欧美中文字幕精品| 国产亚洲一二三区| 国产真实乱子伦精品视频| 影音先锋日韩精品| 亚洲欧美一区二区三区久久| 亚洲综合日韩在线| 欧美偷拍一区二区| 久久本道综合色狠狠五月| 欧美精品福利| 在线观看一区视频| 亚洲欧美国产va在线影院| 欧美专区一区二区三区| 久久国产一区| 欧美日韩一区二区三区四区在线观看| 亚洲国产精品福利| 欲香欲色天天天综合和网| 亚洲国产欧美一区二区三区丁香婷| 久久精品国产亚洲一区二区三区| 最近中文字幕日韩精品| 久久久一本精品99久久精品66| 国产精品swag| 国内偷自视频区视频综合| 欧美亚洲一级| 一本色道久久综合亚洲精品小说| 久久香蕉精品| 久久久视频精品| 欧美日韩国产在线| 亚洲欧美日韩国产一区二区三区| 国产精品乱子乱xxxx| 欧美jizzhd精品欧美喷水| 国产精品亚洲综合一区在线观看| 伊人久久大香线| 午夜精品福利在线观看| 一区二区三区在线视频免费观看| 99re8这里有精品热视频免费| 黄色一区二区三区| 国产精品乱子乱xxxx| 亚洲国产精品久久久久秋霞蜜臀| 欧美日韩免费观看一区三区| 久久中文在线| 99视频一区| 欧美成人激情在线| 在线中文字幕一区| 新狼窝色av性久久久久久| 亚洲九九精品| 国产精品v欧美精品∨日韩| 精品91视频| 国产精品视频网站| 欧美国产精品劲爆| 欧美性事免费在线观看| 久久精品论坛| 91久久精品www人人做人人爽| 美日韩精品免费观看视频| 亚洲欧洲综合另类在线| 亚洲精品国产视频| 欧美影院精品一区| 国产精品户外野外| 在线视频精品一区| 欧美亚日韩国产aⅴ精品中极品| 久久综合电影一区| 亚洲欧美日韩视频二区| 国产精品系列在线播放| aa日韩免费精品视频一| 久久久夜色精品亚洲| 亚洲午夜激情网站| 欧美日韩福利在线观看| 欧美连裤袜在线视频| 欧美大片在线观看一区二区| 亚洲视频一区在线观看| 欧美国产日产韩国视频| 欧美日韩一区在线观看视频| 国产日韩欧美在线| 香蕉成人啪国产精品视频综合网| 国产日韩欧美在线播放| 国产精品狠色婷| 久久gogo国模裸体人体| 韩国免费一区| 国产精品成人观看视频免费| 欧美高清日韩| 国产视频久久| 欧美特黄a级高清免费大片a级| 亚洲伦理中文字幕| 亚洲天堂av电影| 国产精品久久久久久一区二区三区| 在线亚洲观看| 国产曰批免费观看久久久| 99精品欧美一区二区蜜桃免费| 国产精品美女久久| 另类激情亚洲| 欧美激情五月| 麻豆国产精品va在线观看不卡| 欧美韩日高清| 午夜精品久久久久久99热软件| 久久久久久久网站| 国产精品一区二区久久| 欧美中文在线免费| 国产午夜精品全部视频播放| 欧美日韩免费观看中文| 欧美激情综合| 久久精品国产亚洲一区二区| 国产亚洲精品bt天堂精选| 国产日韩欧美一区在线| 亚洲人午夜精品免费| 国产精品羞羞答答xxdd| 国产精品久久久久久久久果冻传媒| 久久综合精品国产一区二区三区| 在线视频精品一区| 欧美一区二区在线免费观看| 国产精品一区二区三区四区| 欧美电影免费| 久久偷看各类wc女厕嘘嘘偷窃| 国产综合视频在线观看| 亚洲第一中文字幕| 精品粉嫩aⅴ一区二区三区四区| 欧美自拍丝袜亚洲| 性伦欧美刺激片在线观看| 极品少妇一区二区三区精品视频| 久久超碰97中文字幕| 亚洲色图在线视频| 欧美国内亚洲| 国产精品免费网站| 免费观看一区| 欧美va亚洲va日韩∨a综合色| 一区在线免费| 亚洲人体1000| 这里只有精品在线播放| 国产精品热久久久久夜色精品三区| 亚洲一区二区三区成人在线视频精品| 99国产精品久久久久老师| 伊人成人在线视频| 香蕉久久精品日日躁夜夜躁| 免费久久99精品国产| 欧美视频在线观看视频极品| 亚洲欧美一区二区原创| 在线观看精品一区| 国产精品人人爽人人做我的可爱| 国产亚洲成人一区| 午夜免费久久久久| 国产综合色产| 亚洲一区一卡| 亚洲综合第一页| 欧美视频一区二区三区在线观看| 欧美日韩小视频|