周志遠教授的作業系統 詳細的文字整理請參考 作業系統 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(非統一記憶體訪問): 
- 
實際運作示例: 
假設您正在使用一個文字處理器編輯大型文檔:
- 
打開程序: 
- 作業系統從磁碟讀取程序代碼到記憶體
- 為程序分配虛擬記憶體空間
 
- 
載入文檔: 
- 初始只載入文檔的一部分到記憶體
- 其餘部分保留在磁碟上
 
- 
編輯操作: 
- 當您編輯可見部分時,修改直接在記憶體中進行
- 滾動到新部分可能觸發頁面錯誤,從磁碟載入新數據
 
- 
後台操作: 
- 如果系統記憶體不足,可能會將其他不活躍程序的頁面移到交換空間
- 文字處理器的自動保存功能可能會定期將更改寫入磁碟
 
- 
保存文檔: 
- 更改首先寫入檔案系統緩存
- 然後在適當的時機寫入磁碟
 
這個複雜的系統確保了高效的資源利用,提供了良好的用戶體驗,同時平衡了有限的實體資源和潛在的大量數據需求。作業系統不斷在速度(記憶體訪問)和容量(磁碟存儲)之間尋找最佳平衡,以提供流暢的計算體驗。