周志遠教授的作業系統 詳細的文字整理請參考 作業系統 CH8 Memory Management。
以下內容由 Claude 3.5 Sonnet 解釋作業系統的記憶體和磁碟操作。
-
基本組件:
a) 實體記憶體(RAM):
- 快速但容量有限的存儲空間
- 用於存儲正在執行的程序和數據
b) 虛擬記憶體:
- 一種抽象概念,為每個程序提供看似連續的大容量記憶體空間
- 實際上結合了實體記憶體和磁碟空間
c) 磁碟:
- 大容量但相對較慢的持久存儲設備
- 用於長期存儲數據和程序
d) 交換空間(Swap Space):
-
記憶體管理:
a) 分頁系統:
- 將實體和虛擬記憶體劃分為固定大小的頁面
- 通常每頁大小為 4KB 或 8KB
b) 頁表:
- 維護虛擬頁面到實體頁面的映射
- 由記憶體管理單元(MMU)使用來進行地址轉換
c) 按需分頁(Demand Paging):
- 只有當程序需要訪問某個頁面時,才將其載入實體記憶體
- 提高記憶體使用效率
-
進程執行流程:
a) 程序載入:
b) 執行:
- CPU 通過虛擬地址訪問數據
- MMU 將虛擬地址轉換為實體地址
c) 頁面錯誤(Page Fault):
- 當訪問的頁面不在實體記憶體中時發生
- 觸發作業系統從磁碟加載所需頁面
-
交換機制:
a) 頁面置換:
- 當實體記憶體不足時,將不常用的頁面移到交換空間
- 使用頁面置換算法(如 LRU、Clock 算法)決定哪些頁面被置換
b) 頁出(Page-out):
c) 頁入(Page-in):
-
檔案系統操作:
a) 緩存機制:
- 使用部分實體記憶體作為檔案系統緩存
- 加速檔案讀寫操作
b) 寫回(Write-back):
- 修改的數據首先寫入緩存
- 稍後再批量寫入磁碟,提高效率
c) 預讀(Prefetching):
-
記憶體保護:
- 每個進程擁有獨立的虛擬地址空間
- 使用硬體支持(如 MMU)確保進程間的隔離
- 防止未授權的記憶體訪問
-
性能優化:
a) 記憶體壓縮:
b) 大頁面(Huge Pages):
- 使用更大的頁面大小,減少頁表項,提高 TLB 效率
c) NUMA(非統一記憶體訪問):
-
實際運作示例:
假設您正在使用一個文字處理器編輯大型文檔:
-
打開程序:
- 作業系統從磁碟讀取程序代碼到記憶體
- 為程序分配虛擬記憶體空間
-
載入文檔:
- 初始只載入文檔的一部分到記憶體
- 其餘部分保留在磁碟上
-
編輯操作:
- 當您編輯可見部分時,修改直接在記憶體中進行
- 滾動到新部分可能觸發頁面錯誤,從磁碟載入新數據
-
後台操作:
- 如果系統記憶體不足,可能會將其他不活躍程序的頁面移到交換空間
- 文字處理器的自動保存功能可能會定期將更改寫入磁碟
-
保存文檔:
- 更改首先寫入檔案系統緩存
- 然後在適當的時機寫入磁碟
這個複雜的系統確保了高效的資源利用,提供了良好的用戶體驗,同時平衡了有限的實體資源和潛在的大量數據需求。作業系統不斷在速度(記憶體訪問)和容量(磁碟存儲)之間尋找最佳平衡,以提供流暢的計算體驗。