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

記憶體管理(memory management)

想像一整間辦公室的人要共用一面大白板。每個人都需要空間寫字,沒有人應該擦掉別人的筆記,而當某個人離開時,他的空間應該釋放給下一個人。電腦的記憶體(RAM)就是那面白板,執行中的程式就是那些人,而記憶體管理就是作業系統中負責分配空間、記錄誰用了哪一塊、並確保沒有人覆寫到別人的那一部分。

具體來說,作業系統必須同時做好幾件事。它必須追蹤實體記憶體中哪些部分正在使用、哪些是空閒的。它必須決定程式載入時要放在哪裡,並且把程式所認知的位址(它自己私有的編號)轉譯成晶片裡真正的硬體位址。它必須保護每個程式,使得某個程式的錯誤不會破壞另一個程式或作業系統本身。而由於 RAM 很少足以容納一切,它還必須決定哪些留在記憶體、哪些要挪走。本領域涵蓋這一切的基礎:位址、繫結、負責轉譯的硬體、記憶體如何被切成片段,以及把原始碼變成可執行影像的工具。

為什麼重要:記憶體是每個行程都要爭奪的兩大資源之一(另一個是 CPU 時間),而且是出錯時最危險的那個。沒有記憶體管理,許多行程根本無法安全地共用一台機器。請注意,本領域是經典的、針對實體記憶體的基礎;分頁(把記憶體切成固定大小的片段)這個更聰明的技巧,以及虛擬記憶體比 RAM 還大的錯覺,都是建立在這些觀念之上,會另外說明。

有三個程式正在執行:瀏覽器用了 800 MB、文字編輯器用了 50 MB、音樂播放器用了 120 MB。作業系統會精確記錄每個程式擁有哪些實體位元組,拒絕讓編輯器讀取瀏覽器的記憶體,並在你關閉音樂播放器的那一刻收回它佔用的每一個位元組。

讓多個行程安全地共用同一塊實體 RAM,就是它全部的工作。

記憶體管理不只是找出空閒空間;保護(讓每個行程待在自己的區域內)同樣是核心,而它仰賴硬體協助——光靠軟體在每一次記憶體存取時都做檢查,代價太高。

又称
main-memory management主記憶體管理