1. 程式人生 > >【作業系統】第四、五章 儲存器管理和虛擬儲存器

【作業系統】第四、五章 儲存器管理和虛擬儲存器

一、儲存器的層次結構
儲存部件的層次
CPU暫存器
————————
快取記憶體:一種比記憶體塊的儲存裝置。將短時間內經常訪問的部分資料從記憶體放到快取記憶體中,減少CPU訪問記憶體的時間,是基於程式區域性性。
————————
主存 :儲存程序執行時的程式和資料
磁碟快取:記憶體的一部分,將頻繁使用的一部分磁碟資料資訊預讀入在磁碟快取,
減少磁碟讀寫時間
————————
磁碟
可移動介質
1.程式的裝入和連結
建立程序的第一件事:將程式和資料裝入記憶體。
(1)程式進入記憶體的一般過程
a.編譯程式:將使用者原始碼編譯成若干個目標模組
b.連結程式:將形成的一組目標模組及它們需要的庫函式

連結在一起,形成一個完整的裝入模組
c.由裝入程式將裝入模組裝入記憶體,構造PCB,形成程序,開始執行(使用實體地址)。
(2)程式裝入中的地址處理
1)絕對裝入方式:邏輯地址 == 實體地址
編譯程式生成的“目的碼”就是”裝入模組” ,邏輯地址直接從某個地址R處增長,裝入模組直接裝入記憶體地址R處。
2)靜態可重定位裝入方式:邏輯地址 -》重定位-》 實體地址
地址對映在程式執行之前進行,重定位後實體地址不再改變
裝入時根據所定位的記憶體地址去修改每個邏輯地址,新增相應偏移量,重定位為實體地址
3)動態執行時(重定位)裝入方:邏輯地址 -》重定位-》 實體地址
程式裝入記憶體時,可多次重定位到不同位置。且可以不立即把裝入模組中的相對地址轉換為絕對地址,而是把這種地址轉換推遲到程式真正要執行時才進行(執行時才修改地址
)。
(3)不同的程式連結裝入方式(使用記憶體的時機)
裝入是使用記憶體的開始,但連結的不同會使記憶體的使用有差別:
根據連結時間的不同,分成三種:
a.靜態連結:裝入執行前將多個目標模組及所需庫函式連結成一個整體,以後不再拆開。
b.裝入時動態連結:裝入記憶體時,邊裝入邊連結的連結方式。
c.執行時動態連結:對某些目標模組的連結,在執行中需要該目標模組時,才對它進行連結。
二、連續分配儲存管理方式
1.單一連續分配
記憶體分為系統區和使用者區兩部分。
只能用於單使用者、單任務的作業系統中。
2.固定分割槽分配
把記憶體分為一些大小相等或不等的分割槽,每個應用程序佔用一個分割槽。作業系統佔用其中一個分割槽。支援多個程式併發執行,適用於多道程式系統和分時系統。
(1)建立一記錄相關資訊的分割槽表(或分割槽連結串列)
分割槽表中,表項值隨著記憶體的分配和釋放而動態改變
也可將分割槽表分為兩個表格:空閒分割槽表/佔用分割槽表。
(2)固定分配的不足
a.產生內碎片

b.分割槽總數固定,限制併發執行的程式數目
3.動態分割槽分配
分割槽的大小不固定:在裝入程式時根據程序實際需要,動態分配記憶體空間,即——需要多少劃分多少。
產生外碎片
分割槽分配演算法:
(1)首次適應演算法FF
空閒分割槽排序:以地址遞增的次序連結。
檢索:分配記憶體時,從鏈首開始順序查詢直至找到一個大小能滿足要求的空閒分割槽;
分配:從該分割槽中劃出一塊作業要求大小的記憶體空間分配給請求者,餘下的空閒分割槽大小改變仍留在空閒鏈中。
優點:優先利用記憶體低址部分,保留了高地址部分的大空閒區;
缺點:但低址部分不斷劃分,會產生較多小碎片;而且每次查詢從低址部分開始,會逐漸增加查詢開銷。
(2)迴圈首次適應演算法 (next-fit)
檢索:從上次找到的空閒分割槽的下一個空閒分割槽開始查詢,直到找到一個能滿足要求的空閒分割槽。為實現演算法,需要:
設定一個起始查尋指標
採用迴圈查詢方式
優點:空閒分割槽分佈均勻,減少查詢開銷
缺點:缺乏大的空閒分割槽
(3)最佳適應演算法 (best-fit)
空閒分割槽排序:所有空閒分割槽按容量從小到大排序成空閒分割槽表或鏈。
檢索:從表或鏈的頭開始,找到的第一個滿足的就分配
缺點:每次找到最合適大小的分割槽割下的空閒區也總是最小,會產生許多難以利用的小空閒區(外碎片)
(4)最差適應演算法/最壞匹配法(worst-fit)
基本不留下小空閒分割槽,但會出現缺乏較大的空閒分割槽的情況。
(5)快速適應演算法
根據程序常用空間大小進行劃分,相同大小的串成一個鏈,需管理多個各種不同大小的分割槽的連結串列。程序需要時,從最接近大小需求的鏈中摘一個分割槽。
4.動態重定位分割槽分配——有緊湊功能的動態分割槽分配
5.記憶體空間管理之對換
當記憶體空間還是滿足不了需求時,引入“對換”
按對換單位分類:
整體對換(或程序對換):以整個程序為單位(連續分配)
頁面對換或分段對換:以頁或段為單位(離散分配)
三、基本分頁儲存管理方式
1.
(1)記憶體劃分成多個小單元,每個單元K大小,稱**(物理)塊**。
作業也按K單位大小劃分成片,稱為頁面
物理劃分塊的大小 = 邏輯劃分的頁的大小
(2)要找到作業A
關鍵是找到頁表(PCB)
根據頁表找物理塊
(3)作業相對地址在分頁下不同位置的數有一定的意義結構:
頁號+頁內地址(即頁內偏移)
頁面大小決定偏移量(頁內地址)的位數 n;
作業大小-》頁面數量
頁表長度 a
頁號的位數 m(或總位數-頁內位數)
記憶體容量決定塊數,塊數決定編址位數,即頁表項位數 b。

