在s3c2410 mmu(儲存器管理單元)中我向大家介紹mmu的工作原理和對s3c2410 mmu部分操作進行了講解。我們知道mmu存在的原因是為了支援虛擬儲存技術,但不知道你發現了沒有,虛擬儲存技術的使用會降低整個系統的效率,因為與傳統的儲存技術相比,虛擬儲存技術對記憶體的訪問操作多了一步,就是對位址進行查表(查詢對映關係),必須先從虛擬位址中分解出頁號和頁內偏移,根據頁號對描述符進行索引(這就是乙個查表過程)得到物理空間的首位址,這樣做的代價是巨大的(其實這也正是時間效率與空間效率之間矛盾的乙個體現),對某些嵌入式系統來說這簡直就是惡夢。那麼在引入了虛擬儲存技術之後有沒有方法在時間效率與空間效率這個矛盾之間取得乙個平衡點呢?答案是有,我們可以通過一種技術從最大限度上降低這兩者的矛盾,這種技術是caches(快取)。也是我們本文要介紹的。
cache與dram訪問的一致性
在cpu與主存之間增加了cache之後,便存在資料在cpu和cache及主存之間如何訪問的問題。讀寫各有2種方式。 ……
你可以通過閱讀完全文
s3c2410 內建了指令快取(icaches),資料快取(dcaches),寫快取(write buffer),實體地址標誌讀寫區 (physical address tag ram),cpu將通過它們來提高記憶體訪問效率。
我們先討論指令快取(icaches)。
icaches使用的是虛擬位址,它的大小是16kb,它被分成512行(entry),每行8個字(8 words,32bits)。
當系統上電或重起(reset)的時候,icaches功能是被關閉的,我們必須往lcr bit置1去開啟它,lcr bit在cp15協處理器中控制暫存器1的第12位(關閉icaches功能則是往該位置0)。icaches功能一般是在mmu開啟之後被使用的(為了降低mmu查表帶來的開銷),但有一點需要注意,並不是說mmu被開啟了icaches才會被開啟,正如本段剛開始講的,icaches的開啟與關閉是由lcr bit所決定的,無論mmu是否被開啟,只要lcr bit被置1了,icaches就會發揮它的作用。
大家是否還記得discriptor(描述符)中有乙個c bit我們稱之為ctt,它是指明該描述符描述的記憶體區域內的內容(可以是指令也可以是資料)是否可以被cache,若ctt=1,則允許cache,否則不允許被cache。於是cpu讀取指令出現了下面這些情況:
如果cpu從caches中讀取到所要的一條指令(cache hit)且這條指令所在的記憶體區域是cacheble的(該區域所屬描述符中ctt=1),則cpu執行這條指令並從caches中返回(不需要從記憶體中讀取)。
若cpu從caches中讀取不到所要的指令(cache miss)而這條指令所在的記憶體區域是cacheble的(同第1點),則cpu將從記憶體中讀取這條指令,同時,乙個稱為「8-word linefill」的動作將發生,這個動作是把該指令所處區域的8個word寫進icaches的某個entry中,這個entry必須是沒有被鎖定的(對鎖定這個操作感興趣的朋友可以找相關的資料進行了解)
若cpu從caches中讀取不到所要的指令(cache miss)而這條指令所在的記憶體區域是uncacheble的(該區域所屬描述符中ctt=0),則cpu將從記憶體讀取這條指令並執行後返回(不發生linefill)
通過以上的說明,我們可以了解到cpu是怎麼通過icaches執行指令的。你可能會有這個疑問,icaches總共只有512個條目(entry),當512個條目都被填充完之後,cpu要把新讀取近來的指令放到哪個條目上呢?答案是cpu會把新讀取近來的8個word從512個條目中選擇乙個對其進行寫入,那cpu是怎麼選出乙個條目來的呢?這就關係到icaches的替換法則(replacemnet algorithm)了。icaches的replacemnet algorithm有兩種,一種是random模式另一種round-robin模式,我們可以通過cp15協處理器中暫存器1的rr bit對其進行指定(0 = random replacement 1 = round robin replacement),如果有需要你還可以進行指令鎖定(instruction cache lockdown)。
關於替換法則和指令鎖定我就不做詳細的講解,感興趣的朋友可以找相關的資料進行了解。
接下來我們談資料快取(dcaches)和寫快取(write buffer)
dcaches使用的是虛擬位址,它的大小是16kb,它被分成512行(entry),每行8個字(8 words,32bits)。每行有兩個修改標誌位(dirty bits),第乙個標誌位標識前4個字,第二個標誌位標識後4個字,同時每行中還有乙個tag 位址(標籤位址)和乙個valid bit。
與icaches一樣,系統上電或重起(reset)的時候,dcaches功能是被關閉的,我們必須往ccr bit置1去開啟它,ccr bit在cp15協處理器中控制暫存器1的第2位(關閉dcaches功能則是往該位置0)。與icaches不同,dcaches功能是必須在mmu開啟之後才能被使用的。
我們現在討論的都是dcaches,你可能會問那write buffer呢?他和dcaches區別是什麼呢? 其實dcaches和write buffer兩者間的操作有著非常緊密的聯絡,很抱歉,到目前為止我無法說出他們之間有什麼根本上的區別(-_-!!!),但我能告訴你什麼時候使用的是dcaches,什麼時候使用的是write buffer.系統可以通過ccr bit對dcaches的功能進行開啟與關閉的設定,但是在s3c2410中卻沒有確定的某個bit可以來開啟或關閉write buffer…你可能有點懵…我們還是來看一張表吧,這張表說明了dcaches,write buffer和ccr,ctt (descriptor中的c bit),btt(descriptor中的b bit)之間的關係,其中「ctt and ccr」一項裡面的值是 ctt與ccr進行邏輯與之後的值(ctt&&ccr).
從上面的**中我們可以清楚的知道系統什麼時候使用的是dcaches,什麼時候使用的是write buffer,我們也可以看到dcaches的寫回方式是怎麼決定的(write-back or write-througth)。
在這裡我要對ctt and ccr=0進行說明,能夠使ctt and ccr=0的共有三種情況,分別是
ctt =0, ccr=0
ctt =1, ccr=0
ctt =0, ccr=1
我們分別對其進行說明。
到此為止我們用兩句話總結一下dcaches與write buffer的開啟和使用:
1.dcaches與write buffer的開啟由ccr決定。
2.dcaches與write buffer的使用規則由ctt和btt決定。
dcaches與icaches有乙個最大的不同,icaches存放的是指令,dcaches存放的是資料。程式在執行期間指令的內容是不會改變的,所以icaches中指令所對應的記憶體空間中的內容不需要更新。但是資料是隨著程式的執行而改變的,所以dcaches中資料必須被及時的更新到記憶體(這也是為什麼icaches沒有寫回操作而dcaches提供了寫回操作的原因)。提到寫回操作,就不得不提到pa tag 位址(物理標籤位址)這個韌體,它也是整個caches模組的重要組成部分。
簡單說pa tag 位址(物理標籤位址)的功能是指明了寫回操作必須把dcaches中待寫回內容寫到物理記憶體的哪個位置。不知道你還記不記得,dcaches中每個entry中都有乙個pa tag 位址(物理標籤位址),當乙個linefill發生時,被cache的內容被寫進了dcaches,同時被cache的實體地址則被寫入了pa tag 位址(物理標籤位址)。除了tag 位址(標籤位址),還有兩個稱為dirty bit(修改標誌位)的位出現在dcaches的每乙個entry中,它們指明了當前entry中的資料是否已經發生了改變(發生改變簡稱為變「髒」,所以叫dirty bit,老外取名稱可真有意思 -_-!!!)。如果某個entry中的dirty bit置位了,說明該entry已經變髒,於是乙個寫回操作將被執行,寫回操作的目的位址則是由pa tag 位址(物理標籤位址)索引到的實體地址。
關於caches,write buffer更詳細的內容請大家閱讀s3c2410的操作手冊:]
S3C2410讀寫Nand Flash分析
2009 01 15 16 51 321人閱讀 收藏舉報 s3c2410讀寫nand flash分析 一 結構分析 s3c2410處理器整合了8位nandflash控制器。目前市場上常見的8位nandflash有三星公司的k9f1208 k9f1g08 k9f2g08等。k9f1208 k9f1g0...
s3c2410的nand flash的驅動分析
以前都是把別人寫好的 直接拿過來用,而沒有去關心裡面到底怎麼實現的,昨晚對照著samsung 2410和k 9f1208的晶元資料把這些 讀了一遍,終於明白了對nand flash的操作一步步是怎麼實現的了。以下的這些 可以在vivi或者kernel裡面找到 對乙個nand flash的操作,總體上...
S3C2410快速啟動的實現
嵌入式系統對功能 可靠性 成本 體積 功耗等均有嚴格要求,以arm體系結構為基礎的各種risc微處理器具有靈活的特性和強大的效能,在嵌入式系統中得到了廣泛的應用。s3c2410是三星公司基於arm920t設計的一款處理器,在開發基於s3c2410的系統的過程中,如何讓系統快速穩定地啟動是乙個重要問題...