內存管理單元

內存管理單元(英語:memory management unit,縮寫為MMU),有時稱作分頁內存管理單元(英語:paged memory management unit,縮寫為PMMU)。它是一種負責處理中央處理器(CPU)的內存訪問請求的計算機硬件。它的功能包括虛擬地址物理地址的轉換(即虛擬內存管理)[1]內存保護、中央處理器高速緩存的控制,在較為簡單的計算機體系結構中,負責總線仲裁以及存儲體切換bank switching,尤其是在8位的系統上)。

MC68451內存管理單元,可與摩托羅拉68010處理器協同使用

工作機制

現代的內存管理單元是以頁的方式,分割虛擬地址空間(處理器使用的地址範圍)的;頁的大小是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也存在一些缺點,在這樣的情況下操作系統將必須釋放空間以供新的映射。

益處

有些情況下,軟件自身的錯誤可以引發頁錯誤,這時內存管理單元可以檢測到頁錯誤,然後通知操作系統終止出錯的程序。通常來說, 操作系統會為每個程序分配虛擬內存地址,而不會讓程序直接訪問物理內存。這種內存保護特性可以避免某個程序非法訪問其他程序的虛擬內存空間。

此外,內存管理單元能夠減少程序的內存碎片化現象。也就是說,當程序分配並釋放內存塊後,可分配的連續內存塊的最大尺寸亦遠小於尚未分配的內存量。虛擬內存機制可以在內存分頁機制的基礎上,將多個不連續的物理內存區塊映射為一個連續的虛擬內存塊。


  1. ^ Memory management unit, 1981-12-14 [2018-08-15], (原始內容存檔於2021-05-12)