(4)設定一個頁表暫存器PTR(page table register)記錄頁表在記憶體中的首地址和頁表長度,執行時快速定位頁表
(5)在這裡插入圖片描述
(6)快表放正在執行程序的頁表的資料項。
在這裡插入圖片描述
(7)兩級頁表
外頁號 | 頁在外頁內的偏移 | 頁內地址
外頁偏移量與頁表項大小有關。
四、基本分段儲存管理方式
分段儲存管理:作業分成若干段,各段可離散放入記憶體,段內仍連續存放。
(1)段的特點
a.每段有自己的名字(一般用段號做名),都從0編址,可分別編寫和編譯。裝入記憶體時,每段賦予各段一個段號。
b.每段佔據一塊連續的記憶體。(即有離散的分段,又有連續的記憶體使用)
c.各段大小不等
(2)地址結構:段號 + 段內地址
段表:記錄每段實際存放的實體地址
五、段頁式儲存管理方式
(1)基本原理
將使用者程式分成若干段,併為每個段賦予一個段名。
把每個段分成若干頁
地址結構包括段號、段內頁號和頁內地址三部分
段號 | 段內的頁號 | 頁內偏移(頁內地址)
(2)三次訪問記憶體
根據段號檢索段表
頁表
記憶體中實際資料
六、虛擬儲存器
1.程式執行的區域性性:
時間區域性性
空間區域性性
2.虛擬儲存器的定義
(1)是指具有請求調入功能置換功能,能從邏輯上對記憶體容量加以擴充的一種儲存器系統。
(2)虛擬儲存管理:允許將一個作業分多次調入記憶體。
若採用連續分配方式,需申請足夠空間,再分多次裝入,造成記憶體資源浪費,並不能從邏輯上擴大記憶體容量。
(3)虛擬儲存器的特徵:離散分配方式是基礎
多次性、對換性、虛擬性
3.請求分頁式儲存管理方式
(1)硬體支援
基本分頁 + “請求調頁”和“頁面置換”功能。
換入和換出基本單位都是長度固定的頁面
1)頁表的基本功能不變:邏輯地址對映為實體地址
頁號 | 物理塊號 | 狀態位P | 訪問欄位A | 修改位M | 外存地址
狀態位P:指示該頁面是否已調入記憶體 (調入記憶體1,否則0)
訪問欄位A :用於記錄本頁在一段時間內被訪問的次數,或記錄本頁最近已有多長時間未被訪問。(置換時考量的引數)
修改位M :該頁在調入記憶體後是否被修改過。(關係到置換時調出的具體操作)
2)缺頁中斷機構:
每當要訪問的頁面不在記憶體時,便產生一缺頁中斷通知OS,OS則將所缺之頁調入記憶體。作為中斷,需經歷幾個步驟:
“保護CPU環境”
“分析中斷原因”
“轉入缺頁中斷處理程式”
“恢復CPU環境”等。
3)地址變換機構
分頁系統地址變換機構的基礎上增加:
產生和處理缺頁中斷(請求調入)
從記憶體中換出一頁的功能(置換)
(2)記憶體分配
1)物理塊的分配策略
a.固定分配、區域性置換
為每個程序分配一定數目的物理塊,在整個執行期間不再改變(基於程序的型別,或根據程式設計師、程式管理員的建議)
執行中缺頁時,只能從該程序記憶體中n個頁面中選出一頁換出,然後再調入一頁。
b.可變分配、全域性置換
先為每個程序分配一定數目的物理塊
OS管理一個空閒物理塊佇列,發生缺頁時,系統從佇列中取出一塊分配給該程序,將欲調入的頁裝入(動態增長型,全域性空閒空間都可分配使用)
空閒空間不足時,可與其他任何程序頁面置換。“會使其他程序缺頁率提高,影響執行”
c.可變分配、區域性置換
為每個程序分配一定數目的物理塊
缺頁時,只允許換出該程序在記憶體的頁面,不影響其他程序執行。
根據缺頁率增減程序的物理塊數:若頻繁缺頁中斷,則系統再為程序分配若干物理快;若缺頁率特別低,則適當減少分配給該程序的物理塊。
2)物理塊的分配演算法
固定分配策略時,分配物理塊可採用以下幾種演算法:
a.平均分配演算法
將所有可供分配的物理塊平均分配給各程序。
缺點:未考慮各程序本身的大小,利用率不均。
b.按比例分配演算法
根據程序的大小按比例分配物理塊。
4.頁面置換演算法
(1)程序執行過程中,訪問的頁面不在記憶體,調入時記憶體已無空閒空間,需要將記憶體中的一頁程式或資料調到外存。
(2)缺頁率=頁面調入次數(缺頁次數)/總的頁面使用次數
(3)
a.最佳Optimal置換演算法
換出以後永不再用的,或在最長(未來)時間內不再被訪問的頁面。作為參照標準,評價其他演算法。
b.先進先出置換演算法(FIFO)
先進入的先淘汰,即選擇記憶體中駐留時間最久的頁面予以淘汰。(佇列)
Belady現象:出現分配的頁面數增多,缺頁率反而提高的異常現象。
Belady現象的原因:FIFO演算法的置換特徵與程序訪問記憶體的動態特徵矛盾,即被置換的頁面並不是程序不會訪問的。
c.最近最久未使用(LRU)置換演算法
1)暫存器記錄時間的原理
頁面被訪問後的操作:
將該頁對應的暫存器的Rn-1位置為1
2)棧記錄時間的原理
某頁面被訪問,便將該頁面的頁面號從棧中移出,將它壓入棧頂。因此:棧頂始終是最新被訪問頁面的編號,越久未使用,頁面越被壓在棧底。
d.輪轉演算法(clock)(最近未使用演算法(NRU, Not Recently Used))
每個頁設一個使用標誌位(use bit),若該頁被訪問則將其置為1。
設定一個指標,從當前指標位置開始按地址先後檢查各頁,尋找use bit=0的頁面作為被置換頁。
若指標經過的頁use bit=1,修改use bit=0(暫不凋出,給被用過的頁面駐留的機會 ),指標繼續向下。到所有頁面末尾後再返回隊首檢查。
e.其他置換演算法
1)最少使用 (LFU, Least Frequently Used)
每頁設定訪問計數器,每當頁面被訪問時,該頁面的訪問計數器加1;缺頁中斷時,淘汰計數值最小的頁面,並將所有計數清零;
2)頁面緩衝演算法PBA(page buffering algorithm)
仍用FIFO演算法選擇被置換頁但並不將其馬上換入外存。
系統將頁面放入兩個連結串列之一:如果頁面未被修改,就將其歸入到空閒頁面連結串列的末尾;否則將其歸入到已修改頁面連結串列。
需要調入新的物理頁面時,將新頁面內容讀入到空閒頁面連結串列的第一項所指的頁面,然後將第一項刪除(從空閒連結串列摘下)。
空閒頁面和已修改頁面,仍停留在記憶體中一段時間,如果這些頁面被再次訪問,只需較小開銷,而被訪問的頁面可以返還作為程序的記憶體頁。
當已修改頁面達到一定數目後,再將它們一起調出到外存,然後將它們歸入空閒頁面連結串列,這樣能大大減少I/O操作的次數。
(4)影響缺頁率的主要因素
a.分配給作業的主存塊數:
多則缺頁率低,反之則高。
b.頁面大小:
大則缺頁率低;反之則高。
c.頁面排程演算法:
對缺頁中斷率影響很大,但不可能找到一種最佳演算法。
d.程式編制方法:
(5)抖動
根本原因:
頁面淘汰演算法不合理;分配給程序的物理頁面數(駐留集)太少。
工作集:某段時間間隔中,程序實際要訪問的頁面的集合。
駐留集>工作集可使程序順利的執行。
5.請求分段儲存管理方式
(1)硬體支援
a.段表機制
b.缺段中斷機構
c.地址變換機構
基於分段系統地址變換機構的基礎
段調入記憶體
修改段表
再利用段表進行地址變換。