第五章 存儲器管理 學習筆記:核心概念與系統服務實踐
存儲器管理是操作系統的核心功能之一,它負責高效、安全地管理計算機系統的主存(內存)資源。本章內容不僅涉及內存分配與回收的理論,更與計算機系統底層的服務緊密相關。
一、存儲器管理的主要目標
- 抽象與隔離:為每個進程提供獨立的、連續的虛擬地址空間,隱藏物理內存的細節,并確保進程間互不干擾。
- 高效利用:通過多種技術(如分頁、分段)提高內存利用率,減少碎片。
- 擴展與共享:利用虛擬內存技術擴展可用內存空間,并允許安全地共享代碼與數據。
- 保護與安全:防止進程非法訪問其他進程或操作系統內核的內存區域。
二、核心概念與機制
- 地址綁定與地址空間
- 邏輯地址(虛擬地址):由CPU生成的地址,存在于進程的視角中。
- 地址綁定時機:編譯時、加載時、運行時。現代操作系統普遍采用運行時綁定,通過內存管理單元(MMU) 動態地將邏輯地址轉換為物理地址。
- 連續內存分配
- 固定分區與動態分區:用于多道程序環境。動態分區更靈活,但會產生外部碎片(分區之間無法利用的小塊空閑區)。
- 緊湊技術:通過移動進程在內存中的位置來合并空閑區,消除外部碎片,但開銷大。
- 非連續內存分配:分頁與分段
- 基本分頁:將物理內存和邏輯地址空間劃分為固定大小的頁(幀)。通過頁表完成地址轉換。優點是無外部碎片,但有少量內部碎片(頁內未用滿的部分)。
- 基本分段:按照程序的邏輯模塊(代碼段、數據段、堆棧段)劃分地址空間。支持更自然的保護與共享,但會產生外部碎片。
- 段頁式存儲:結合分段和分頁的優點,先分段,段內再分頁。是現代主流操作系統(如Linux)采用的復雜但高效的模式。
- 虛擬內存技術
- 核心思想:將部分暫時不用的程序和數據從內存交換到外存(如硬盤的交換區/頁面文件),從而在邏輯上擴展可用內存容量。
- 請求分頁:是實現虛擬內存的典型方案。僅在需要時(發生缺頁中斷)才將頁面調入內存。
- 頁面置換算法:當需要調入新頁面而內存已滿時,決定換出哪個舊頁面。常用算法包括:
- 先進先出(FIFO):簡單,但可能性能差(Belady異常)。
- 最近最久未使用(LRU):性能好,接近OPT,但實現開銷較大。
- 時鐘算法:LRU的近似,實現簡單有效,被廣泛采用。
三、與計算機系統服務的深度關聯
存儲器管理并非孤立運行,它深刻依賴于并影響著整個計算機系統的服務層:
- 硬件支持服務:MMU和TLB(快表) 是地址轉換的硬件加速器。操作系統必須正確配置和管理這些硬件,以提供高效的地址轉換服務。
- 中斷與異常處理服務:缺頁中斷是虛擬內存工作的核心驅動力。當CPU訪問的頁面不在內存時,MMU會觸發缺頁中斷。操作系統內核的中斷服務程序(ISR) 必須能高效處理此中斷:從磁盤讀入頁面、更新頁表、可能執行頁面置換,最后重新執行被中斷的指令。這是一個典型的系統服務響應過程。
- 文件系統服務:虛擬內存的“后備存儲”(交換空間)通常以特殊文件(如Linux的swap分區或文件)的形式存在。操作系統需要調用文件系統的底層讀寫服務來完成頁面的換入換出操作。
- 進程調度與上下文切換服務:當發生缺頁中斷并進行I/O操作時,當前進程會被阻塞。操作系統調度器會切換到另一個就緒進程執行,以實現CPU與I/O的并行,提高系統整體吞吐量。這體現了存儲器管理與進程調度的協同。
- 系統調用服務:應用程序通過系統調用(如
malloc/free、mmap)動態申請和釋放內存。這些調用最終會陷入內核,由操作系統的存儲器管理模塊提供服務,在進程的虛擬地址空間中分配或回收區域,并可能相應地調整頁表結構。
- 保護與安全服務:每次內存訪問都經過MMU和頁表的檢查。頁表項中的保護位(讀/寫/執行權限)確保了內存訪問的安全性。非法訪問會觸發異常(如段錯誤),由操作系統的異常處理服務接管,可能終止違規進程。這是系統安全的基礎屏障。
四、
存儲器管理是連接硬件、內核服務與上層應用的橋梁。它通過精妙的軟硬件協同機制,將有限的物理內存抽象為近乎無限的、易于使用的虛擬空間,同時保障了效率、共享與安全。理解其原理,特別是它與中斷、I/O、調度等系統服務的交互,是深入理解操作系統如何作為一個整體提供“計算機系統服務”的關鍵。學習本章時,應著重把握從“邏輯地址”到“物理地址”的完整轉換鏈條,以及當“缺頁”發生時,操作系統內核中一系列服務是如何被串聯起來協同工作的。