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