虛擬記憶體與記憶體映射

記憶體管理單元(MMU)

/ EM-EM-YOO /

MMU 是 CPU 內部一塊專責的硬體,它在每一次記憶體存取時自動完成位址轉譯,不需要作業系統或你的程式逐次介入。它是矽做成的大樓管理員:虛擬位址一被使用,MMU 就查出它真正住在哪,並把存取轉送到正確的實體頁框。

具體來說,當 CPU 執行一條讀寫記憶體的指令時,它產生的位址是虛擬的。在請求抵達 RAM 之前,MMU 攔截它、把它切成分頁號碼與偏移量、找出頁框(先查 TLB,必要時再走訪分頁表)、檢查權限位元,然後送出實體位址。若一切正常,存取完成,軟體毫無察覺。若該頁不存在或權限禁止此次存取,MMU 不會默默失敗——它引發一次錯誤並把控制權交給作業系統,由作業系統決定要修復它(載入該頁)或終止程式(非法存取)。

轉譯之所以能既隱形又快速,完全是因為它是硬體。為每一次載入與儲存在軟體裡做這件事會慢得不可思議。作業系統並不執行轉譯;它建好表並處理例外,而 MMU 做那永不停歇、逐次存取的工作。這個分工——作業系統定策略、MMU 一秒上億次地執行——正是虛擬記憶體得以實用的核心。

當你的程式碼執行 mov eax, [rbx]、rbx 裡裝著 0x404820 時,CPU 把 0x404820 交給 MMU;MMU 把它轉譯成例如實體 0x71c820,並把那個字組取進 eax——全在硬體裡完成,沒有任何系統呼叫。

MMU 轉譯每一次存取;作業系統只負責建好表。

作業系統並不親自轉譯位址——它設定 MMU(填好分頁表、載入 cr3),由 MMU 做事。當 MMU 無法轉譯或權限不符時,它引發一次錯誤;作業系統處理那個錯誤,但例行的轉譯不是它做的。

又称
MMU記憶體管理單元