ARM存儲器之:存儲管理單元MMU
15.5存儲管理單元MMU
在創(chuàng )建多任務(wù)嵌入式系統時(shí),最好有一個(gè)簡(jiǎn)單的方式來(lái)編寫(xiě)、裝載及運行各自獨立的任務(wù)。目前大多數的嵌入式系統不再使用自己定制的控制系統,而使用操作系統來(lái)簡(jiǎn)化這個(gè)過(guò)程。較高級的操作系統采用基于硬件的存儲管理單元MMU來(lái)實(shí)現上述操作。
MMU提供的一個(gè)關(guān)鍵服務(wù)是使各個(gè)任務(wù)作為各自獨立的程序在其自己的私有存儲空間中運行。在帶MMU的操作系統控制下,運行的任務(wù)無(wú)須知道其他與之無(wú)關(guān)的任務(wù)的存儲需求情況,這就簡(jiǎn)化了各個(gè)任務(wù)的設計。
MMU提供了一些資源以允許使用虛擬存儲器(將系統物理存儲器重新編址,可將其看成一個(gè)獨立于系統物理存儲器的存儲空間)。MMU作為轉換器,將程序和數據的虛擬地址(編譯時(shí)的連接地址)轉換成實(shí)際的物理地址,即在物理主存中的地址。這個(gè)轉換過(guò)程允許運行的多個(gè)程序使用相同的虛擬地址,而各自存儲在物理存儲器的不同位置。
這樣存儲器就有兩種類(lèi)型的地址:虛擬地址和物理地址。虛擬地址由編譯器和連接器在定位程序時(shí)分配;物理地址用來(lái)訪(fǎng)問(wèn)實(shí)際的主存硬件模塊(物理上程序存在的區域)。
15.5.1MMU概述
內存管理單位MMU對處理器內存提供了很好的管理。這種管理主要是通過(guò)一個(gè)叫作傳輸表的數據結構來(lái)實(shí)現的。這個(gè)傳輸表存在于內存中,它有多個(gè)稱(chēng)為Entry的入口,每個(gè)入口定義了存儲空間的一個(gè)頁(yè),頁(yè)的大小從1KB到1MB,同時(shí)定義了這些頁(yè)的屬性。
ARM系統中,MMU主要完成以下工作:
①虛擬存儲空間到物理存儲空間的映射,它能夠實(shí)現從虛擬地址到物理地址的轉換;
②存儲器訪(fǎng)問(wèn)權限的控制;
③設置虛擬存儲空間的緩存特性。
MMU通過(guò)它的協(xié)處理器寄存器來(lái)確定傳輸表在內存中的位置,并通過(guò)這些寄存器來(lái)向ARM處理器提供內存訪(fǎng)問(wèn)錯誤信息。
從虛擬地址到物理地址的變換過(guò)程是查詢(xún)傳輸表的過(guò)程,由于傳輸表放在內存中,這個(gè)查詢(xún)過(guò)程通常代價(jià)很大。這個(gè)訪(fǎng)問(wèn)時(shí)間通常是1~2個(gè)內存周期。為了減少平均內存訪(fǎng)問(wèn)時(shí)間,ARM結構體系中采用一個(gè)容量更?。ㄍǔ?~16個(gè)字)、訪(fǎng)問(wèn)速度和CPU中通用寄存器相當的存儲器件來(lái)存放當前訪(fǎng)問(wèn)需要的地址變換條目,它是一個(gè)小容量的Cache。這個(gè)小容量的頁(yè)表Cache稱(chēng)為T(mén)LB(TranslationLookasideBuffer)。
注意 | 如果系統中使用數據和指令統一存儲系統,那么TLB也將是統一的。如果系統是數據和指令分開(kāi)的存儲系統,那么TLB也將分為數據TLB和指令TLB。 |
MMU可以將整個(gè)存儲空間分為最多16個(gè)域(domain)。每個(gè)域對應一定的內存區域,該內存區域具有相同的訪(fǎng)問(wèn)控制屬性。MMU中寄存器c3用于控制與域有關(guān)的屬性配置。
表15.20列出了與MMU有關(guān)的協(xié)處理器寄存器及其作用。
表15.20 與MMU有關(guān)的協(xié)處理器寄存器
協(xié)處理器寄存器 | 作用 |
c1中某些位 | 配置MMU中的一些操作 |
c2 | 保存內存中頁(yè)表基地址 |
c3 | 設置域訪(fǎng)問(wèn)權限 |
c4 | 保留 |
c5 | 內存訪(fǎng)問(wèn)失效狀態(tài)標準 |
c6 | 內存訪(fǎng)問(wèn)失效時(shí)失效地址 |
c8 | 控制與清除TLB內容相關(guān)的操作 |
c10 | 控制與鎖定TLB內容相關(guān)的操作 |
15.5.2MMU與MPU
在A(yíng)RM體系結構中,MMU將MPU的功能大大地增加,使系統內存管理更加靈活、方便。在MPU中引入了“域”的概念來(lái)管理內存,而且域是在專(zhuān)用寄存器中設置的。而MMU將域設置從寄存器移到了內存單位,這樣使域的設置更加靈活,但同時(shí)也增加了系統訪(fǎng)問(wèn)時(shí)間。
另外,除了提供內存保護功能外,MMU還增加了虛擬地址到物理地址的映射。在只有MPU的系統中,每個(gè)任務(wù)被編譯和運行在彼此不同的、固定的主存地址空間,每個(gè)任務(wù)只能在一個(gè)進(jìn)程空間中運行,任何兩個(gè)任務(wù)都不能在主存中有重疊地址。為了運行一個(gè)任務(wù),一個(gè)保護區域被設置在固定地址的程序上,以允許任務(wù)訪(fǎng)問(wèn)由該區域定義的一段存儲空間。保護區域的放置使得該任務(wù)得以運行,而其他任務(wù)空間被保護。
而使用MMU中虛擬地址到物理地址的映射功能,即使任務(wù)被編譯、連接、運行在主存中有重疊地址的區域中,它們仍然可以運行。MMU中對虛存的支持可使構建后的嵌入式系統具有多個(gè)虛擬存儲映射和單個(gè)物理存儲器映射。每個(gè)任務(wù)擁有自己的虛擬存儲器映射,以編譯和連接組成此任務(wù)的代碼和數據。內核層管理各個(gè)任務(wù)在物理存儲器中的放置,使得它們在物理存儲器中擁有彼此不同的地址,這個(gè)地址與其設計時(shí)的虛擬運行地址不一樣。
15.5.3內存訪(fǎng)問(wèn)過(guò)程
當處理器產(chǎn)生一個(gè)內存訪(fǎng)問(wèn)請求時(shí),將傳輸一個(gè)虛擬地址給MMU,MMU首先遍歷TLB(如果使用分離的存儲系統,它將分別遍歷數據TLB和指令TLB)。如果TLB中不保護虛擬地址入口(Entry),那么它將轉入保存在內存中的傳輸主表,來(lái)獲得所有訪(fǎng)問(wèn)地址的物理地址和訪(fǎng)問(wèn)權限。一旦訪(fǎng)問(wèn)成功,它將新的虛擬地址入口(Entry)信息保存在TLB中,以備下次查詢(xún)使用。
當得到了地址變換入口(Entry)后,將進(jìn)行以下操作:
①根據入口(Entry)中的C(cachable)控制位和B(Bufferable)控制位決定是否緩存該內存訪(fǎng)問(wèn)結果。
②根據訪(fǎng)問(wèn)權限控制位和域訪(fǎng)問(wèn)控制位確定該內存訪(fǎng)問(wèn)是否被允許。如果該內存訪(fǎng)問(wèn)不被允許,CP15向ARM處理器報告存儲訪(fǎng)問(wèn)中止。
③對應不允許緩存的存儲訪(fǎng)問(wèn),直接得到物理地址訪(fǎng)問(wèn)內存。對于允許緩存的存儲訪(fǎng)問(wèn),如果在Cache命中,則忽略物理地址;如果Cache沒(méi)有命中,則使用物理地址訪(fǎng)問(wèn)內存,并把該數據塊讀到Cache中。
圖15.23為帶Cache的MMU存儲訪(fǎng)問(wèn)示意圖。
圖15.23帶Cache的MMU存儲訪(fǎng)問(wèn)示意圖
存儲器相關(guān)文章:存儲器原理
評論