王 爽,吳全興
(1.中國電子科技集團公司第四十七研究所,沈陽110032;2.沈陽新元信息與測控技術(shù)有限公司,沈陽110179)
存儲器管理單元MMU在嵌入式CPU中的位置非常重要,MMU完成的基本功能是將虛擬地址轉(zhuǎn)換為物理地址;控制存儲器訪問權(quán)限,中止非法訪問;設(shè)置虛擬存儲空間的緩存特性。它簡化了任務(wù)編程,允許程序員使用虛擬地址進行編程。MMU作為轉(zhuǎn)換器,將程序和數(shù)據(jù)的虛擬地址轉(zhuǎn)換為實際的物理地址。這個轉(zhuǎn)換過程允許多個不同的程序使用相同的虛擬地址,而各自存儲在物理存儲器的不同位置。
MMU把CPU產(chǎn)生的虛擬地址轉(zhuǎn)換成物理地址去訪問外部存儲器,同時檢查訪問權(quán)限。地址轉(zhuǎn)換路徑的選取是由這個地址被標(biāo)記為節(jié)映射訪問還是頁映射訪問確定。轉(zhuǎn)換過程由第一級頁表開始,節(jié)映射的訪問只需要讀取一級頁表,頁映射的訪問還需要讀取第二級頁表。頁表存放在外部存儲器中。下圖以4MB存儲空間為例說明MMU查找描述符的過程,也是虛擬地址轉(zhuǎn)換成物理地址的主要過程。查找表的偏移地址依據(jù)定義的頁大小不同而不同,也可能有多種頁大小的定義。
圖1 頁表查找過程
MMU完成的基本功能有三點:①將虛擬地址轉(zhuǎn)換為物理地址;②控制存儲器訪問權(quán)限,中止非法訪問;③設(shè)置虛擬存儲空間的緩存特性。
根據(jù)MMU實現(xiàn)的功能,MMU的基本結(jié)構(gòu)框圖如圖2所示。
圖2 MMU結(jié)構(gòu)框圖
MMU存儲系統(tǒng)的結(jié)構(gòu)允許對存儲器系統(tǒng)的精細控制。大部分的存儲細節(jié)由存在存儲器中的轉(zhuǎn)換表提供。這些表的入口(描述符)提供了各種存儲器區(qū)域的屬性。
內(nèi)存訪問權(quán)限的判斷主要是通過每一個段或頁的訪問權(quán)限信息和處理器的域控制信息以及微處理器的用戶/超級用戶狀態(tài)一起,用來確定對尋址位置的訪問是否被允許。
(1)地址對齊錯,只發(fā)生在取指令時,當(dāng)允許產(chǎn)生這個錯誤時如果虛擬地址不是字對齊的,便產(chǎn)生地址對齊錯。
(2)第一級描述符確定尋址位置的頁域,若不存在第一級描述符,則取描述符時產(chǎn)生故障。
(3)檢查訪問控制寄存器,確定當(dāng)前訪問過程是用戶還是管理程序,如果都不是則產(chǎn)生故障。
(4)如果這個訪問是管理程序,不管訪問權(quán)限繼續(xù)進行。如果是用戶程序則使用處理器和描述符的其他控制信息來檢查訪問權(quán)限。具體的控制內(nèi)容不同的處理器有不同的規(guī)定。
物理地址產(chǎn)生之前要先對訪問地址的權(quán)限進行檢查,MMU檢測訪問錯對節(jié)(Section)和頁(page)有些不同,圖3描述了基本的錯誤產(chǎn)生過程,這個過程對程序員來說也是透明的,應(yīng)用中只關(guān)心是否產(chǎn)生錯誤就可以了。
為了減少平均內(nèi)存訪問時間,MMU中采用一個容量更小,訪問速度和CPU通用寄存器相當(dāng)?shù)拇鎯ζ骷泶娣女?dāng)前訪問需要的地址變換條目,它是一個小容量的Cache,就是TLB(Translation Lookaside Buffer)。如果系統(tǒng)是數(shù)據(jù)和指令統(tǒng)一的存儲系統(tǒng),那么TLB也將是統(tǒng)一的。每個地址變換條目記錄了一個虛擬存儲空間的存儲塊的基地址與物理存儲空間相應(yīng)的一個存儲塊的基地址的對應(yīng)關(guān)系,根據(jù)存儲塊大小,可以有多種地址變換(段,大頁,小頁,極小頁)。實際上TLB就是由多個重定位寄存器組成的全相連Cache,當(dāng)TLB失效時,TLB采用預(yù)定的算法來選擇替換的重定位寄存器。TLB只支持兩種類型的命令:清除TLB和鎖定TLB。
圖3 錯誤檢查過程
當(dāng)處理器產(chǎn)生一個內(nèi)存訪問請求時,將傳輸一個虛擬地址給MMU,MMU首先遍歷TLB,如果TLB中不保護虛擬地址的入口(Entry),將轉(zhuǎn)入保存在內(nèi)存中的傳輸主表,來獲得所有訪問地址的物理地址和訪問權(quán)限,成功后將新的虛擬地址的入口信息保存在TLB中,以備下次查詢。得到入口信息后,根據(jù)描述符中的緩存和寫緩沖特性決定是否緩存該內(nèi)存訪問結(jié)果,根據(jù)訪問權(quán)限控制信息確定該內(nèi)存訪問是否被允許,對于不允許緩存的存儲訪問,直接得到物理地址訪問內(nèi)存。對于允許緩存的存儲訪問,如果在Cache中命中,則忽略物理地址,如果Cache沒命中,則使用物理地址訪問內(nèi)存,并把該數(shù)據(jù)塊讀到Cache中。至此MMU就完成了一次訪問的所有工作。
以上簡要介紹了MMU一般的結(jié)構(gòu)和工作原理,有了上面的知識,相信可以為應(yīng)用帶MMU的嵌入式處理器的工程師帶來一定的幫助。
[1] Steve Furber,著.ARM SoC 體系結(jié)構(gòu)[M].田澤,于敦山,盛世敏,譯.北京:北京航空航天大學(xué)出版社,2002.
[2] 杜春雷.ARM體系結(jié)構(gòu)與編程[M].北京:清華大學(xué)出版社,2003.