主記憶體:配置、連結與分段
基底與界限暫存器(base and limit registers)
想像旅館給客人一間房:「你的房間從 305 號門開始,你有 3 間房。」兩個數字就完整描述了客人的空間——它從哪裡開始、有多大。客人可以在裡面自由走動,但保全會在邊界處攔下他。基底暫存器是「你的空間從哪裡開始」,界限暫存器是「你的空間有多大」。兩者合在一起,就是最簡單的記憶體保護與轉譯方案。
具體來說,基底(或重定位)暫存器存放行程被允許使用的最小實體位址,而界限暫存器存放它區域的大小。在每一次記憶體存取時,硬體依序做兩件事:先檢查邏輯位址是否小於界限;若不是,就以定址錯誤觸發陷阱交給作業系統。若檢查通過,就把基底加到邏輯位址上,形成真正的實體位址。所以一個住在基底 90000、界限 5000 的行程,可以合法產生邏輯位址 0 到 4999,它們變成實體 90000 到 94999,此範圍以外都不行。
為什麼重要:這是理解記憶體保護的教科書起點。關鍵在於,只有作業系統(在核心模式下)能載入這些暫存器;使用者程式不能,所以它無法給自己更多記憶體、也無法移動自己的邊界。在環境切換時,作業系統為下一個行程重新載入它們。這個方案簡單又快,但假設每個行程佔據單一一塊連續區塊——這正是它的主要限制,後來由分頁和分段加以放寬。
行程 P 有基底 = 90000、界限 = 5000。存取邏輯 4999 → 檢查 4999 < 5000 通過 → 實體 94999,允許。存取邏輯 5000 → 檢查 5000 < 5000 失敗 → 觸發陷阱,作業系統以分段/定址錯誤結束 P。
兩個暫存器同時提供重定位(加基底)與保護(檢查界限)。
載入基底與界限暫存器必須是特權操作——若使用者行程能更改它們,保護就會崩潰。這就是記憶體保護仰賴雙模式運作的原因。
又称
另见