作業系統考研複試複習-3
阿新 • • 發佈:2022-03-15
第三部分:記憶體管理
1,為什麼要進行記憶體管理?
因為現代計算機的程式是併發執行的,記憶體中存在許多程序,記憶體管理就是對記憶體中資源進行管理。
2,記憶體管理要做那些工作?
(1)記憶體空間的分配與回收
(2)地址轉換
(3)記憶體空間的擴充
(4)各個程序儲存空間的保護
3,記憶體空間如何分配和回收?
1,程式從外存到記憶體的過程?
編譯:將程式碼編譯為目標模組
連結:形成完整的裝入模組的邏輯地址
分為三種方式:(1)靜態連結(2)裝入時動態連結(3)執行時動態連結
裝入:在裝入時會發生從邏輯地址到實體地址的轉換
分為三種方式:
(1)絕對裝入:在連結時就生成實體地址(適合單道處理機)
(2)可重定位裝入【又稱靜態重定位】:在裝入時形成實體地址(多道批處理)
(3)動態執行時裝入:在執行時形成實體地址(現代作業系統)適合執行時程式位置可能會發生的OS,需要重定位暫存器的支援。
2,如何決定佔用哪一塊的記憶體?
記憶體空間的管理:
(1)連續分配:
單一連續分配:單道OS,將記憶體分為系統區和使用者區
固定分割槽分配:【為了支援多道程式】分為分割槽大小相等和分割槽大小不等兩種
利用分割槽表說明分割槽
動態分割槽分配:【為了提高併發性,提高記憶體空間的利用率】
問題:如何記錄?如何分配?如何回收?
(1)記錄:用空閒分割槽表或空閒分割槽鏈
(2)分配:動態分割槽分配演算法:首次適應,最佳適應,最壞適應,臨近適應演算法
(2)非連續分配:
邏輯地址結構決定了虛擬記憶體定址空間大小
PCB存放記憶體中的系統區中。
1,頁式儲存管理(產生內部碎片):
(1)通過頁表來實現地址變換(邏輯地址到實體地址),頁表相當於一張索引表。
過程:邏輯地址由邏輯頁號和頁內偏移組成,先用頁號檢索頁表得到相應的物理塊號,物理塊號與頁內地址拼接形成實體地址,訪問記憶體。
檢索的過程:首先檢查邏輯地址的頁號是否大於頁表的長度,如果大於則產生越界中斷,反之,則用頁號×頁表項的長度+頁表起始地址(頁表暫存器中記錄)
頁式儲存管理地址空間是一維的。
(2)加入快表之後的地址變換:
將頁號與頁表長度進行越界判斷之後就根據頁號查詢快表(TLB),未命中,再查慢表(記憶體中的頁表):快表需要儲存頁號,並且快表為相聯儲存器(按內容定址)
2,段式儲存管理(產生外部碎片):
段式儲存空間管理有利於共享和資訊的保護、程式的編譯和動態增長,並且符合人類的程式設計思維。
通過段表來實現地址變換,變換過程:
首先比較段號與段的總數,如果大於,則產生越界中斷,反之,則將段號×段表項長度,找到段號所對應的行,再比較段內地址與段長,如果大於,則產生越界中斷,反之用物理段號加段內偏移地址即是實體地址。
段式儲存空間管理是二維的,不僅要給出段數,而且要給出段長(每段長度不固定)
3,兩級頁表
頁表需要連續儲存,當程式很大時就需要很多連續的空間去儲存頁表項,兩級頁表就是頁表的頁表,使頁表不需要連續儲存,但是增加了訪存的次數(3次)。
4,段頁式儲存
為什麼需要段頁式儲存?結合段式儲存與頁式儲存的優點,即方便程式設計,又方便計算機OS的管理。
每一個程序都有一張段表,每一個段對應一張頁表,在進行地址轉換時:先查段表得到該項頁表的實體地址,再查頁表。得到最終的實體地址。
3,記憶體空間的擴充——虛擬儲存器
思想:將記憶體看作外存的高速儲存器,既有記憶體的速度,又有外存的大小。
1,為什麼要引入虛擬記憶體?
因為傳統的記憶體管理有一次性和駐留性,需要每次將整個作業裝入記憶體才能執行,且執行過程中不能換入換出(即時部分程式不常用),不利於大作業及多道併發工作。
基於區域性性原理:只需要把程式的一部分裝入記憶體就可以執行,如果執行過程中,需要不在記憶體中的資訊,再由OS將所需要的部分調入記憶體即可。在執行過中,把暫時不需要的內容調出記憶體,換入更加需要的資訊。完成多次性和對換性
2,引入虛擬記憶體之後需要那些變化
虛擬記憶體大小?如何分配頁面數?如何換入換出?如何進行邏輯地址的轉換?
(1)需要一些硬體支援
需要缺頁中斷機制和地址變換機制
(2)頁表項的變化
需要增加有效位以表示該頁是否在記憶體中,增加修改位說明該塊是否進行了寫操作,增加外存地址,增加訪問欄位以決定如何進行塊的淘汰。
虛存大小由虛擬地址結構決定
(3)記憶體不夠時如何決定讓哪一頁換出?——頁面置換演算法
FIFO:選擇最先進入記憶體的頁面淘汰,可能會造成Belady異常
OPT:最佳置換演算法:向後看,選擇未來訪問最少的頁或不再訪問的頁面(是無法實現的,常被用作評價其他演算法的標準)
LRU:最近最少使用,開銷大(需要記錄每個頁面的訪問次數),效能好
CLOCK:為了解決LRU開銷大的問題
(1)簡單的clock演算法:用訪問位作為參考,先選擇訪問位為0的頁面換出
在迴圈掃描的過程中將自己掃描過的頁面的訪問位置為零。
(2)改進的clock演算法:選擇訪問位和修改位作為參考
最多進行四輪:優先順序(0,0)<(0,1)<(1,0)<(1,1)
(4)如何確定給每一個程序分配的頁面數目大小?三種策略:
1,固定分配,區域性變換 :每一個程序分配固定的頁面數目,在自己的頁面數目上進行換入換出
2,可變分配,全域性置換:作業系統預留一個空白頁面集,每當某一個程序發生缺頁時就分配給該程序一個頁面。
3,可變分配,區域性置換:只有當該程序頻繁出現缺頁現象才分配給該程序頁面。
(5)用工作集的大小確定駐留集(分配頁面數)的大小
駐留集:已經分配的記憶體頁面數
工作集:在工作視窗中的頁面的集合
分配的駐留集應該大於工作集的大小
如果駐留集 < 工作集 可能會產生顛簸現象(頁面頻繁換入換出)
(6)如何從外存調入頁面
將外存分為檔案區和對換區,調入調出頁面在對換區進行,為了提高對換區的換入換出速度採用連續儲存,而檔案區採用離散儲存。