現在我們就來解決這最後一次訪存的低效率問題。同樣基於程式訪存的時空區域性性原理,我們在主存和cpu暫存器之間引入乙個高速、容量相對較小的儲存器,把正在執行的指令或待讀取的資料附近的一整塊資料都快取進這個高速的儲存器中,供cpu在近段時間內使用,從而極大地提高了程式的執行速度。對於這個快取記憶體,我們稱之為cache。
通常情況下,一級cache分為指令cache和資料cache。二級cache往往不區分資料和指令。指令cache我們常常簡寫為i-cache,對於資料cache,我們常常簡寫為d-cache。
對於cache的寫入方式,根據是否直接寫入記憶體分為兩種:
寫通式(write through)
寫回式(write back)
所謂寫通式,也就是cpu在寫cache的同時也要寫入記憶體。顯然這樣做就會導致寫操作效率很低,但好處是可以保證cache和主存中的資料實時同步。
所謂寫回式,就是cpu只寫cache,不管記憶體。顯然寫cache之後,cache和記憶體中的資料就會產生不一致。不一致就不一致,我們不管記憶體,只在cache中設定乙個髒位標誌,只有當cache中的資料被交換出去或者cache被清空時,才將更新後的是資料寫入記憶體。這樣最終保證了cache和主存資料的一致性。
根據cache所處的位置,我們可以把cache分為虛擬的和物理的。cache既可以放在cpu與mmu之間,也可以放在mmu與物理儲存器之間。
如上圖所示,寫緩衝器作為乙個非常小的高速儲存緩衝器,用來臨時存放處理器將要寫入到主存中的資料,從而避免了cpu直接訪存寫資料。cache先將資料寫入寫緩衝器中,之後cache就認為它已經將資料寫入記憶體了,然後返回繼續做其他工作。而寫緩衝器再以低速寫入主存中,這就將高速的cpu和cache從對主存的低速讀寫中解放了出來。
寫緩衝器同時還改善了cache的效能,體現在當要替換出乙個髒的cache行時,只需將該cache行中的資料放入寫緩衝器中,而不去直接寫主存。這樣就可以快速填充新的cache行資料。
顯然,寫緩衝器中的資料在沒有被寫入主存之前,是不能被讀取的。同樣,被替換的cache行在寫緩衝器中時也不能被讀取的。這也是為什麼寫緩衝器的深度通常比較小,通常只有幾個cache行的深度。
總的來說,寫緩衝器是用來應對記憶體的寫操作的,將原本要寫向記憶體的資料暫寫到寫緩衝器中。
s3c2440中實現了i-cache、d-cache和write buffer。我們在介紹一級頁表和二級頁表的時候,就看到了c位和b位。只不過當時並沒有詳細講解這兩位。
我們參照arm technical reference manual,把描述符中的c位稱為ctt,b位稱為btt。ctt用來控制該段/頁是否允許被cache,btt表示寫該記憶體是是否允許使用wirte buffer。
i-cache的使用比較簡單,當系統上電或者復位時,i-cache中的內容是無效的,並且i-cache中的功能是被禁掉的。將cp15協處理器中的c1暫存器的icr位(第12位)置1,即可使能i-cache功能,清零則禁止i-cache功能。
可以在沒有使能mmu時開啟i-cache,此時cpu讀取指令時所涉及到的記憶體都被認為是允許cache的。
當啟用mmu之後,此時描述符中的ctt用來表示一段記憶體是否可以被cache。若ctt等於1,則允許cache,否則不允許被cache。即當ctt為0時,cpu直接從記憶體中讀取指令。使能i-cache可以極大的提高程式的執行效率。
同樣,系統剛復位時d-cache和write buffer都不能使用。需要令cp15協處理器的c1暫存器的ccr位置1,才可以啟動d-cache。而write buffer和d-cache是配合使用的,沒有專門的控股位來開啟和停止它。
需要注意的一點是,d-cache必須在mmu開始之後才可以使能。因為d-cache需要使用頁表中的ctt和btt。
下表是ccr、ctt和btt在不同取值下d-cache和write buffer的工作方式:
S3C2410 S3C2440開發板相關書籍
1 arm處理器裸機開發實戰 機制而非策略 王小強 主編 電子工業出版社 實驗平台 tq2440。裸跑中的經典教程,有注釋,例項多而實用,是目前市場上最受好評的2440 裸跑教程。讓您從微控制器51入手arm 從此再無憂。2.c os ii原理與arm應用程式設計 張勇 方勤 蔡鵬 許波 著 3.嵌...
求教 s3c2440問題
趙老師您好,我把您的程式新增到我的程式中去了,下面是主要 1 main函式 int main void a a b rgpbdat liushui delay 20 liushui liushui 0xffe 2 pwm初始化 void pwm init void 3 定時器中斷 static vo...
s3c2440系統時鐘
1 flck hclk和pclk的關係 一般來說,mcu的主時鐘源主要是外部晶振或外部時鐘,而用的最多的是外部晶振。在正確情況下,系統內所使用的時鐘都是外部時鐘源經過一定的處理得到的。由於外部時鐘源的頻率一般不能滿足系統所需要的高頻條件,所以往往需要pll 鎖相環 進行倍頻處理。在s3c2440中,...