主記憶體管理單元
主記憶體管理單元(英語:memory management unit,縮寫為MMU),有時稱作分頁主記憶體管理單元(英語:paged memory management unit,縮寫為PMMU)。它是一種負責處理中央處理器(CPU)的主記憶體訪問請求的電腦硬件。它的功能包括虛擬地址到實體位址的轉換(即虛擬記憶體管理)[1]、主記憶體保護、中央處理器高速緩衝記憶體的控制,在較為簡單的電腦架構中,負責匯流排的仲裁以及儲存體切換(bank switching,尤其是在8位元的系統上)。
工作機制
[編輯]現代的主記憶體管理單元是以頁的方式,分割虛擬地址空間(處理器使用的地址範圍)的;頁的大小是2的n次方,通常為幾KB(千位元組)。地址尾部的n位(頁大小的2的次方數)作為頁內的偏移量保持不變。其餘的地址位(address)為(虛擬)頁號。
頁表條目
[編輯]主記憶體管理單元通常藉助一種叫做轉譯旁觀緩衝區(Translation Lookaside Buffer,縮寫為TLB)的相聯高速緩衝記憶體(associative cache)來將虛擬頁號轉換為物理頁號。當後備緩衝區中沒有轉換記錄時,則使用一種較慢的機制,其中包括專用硬件(hardware-specific)的數據結構(Data structure)或軟件輔助手段。這個數據結構稱為分頁表,頁表中的數據就叫做分頁表項(page table entry,縮寫為PTE)。物理頁號結合頁偏移量便提供出了完整的實體位址。
頁表或轉換後備緩衝區中數據項包括的資訊有:一、「髒位」(頁面重寫標誌位,dirty bit)——表示該頁是否被寫過。二、「存取位」(accessed bit)——表示該頁最後使用於何時,以便於最近最少使用頁面置換演算法(least recently used page replacement algorithm)的實現。三、哪種行程可以讀寫該頁的資訊,例如用戶模式(user mode)行程還是特權模式(supervisor mode)行程。四、該頁是否應被高速緩衝的資訊。
有時,TLB或PTE會禁止對虛擬頁的訪問,這可能是因為沒有物理隨機存取記憶體(random access memory)與虛擬頁相關聯。如果是這種情況,MMU將向CPU發出頁錯誤(page fault)的訊號。作業系統(operating system)將進行處理,也許會嘗試尋找RAM的空白幀,同時建立一個新的PTE將之對映到所請求的虛擬地址。如果沒有空閒的RAM,可能必須關閉一個已經存在的頁面,使用一些替換演算法,將之儲存到磁碟中(這被稱之為頁面排程(paging)。在一些MMU中,PTEs或者TLB也存在一些缺點,在這樣的情況下作業系統將必須釋放空間以供新的對映。
益處
[編輯]有些情況下,軟件自身的錯誤可以引發頁錯誤,這時主記憶體管理單元可以檢測到頁錯誤,然後通知作業系統終止出錯的程式。通常來說, 作業系統會為每個程式分配虛擬記憶體地址,而不會讓程式直接訪問實體記憶體。這種主記憶體保護特性可以避免某個程式非法訪問其他程式的虛擬記憶體空間。
此外,主記憶體管理單元能夠減少程式的主記憶體碎片化現象。也就是說,當程式分配並釋放主記憶體塊後,可分配的連續主記憶體塊的最大尺寸亦遠小於尚未分配的主記憶體量。虛擬記憶體機制可以在主記憶體分頁機制的基礎上,將多個不連續的實體記憶體區塊對映為一個連續的虛擬記憶體塊。
- ^ Memory management unit, 1981-12-14 [2018-08-15], (原始內容存檔於2021-05-12)