虛擬記憶體
記憶體保護(memory protection)
想像大樓裡每個房間都掛著一個小牌子:「人人可讀,但只有屋主能重新佈置」或「員工專用——住戶勿入」。任何人碰房間前,守衛都先看牌子,若無權限就把他擋回去。記憶體保護(memory protection)正是這樣:硬體在每一次存取時檢查執行中的程式碼有沒有被允許讀、寫或執行目標分頁,沒有就擋下。
具體來說,保護與轉換同行。每個分頁表項都帶著權限位元——通常是讀、寫、執行各自的旗標,加上一個使用者/監督者旗標,說明一般使用者模式的程式碼到底能不能碰這頁。每次存取時,MMU 拿請求的操作對照這些位元:寫一個唯讀分頁、執行一個不可執行分頁、或使用者程式碰一個僅限監督者的分頁,都會引發保護錯誤陷入作業系統(通常會終止違規的程式)。因為權限是逐頁的,做翻譯的同一套機制也順帶執法,不必額外查找。
為何重要:記憶體保護把「每個程式都有自己的位址空間」從單純的便利,提升為一項安全保證。它防止一個行程讀取或破壞另一個行程的記憶體、阻止程式覆寫自己的程式碼、並支撐起整道使用者/核心邊界,讓應用程式無法踐踏作業系統。把分頁標為不可執行(讓注入的資料無法當程式碼跑)與唯讀(讓常數與程式碼無法被竄改),都是直接建立在這些位元上的具體防禦。保護不是另外加裝的子系統——它就編織在位址轉換本身之中。
一次緩衝區溢位試圖越過陣列、寫入一個唯讀的程式碼分頁。MMU 看到該頁的寫位元為 0,引發保護錯誤,作業系統終止該程式——一次破壞在硬體邊界被擋下。
逐頁的權限位元,由 MMU 在每次存取時檢查,正是程式之間的那道牆。
保護與轉換共用同一張分頁表、同一次查找——它們不是兩道分開的步驟。這正是為何硬體強制的隔離對每次存取幾乎免費,但也是為何它完全仰賴作業系統把權限位元設對。
又称
另见