主記憶體:配置、連結與分段

記憶體管理單元(the memory management unit)

/ MMU = "em-em-yoo" /

想像一位飛快又不知疲倦的翻譯員,站在一個只會說「程式語言」的人和一個只懂「真實貨架號碼語言」的倉管員之間。每當程式說「取貨號 1000」,翻譯員立刻把它轉換成真實貨架並傳達過去,若程式要求一個它無權碰的貨架,就拍掉它的手。記憶體管理單元(MMU)就是那位翻譯員,以硬體形式內建在 CPU 裡。

具體來說,記憶體管理單元坐落在 CPU 與記憶體之間,在程式執行時對每一次記憶體存取,以硬體速度執行邏輯到實體的轉譯。在最簡單的設計裡,它持有一個基底(重定位)暫存器和一個界限暫存器:它檢查邏輯位址是否低於界限(否則就觸發陷阱,視為非法存取),然後加上基底以產生實體位址。在分頁系統中,記憶體管理單元改為把位址拆成頁號和偏移,並在分頁表中查找該頁。無論哪種方式,程式都只產生邏輯位址;是記憶體管理單元讓它們成真。

為什麼重要:沒有記憶體管理單元,執行時位址繫結會慢到不可行——作業系統得用軟體轉譯每一次參考。記憶體管理單元也是記憶體保護的所在:因為它在每次存取時都檢查界限,一個行程在物理上就無法伸到它被分配區域之外,這正是讓有錯誤或惡意的程式無法破壞其他程式的關鍵。它是讓安全的多元程式規劃變得可行的硬體基礎。

記憶體管理單元持有基底 = 90000、界限 = 5000。程式發出邏輯位址 1200:由於 1200 小於 5000,記憶體管理單元輸出實體 91200。若程式發出 6000,記憶體管理單元見 6000 已達或超過 5000,就觸發陷阱交給作業系統,而非碰觸記憶體。

在每一次存取時轉譯並做界限檢查——以硬體速度進行。

記憶體管理單元只負責邏輯到實體的轉譯;它不是快取。而且它的保護程度取決於作業系統載入的界限/分頁表值——作業系統必須在每次環境切換時正確設定它們。

又称
MMU記憶體管理單元