第三章 內存管理
3.1,多層次的存儲系統:緩和存儲器的訪問速度與處理機運行速度差異大的問題。
- CPU寄存器 速度與處理機相當,很貴
- 主存(內存)
高速緩存 緩和處理機與內存訪問速度不匹配。
主存儲器
磁盤緩存 緩和內存與外存(磁盤IO)速度不匹配。
- 輔存
3.2,程序的裝入與連接:
3.2.1,程序在系統上運行的步驟:
①編譯:將源程序編譯成若干目標模塊
②連接:將一組模塊與所需庫函數連接形成裝入模塊
③裝入:將裝入模塊裝入內存--將邏輯地址轉化為邏輯地址
- 絕對裝入
- 可重定位裝入:早期批處理系統
- 動態運行時裝入:【重定位寄存器】,現代操作系統,
3.3,內存管理的功能:
①內存空間的分配與回收
②內存空間的擴充(虛擬內存)
③地址轉換:邏輯地址->物理地址
- 絕對裝入
- 可重定位裝入
- 動態運行時裝入
④存儲保護:
- 保證各進程在自己內存空間運行,不會越界。
- 方式:<1>上下限寄存器<2>利用重定位寄存器,界地址寄存器。
3.4,物理內存分配:
3.4.1,連續地址分配與管理:
①單一連續分配:單道程序,單任務操作系統。
②固定分區算法:(多道程序系統)
將整個用戶空間划分若干固定大小區域,每個區域只裝入一道作業。【不產生外部碎片,產生內部碎片】
③動態內存分配:--可變分區分配。
<1>數據結構:空閑分區表,空閑分區鏈。
<2>內存的分配與回收:
- 分配:若一個分區大小>=需要大小,則此空閑分區可分配給調用者,剩余空間如果小於事先規定的最小切割單位,
則不切割。剩余空間放回空閑鏈。
- 回收:因為分配時存在分割,避免內存碎片化,回收時要合並
- 若回收分區與前一個空閑分區相鄰,合並。
- 若回收分區與后一個空閑分區相鄰,合並。
- 若與前后空閑分區都相鄰,合並。
④動態分區算法:
- 順序搜索:
<1>首次適應算法:
- 空閑分區按地址遞增排列
- 按空閑鏈首地址遍歷,遇到第一個能容納的分區就分配
- 傾向於用內存地址部分
<2>循環首次適算法:
- 每次不從空閑鏈首開始遍歷,從上一次分配分區的以一個分區開始遍歷。
- 缺乏大分區
<3>最佳適應算法:
- 將鏈或表按從小到大遞減方式排序
- “最佳”指所有滿足分配分區(空間>=所需空間)中空間最小的。
- 留下很多難以利用的碎片
<4>最壞適應算法:
- 將鏈或表按從大到小排序
- 從滿足分配的分區中挑一個最大的。
- 大進程(需要內存多的)不友好。
- 索引分配:
<1>快速適應算法:
- 又稱為分類搜索法,根據分區大小划分不同的空閑列表,分配時先找到能容納的最小空閑列表,再區列表中
找分區。
- 空間換時間
3.4.2,非連續物理內存分配:
①分頁式儲存管理:
<1>結構
- 頁可以裝入不連續的物理塊中
- 頁面大小要適中,太小--頁表過長,換頁頻繁。太大--頁內碎片。(2的冪次方,1K-8K)
- 地址結構: 【頁號|偏移量】
- 頁表:記錄頁號和內存中的物理塊號。【頁表是順序結構的(數組),頁號即下標表示了,邏輯地址/頁面大小】
<2>地址變換:
將邏輯地址轉換為邏輯地址,通過邏輯地址計算出頁號,從頁表中找到快號,物理地址:塊號+偏移量。
<3>TLB:快表,具有塊表(高速緩存,)的地址轉換結構。
<4>多級頁表:所管理的內存大,頁表過長,無夠大連續空間存放頁表,對頁表進行分頁。
②分段式儲存管理:
<1>結構:
- 段:連續空間,不同段分散在不連續的地址塊。根據模塊將程序分為若干段,每段段內地址從0-段長-1。
- 地址結構:【段號|段內地址-偏移量】
- 段表:記錄段長和和段起始地址。
- 尋址方式:根據段號在段表中找到起始地址,判斷有無越界,加上偏移量,得到物理地址。
<2>與分頁式存儲的區別:
- 頁是信息的物理單位,實現內存的離散分配,減少碎片,完全是系統行為。
段是信息的邏輯單位,更好的滿足用戶需求。
- 頁的大小是固定的,由系統決定,段長是不固定的,決定於程序。
- 分頁的用戶程序地址空間是一維的,分頁是系統行為。分段的用戶程序地址空間是二維的,需給出段號和偏移量。
- 分段的用戶程序容易實現信息的共享和保護。
③段頁式存儲管理:
<1>先對程序分若干個段,再對每個段分頁,邏輯地址【段號|頁號|頁內地址】
<2>段表:【段號|頁表大小|頁表始址】
3.4,虛擬存儲器:
- 具有請求調入功能和置換功能,能從邏輯上對內存容量加以擴充的一種存儲器系統,其邏輯容量由內存容量和外出容量之和所決定
其運行速度接近於內存速度,而每位成本卻又接近於外存。
- 傳統存儲管理方式的特征:
①一次性:作業必須一次性全部裝入內存后才開始運行。
②駐留性:一旦作業裝入內存,會一直駐留在內存,直至作業運行結束。
- 局部性原理:
①時間局部性:如果執行了程序中某條指令,不久之后這條指令很可能再次執行。
某個數據訪問,不久后很可能再次被訪問。(因為程序中有大量循環)
②空間局部性:一旦程序訪問了某個存儲單元,不久之后其附近的存儲單元很可能被訪問。(因為很大數據是連續存放的)
③局部性原理的應用:
<1>高速緩存技術思想,將近期會頻繁訪問的到的數據放到更高速的存儲器中,暫時用不到的數據放在更低的存儲器中。
<2>TLB快表,
- 特性:
①多次性:一個作業的數據和程序允許分成多次調入內存。
②對換性:一個作業中的程序的數據,無需在作業運行時一直常駐內存,可換進換出
③虛擬性:從邏輯上擴充內存容量
- 請求分頁式存儲管理方式:
①請求頁表機制:【頁號|物理塊號|狀態|訪問字段|修改為位|外存地址】
狀態標識該頁是否在內存,訪問字段記錄一段時間內被訪問次數,修改位,若被修改換出內存時需要寫回外存。
②缺頁中斷機制:
- 當訪問某頁時,若該頁不在內存中,產生缺頁中斷。
- 中斷處理:將目標頁調入內存或換出頁面。
- 缺頁中斷為內中斷
- 一條指令可能產生多次缺頁中斷
③地址轉換機構
- 訪問塊表,命中則分獲取物理地址
- 未命中,查頁表,在頁表,則計算物理地址
- 未查到,缺頁中斷,進行相應置換。
- 頁面置換算法:
①最佳置換算法:理論上的,無法實現,所選取的淘汰頁面將是以后永遠不使用的。
②先進先出置換算法FSFO:最直觀,性能最差,應用極少
③LRU,(最近最久未使用)算法:賦予每個頁面對應頁表項中,用訪問字段記錄該頁面自上次被訪問以來經歷的時間t,當需要淘汰時,
選一個最大的t淘汰。
④Clock置換算法,將所有頁面,當頁面被分為后,訪問位設1,置換算法選擇淘汰頁時,遍歷隊列檢測訪問位,若是0,則換成。
若是1,將其置0,循環遍歷直到找到0;
最多經歷兩輪即可找到淘汰頁。
⑤改進Clock置換算法:增加一個因素:置換代價。將一個頁面換出時,若頁面數據已修改,需要重新寫回外存。
訪問位A,修改位:M
<1>A=0,M=0,最近未被訪問,也沒被修改,最佳淘汰頁。
<2>A=0,M=1,表示最近未被訪問,被修改,並不是很好的淘汰頁
<3>A=1,M=0,最近已被訪問,未被修改,該頁可能再被訪問。
<4>A=1,M=1,最近已被訪問,已被修改,該頁可能再被訪問。
【1】遍歷隊列,尋找第一類頁面,找到則換出。
【2】1未找到,則進行第二輪,尋找第二類,並將掃描過的頁面的訪問A該為0,找到則換出
【3】2未找到,重復第一步,若失敗,重復第二步,這一步一定能找到A=0,M=1的頁面。
最多經過4輪能找到。
第四章 外存管理(磁盤管理+文件管理)
4.1,相關名詞:
- 磁盤:外存的主要構成,存放大量文件,磁盤IO速度高低,直接影響系統性能。
- 盤面:磁盤設備(硬盤)中包括多個物理盤片,每個盤片有一個或兩個盤面。
- 磁道:每個盤面有若干磁道,磁道間有“間隙”Gap。
- 柱面:所有盤面的相同位置磁道構成的一個住面。
- 扇區:每條磁道又被從邏輯上划分成若干扇區,一個扇區稱為一個盤塊或數據塊。
4.2,磁盤訪問時間:
①尋道時間:將磁頭移到指定磁道所花費的時間。
②旋轉延遲時間:將指定扇區移動到磁頭下面的時間,不同磁盤旋轉速度不一樣。
③傳輸時間:指把數據從磁盤讀出或向磁盤寫入所經歷的時間,--和磁盤旋轉速度有關。
- 其中①和②占了絕大多時間。
4.3,磁盤調度算法:
- 為了減少對文件的訪問時間,由於磁盤訪問時間主要花在尋道上,即調度算法目的是使磁盤平均尋道時間最短。
①先來先服務FCFS:
②最短尋道時間優先SSTF:保證每次尋道時間是當前隊列中最短的,但無法保證平均尋道時間最短。
- 貪心,只選擇眼前最優的,可能導致飢餓。
③掃描算法SCAN:最短尋道時間優先實際上是一種優先級算法,優先級低的進程易飢餓。
- 掃描算法不僅考慮下一個訪問磁道與當前磁道的距離,還考慮磁頭當前的移動方向。如:當前磁頭正由里向外移動
應當是再本磁道外,且距離最近的優先。掃描到最外再向里掃描。
- 電梯調度算法。
-:對各個部分磁道響應頻率不同,邊緣部分,折返時又會遍歷一遍,而中部的遍歷時間相對較久。
④Lock算法:掃描算法中,磁頭每次要遍歷所有磁道,當像一個方向遍歷時,隊列中已經沒有該方向上磁道的訪問了,這時磁頭就可以轉向另一個方向遍歷了。
Lock算法(觀望)就是解決這個問題的。
⑤循環掃描算法C-SCAN:解決SCAN算法中對各個磁道響應頻率不同。規定磁道只沿一個方向移動,到達最端后直接返回起點遍歷。
⑥ C-Look算法:只有磁頭移動的方向上沒有請求了,直接返回起點。
4.4,磁盤存儲器(外存)管理:
4.4.1,外存分配方式(外存的組織/管理方式):
①連續分配方式:將每一個文件分配一組相鄰的盤塊,通常是同一個磁道上。讀寫時不必移動磁頭。
- 順序文件結構--順序文件
+:易訪問,順序訪問速度快
-:<1>內存碎片化,<2>需要預知文件大小, <3>刪除文件不靈活 <4>不能動態增長文件。
②連接分配:將文件裝入多個離散的盤塊,再通過連接指針連接成鏈表。
- 隱式連接:文件控制塊 FCB中包含指向第一個和最后一個盤塊的指針。每個盤塊有指向下一盤塊的指針。
--只適合用於順序訪問,即鏈表的隨機訪問問題。
- 顯示連接:建立一張連接表,將各物理塊的指針都放入,整個磁盤只設置一張。每個文件的第一個
盤塊地址作為文件地址放入FCB中。找第i塊時,在FAT中遍歷找到其物理塊號,再去訪問。
<1>FAT技術(文件分配表),引入卷(CDEF盤,每個)
<2>MFT
③索引分配:顯示連接雖然解決了,離散分配隨機訪問的問題,但也帶來了新問題:<1>不支持高效直接存取。<2>FAT占用較大空間
- 單級索引:為每個文件分配一個索引塊,順序存放該文件用到的的盤塊號,FCB中存放文件索引塊的地址,不用將FAT調入內存,文件較大時適合。
+:<1>支持直接訪問,如某文件第i塊,在索引塊中找到盤塊號得到物理地址即可。<2>無內存碎片。
-:小文件(只占10幾個塊以內)采用索引分配(一個塊可以存放數百個塊號)
- 多級索引:每一個索引盤塊,容納的盤塊號數量有限,大文件可能需要很多盤塊號。---多級索引。
+:大大加快文件查找速度。
-:<1>所需啟動磁盤的次數隨索引級數的增加而增多,<2>實際情況:小文件居多,大文件較少,采用多級索引分配效果不理想。
- 增量式索引分配:對小,中,大,特大文件,采用不同分配方式。若盤塊大小為1~4KB。
- 對於小文件(少於10個盤塊1~10K,4~40K):將所有盤塊地址都放入FCB--直接尋址。
- 中等文件(11~256K,5~4MB):可采用單級索引分配--一次間址。
- 大型文件:采用多級索引,--二次/多次間址。
4.5,文件管理:
4.5.1,文件分類
①系統文件。用戶文件。庫文件。
②源文件(ASCII或漢字)。目標文件(由源文件編譯生成)。可執行文件.exe
③只執行文件。只讀文件。讀文件。
④普通文件。目標文件。特殊文件(指系統中各類IO設備,為統一管理,系統將所有IO設備視為文件。
4.5.2,磁盤分區:文件區+目錄區。
①文件目錄:一種數據結構,
- 功能:<1>按名存取<2>提高檢索速度<3>文件共享<4>允許文件重名(不同路徑下)
- 為構建目錄,需要對文件設置用於描述和控制的文件的數據結構。FCB
②FCB文件控制塊:包含文件基本信息:<1>文件名<2>物理位置<3>類型,大小<4>文件結構
③索引節點:改進FCB,提高索引搜索效率。
- 存儲除文件名外的所有的信息。
- 索引時用到的信息較少,不用將目錄加載如內存
- 目錄中只含有文件名和指向文件索引節點的指針。
4.5.3,文件的邏輯結構:
- 無結構文件:由一系列二進制流或者字符流組成的“流文件”。.txt
- 有結構文件:由記錄組成。如excel,sql。記錄又可分為定長記錄,變長記錄。
<1>順序文件。<2>索引文件。<3>索引順序文件。
①順序文件:
- 鏈式存儲:可變長/定長記錄都不能實現隨機存取。
- 順序存儲:
可變長記錄:無法實現隨機存取
定長記錄:可實現隨機存取
串結構:無法快速找到某關鍵字對應的記錄。
順序結構:可以快速找到某關鍵字對應的記錄。
②索引文件:解決可變長記錄文件查找慢的問題。
- 每個文件建立一張索引表,索引表表項為文件中的記錄。
- 適用於對信息的及時處理要求比較高的場合。
- 可以對不同數據項建立不同索引表。
③索引順序文件:
- 讓每一個記錄對應一個索引表表項太過浪費。
- 讓一組記錄對應一個索引表項。
- 多級索引。
4.5.4,文件的物理結構:外存中分配/組織方式
①連續分配:每個文件在磁盤上占用一組連續的塊。
+:<1>讀寫速度快,磁頭移動距離短。<2>可隨機訪問
-:<1>文件擴展不方便,(如文件后無足夠大連續空間只能移動位置)<2>外存碎片。
②連接分配:
- 隱式連接:FCB中有記錄起始塊號和結束塊號。
- 每個塊有指向下一塊的指針。(鏈表不支持隨機訪問問題)
+:方便拓展,不產生碎片
- 顯式連接:維護文件分配表FAT,表項把塊號和下一塊塊號記錄下來。
- 一個磁盤維護一張FAT,開機后,FAT讀入內存並常駐內存。
+:支持隨機訪問。不產生碎片
-:維護FAT需要空間。
③索引分配:允許文件離散的分配在磁盤中,為每個文件建立一張索引表,記錄文件的各個邏輯塊對應的物理塊號。記錄索引表的盤塊叫索引塊
- FCB中存放索引塊的地址。
+:支持隨機訪問,拓展方便,
-:索引需要一定空間
- 若文件太大一個所有塊存不下:
<1>連接方案:每個索引塊有指向下一個索引塊的地址
<2>多級索引
<3>混合索引:避免小文件情況下浪費空間。
4.6,文件存儲空間管理:磁盤空閑區管理:
4.6.1:存儲空間的划分:
①文件卷:(邏輯卷概念)CDEF盤,
- 一個文件卷可以由多個物理磁盤組成。
- 一個物理磁盤可以划分為多個卷。
②每個卷可分為
目錄區:存放:FCB,索引節點,空閑表,超級塊等
文件區:存放文件。
4.6.2,空閑分區管理方法:
①空閑表法:記錄每一個連續空閑分區的起始塊號和塊數,
- 適用於文件文件物理結構為連續分配方式
- 分配與回收時要合並分區,與內存分配類似。
②空閑鏈表法:
- 空閑盤塊鏈:以盤塊為單位鏈起來。一個鏈表。

+:分配回收簡單
-:鏈很長
- 空閑盤區鏈:將空閑區鏈成一個鏈,盤區是相鄰的空閑盤塊鏈(標明盤區大小)
- 分配與回收時要合並分區,與內存分配類似

③位示圖法:用一位二進制,表示一個盤塊的使用情況0-空閑,1-已分配
- 用一個二位數組表示磁盤區的盤塊分配情況。
④成組連接法:linux系統采用。
- 文件卷的目錄區中設置一個超級塊(鏈表頭,類似索引塊),系統啟動會將超級塊讀入內存。
- 超級塊中記錄了下一組空閑盤塊的個數和盤塊號。
- 類似空閑盤區鏈,只是規定每個鏈的長度,如100 個,每個鏈中的盤塊是離散的
- 盤塊的分配與回收采用頭插法。

第五章 IO管理
5.1,IO系統功能:
①方便用戶使用IO設備
②提高CPU和IO設備的利用率
③用戶在共享設備時提高方便
5.2,IO設備分類
①按使用特性:
- 存儲設備:也稱外存/輔存
- IO設備,鍵盤,鼠標,掃描儀,視頻攝像,打印機,繪圖儀
- 網絡通信設備
②按傳輸速率:
- 低速:鍵盤
- 中速:打印機
- 高速:磁帶機,光盤機
5.3,IO控制器
- 接收識別CPU發出的命令
- 向CPU報告識別狀態
- 數據交換
- 地址識別
5.4,IO控制方式:控制IO設備的讀和寫
①程序直接控制方式:
- CPU向控制器發出指令,啟動設備,狀態:未就緒
- (啟動完成之前)輪詢其他控制器狀態,就緒了就可以傳送數據,將數據讀入CPU寄存器
- 啟動完成,報告自己狀態。(已就緒)
- 發現設備已就緒,將數據讀入CPU寄存器
+:實現簡單
-:CPU干預頻繁,CPU與IO設備串行工作,利用率低
②中斷驅動方式
- 由於IO設備速度慢,CPU發出讀寫命令后,將等待IO進程阻塞,先切換其他進程執行。當IO完成后,控制器發出一個中斷信號,CPU檢測中斷信號
進行進程調度,處理等待IO進程。
- CPU執行完每個指令都會檢查中斷
- 中斷處理耗時,太頻繁降低利用率。
+:CPU可以與IO並行,降低CPU干預
-:頻繁中斷會消耗CPU時間
③DMA方式:直接存儲器方式
- 數據傳送以塊為單位
- 數據的流向從設備直接放入內存,或內存到設備
- CPU干預少,只在開始和結束時干預
+:以塊為單位傳輸數據,CPU干預進一步降低
-:CPU每發出一條指令,只能讀/寫一個或多個連續的塊。離散的數據塊要多條指令
④通道方式:--一種硬件,“低配CPU”專門處理IO的處理器,能識別通道指令
- CPU干預低,一次給通道一組讀寫任務,完成后才中斷,請求CPU干預
- 數據傳輸單位:一組數據塊
+:CPU通道,IO設備可並行工作,資源利用率高。
-:實現復雜,需要專門的硬件支撐
5.5,IO系統的層次結構:
①用戶層IO軟件 實現與用戶交互的接口,用戶可直接調用該層提供與IO相關的庫函數,對設備進行操作
②設備獨立性軟件 用於實現用戶程序與設備驅動器的統一接口
③設備驅動程序 與硬件直接相關,用於具體實現系統對設備發出的操作指令
④中斷處理程序 用於保存被中斷進程的CPU環境
⑤硬件
5.6,IO核心子系統功能:
①假脫機技術:SPOOling
- 脫機技術:用外圍控制機和磁帶緩解紙帶與CPU之間的速度差
- 假脫機:用軟件的方式模擬外圍控制機模擬假脫機技術
- 實現共享獨占設備
②設備分配與回收
<1>設備:
- 獨占設備:打印機
- 共享設備:磁盤
- 虛擬設備:SPOOLing技術的共享打印機
<2>分配方式:
- 安全分配方式:一個進程一次只能使用一個設備,破壞“請求保持條件”,不死鎖。
分配IO的進程將阻塞,CPU與IO設備只能串行工作
- 不安全分配方式:一個進程可以使用多個設備
效率高,但可能會引發死鎖
- 靜態分配:進程運行前為其分配所需的全部資源,不滿足則阻塞,滿足則運行結束釋放所有資源
不發生死鎖
- 動態分配:動態申請設備資源。
③通道技術
- 一個通道可以控制多個控制器
- 一個控制器可控制多個設備
5.7,緩沖區管理:
- 緩沖區:一個內存區域,可有專門的硬件組成,也可利用內存作為緩沖區。
- 緩沖區作用:
<1>緩和CPU與IO設備之間速度不匹配的矛盾
<2>減少CPU的中斷頻率,放寬CPU中斷響應時間限制
<3>解決數據粒度不匹配問題
<4>提高CPU與IO設備之間的並行性
- 單緩沖:在內存中分配一個緩沖區
- 雙緩沖:交替使用,(防止出現內存或CPU等待緩沖區寫滿)
- 循環緩沖區:將多個大小相等的緩沖區連接起來
- 緩沖池:由系統中的公用緩沖區組成
