王道_作業系統 第三章 記憶體管理
1 記憶體的基礎知識
1.0 知識總覽
1.1 什麼是記憶體?有何作用?
補充知識:幾個常用的數量單位
1.2 程序的執行原理——指令
1.3 邏輯地址 VS 絕對地址
1.4 從寫程式到程式執行
1.5 裝入模組裝入記憶體
裝入的三種方式——絕對裝入
裝入的三種方式——靜態重定位
裝入的三種方式——動態重定位
裝入時依然保持使用邏輯地址
優點:除上述優點,還可將程式分配到不連續的儲存區中;在程式執行前只需裝入它的部分程式碼,即可投入執行,在程式執行期間,可根據需要動態申請分配記憶體;便於程式段的共享,可以向用戶提供一個比儲存空間大得多的地址空間。
1.6 連結的三種方式
靜態連結:
在程式執行之前,先將各目標模組及它們所需的庫函式連結成一個完整的可執行檔案(裝入模組),之後不再拆開。
裝入時動態連結:
將各目標模組裝入記憶體時,邊裝入邊連結(沒有生成裝入模組)。
執行時動態連結:
在程式執行中需要該目標模組時,才對它進行連結(如果不使用某模組,則不用連結)。優點是便於修改和更新,便於實現對目標模組的共享。
1.7 知識回顧與重要考點
2 記憶體管理的概念
2.0 知識總覽
2.1 記憶體空間的分配與回收
2.2 記憶體空間的擴充
2.3 地址轉換
2.4 記憶體保護
作業系統需要提供記憶體保護功能。保證各程序在各自儲存空間內執行,互不干擾。
方法一:
方法二:
2.5 知識回顧與重要考點
重定位暫存器又叫基地址暫存器,界地址暫存器又叫限長暫存器。
3 覆蓋與交換
3.0 知識總覽
虛擬儲存技術會在之後的小結中詳細介紹
3.1 覆蓋技術
例:
位於同一層次的模組不會被同時訪問
覆蓋技術只用於早期的作業系統中,現在已成為歷史
3.2 交換技術
複習回顧:七狀態模型
思考問題:
3.3 知識回顧與重要考點
4 連續分配管理方式
4.0 知識總覽
4.1 單一連續分配
4.2 固定分割槽分配
思考:作業系統應該怎麼記錄記憶體中各個分割槽的空閒或者分配的情況呢?
4.3 動態分割槽分配
- 裝入方式:動態重定位方式
分配
第一種情況:分割槽數量不變
第二種情況:分割槽數量改變
回收
第一種情況:回收區的後面有一個相鄰的空閒分割槽
第二種情況:回收區的前面有一個相鄰的相鄰空閒分割槽
第三種情況:回收區的前、後各有一個空閒分割槽
第四種情況:回收區的前、後都沒有相鄰的空閒分割槽
4.4 知識回顧與重要考點
5 動態分割槽分配演算法
5.0 知識總覽
5.1 首次適應演算法
5.2 最佳適應演算法
優先使用更小的空閒區
分配空間後,空閒分割槽大小變小的節點可能需要更新連結串列中的順序!
5.3 最壞適應演算法
優先使用最大的空閒區
5.4 鄰近適應演算法
5.5 知識回顧與重要考點
6 基本分頁儲存管理的基本概念
6.0 知識總覽
6.1 分頁儲存管理的基本概念
6.2 分頁儲存管理的地址轉換
思考:將程序地址空間分頁之後,作業系統該如何實現邏輯地址到實體地址的轉換?
如何計算二進位制位表示的地址轉換:
結論:如果每個頁面大小為2KB,用二進位制數表示邏輯地址,則末尾K位即為頁內偏移量,其餘部分就是頁號。
6.3 邏輯地址結構
6.4 頁表
6.5 知識回顧與重要考點
7 基本地址變換機構
7.0 知識總覽
該小節也屬於基本分頁儲存管理的內容。重點理解、記憶基本地址變換機構(用於實現邏輯地址到實體地址轉換的一組硬體機構)的原理和流程。
7.1 基本地址變換機構
動手驗證:假設頁面大小L=1KB,最終要訪問的記憶體塊號b=2,頁內偏移量W=1023。
①嘗試用E=b*L+W計算目標實體地址。
②嘗試把記憶體塊號、頁內偏移量用二進位制表示,並把它們拼接起來得到實體地址。
對比①②的結果是否一致
注意:對頁號進行越界檢查
7.2 知識回顧和重要考點
8 具有快表的地址變換機構
8.0 知識總覽
8.1 區域性性原理
8.2 什麼是快表(TLB)
快表,又稱聯想暫存器(TLB),是一種訪問速度比記憶體快很多的高速緩衝儲存器,用來存放當前訪問的若干頁表項,以加快地址變換的過程。於此對應,記憶體中的頁表常稱為慢表。
8.3 引入快表後,地址的變換過程
8.4 知識回顧與重要考點
9 兩級頁表
9.0 知識總覽
9.1 單級頁表存在的問題
9.2 兩級頁表的原理、地址結構
9.3 如何實現地址變換
9.4 兩級頁表需要注意幾個細節
1)各級頁表的大小不能超過一個頁面
2)訪存次數分析
多級頁表比單級頁表記憶體利用率高,但訪存次數上升。兩級頁表最多需要訪問3次記憶體,n級頁表最多需要訪問n+1次記憶體。
9.5 知識回顧與重要考點
10 基本分段儲存管理方式
10.0 知識總覽
10.1 分段
10.2 段表
10.3 地址變換
分段需要對段內位置進行檢查;分頁不需要檢查
10.4 分段、分頁管理的對比
比如簡單輸出“Hello World”的程式碼段可以被共享
為什麼分頁管理中不方便實現資訊共享:
10.5 知識回顧與重要考點
11 段頁式管理方式
11.0 知識總覽
11.1 分頁、分段的優缺點分析
11.2 分段+分頁=段頁式管理
段頁式管理的邏輯地址結構
11.3 段表、頁表
一個程序會對應一個段表,但是一個程序可能會對應多個頁表
11.4 地址轉換
- 從PCB中讀出段表暫存器內容
要點:訪存次數、合法性檢查
11.5 知識回顧與重要考點
12 虛擬記憶體的基本概念
12.0 知識總覽
在傳統儲存管理方式的基礎上引入了交換技術、覆蓋技術,使得記憶體利用率有所提升,並且能從邏輯上擴充記憶體容量。
12.1 傳統儲存管理方式的特徵、缺點
12.2 區域性性原理
12.3 虛擬記憶體的定義和特徵
12.4 如何實現虛擬記憶體技術
12.5 知識回顧與重要考點
13 請求分頁管理方式
13.0 知識總覽
13.1 頁表機制
13.2 缺頁中斷機構
13.3 地址變換機構
快表中有的頁面一定是在記憶體中的。所以若某個頁面被換出記憶體,則快表中的相應表項也要刪除,否則可能訪問錯誤的頁面。
補充細節:
①修改訪問位和修改位:只有“寫指令”才需要修改“修改位”。並且,一般來說只需要修改快表中的資料,只有要將快表項刪除時才需要寫回記憶體中的慢表。這樣可以減少訪存次數。
②保留CPU現場:和普通的中斷處理一樣,缺頁中斷處理依然需要保留CPU現場
③選擇一頁換出:需要用某種“頁面置換演算法”來決定一個換出頁面(下節內容)
④將該頁寫回外存:換入/換出頁面都需要啟動慢速的I/O操作,可見,如果換入/換出太頻繁,會有很大的開銷
⑤修改頁表:頁面調入記憶體後,需要修改慢表,同時也需要將表項複製到快表中
在具有快表機構的請求分頁系統中,訪問一個邏輯地址時,若發生缺頁,則地址變換步驟是:
查快表(未命中)——查慢表(發現未調入記憶體)——調頁(調入的頁面對應的表項會直接加入快表)——查快表(命中)——訪問目標記憶體單元
13.4 知識回顧與重要考點
14 頁面置換演算法
14.0 知識總覽
14.1 最佳置換演算法(OPT)
14.2 先進先出置換演算法(FIFO)
Belady異常
14.3 最近最久未使用置換演算法(LRU)
14.4 時鐘置換演算法(CLOCK / NRU)
最多經過兩輪掃描
14.5 改進型的時鐘置換演算法
第一優先順序:最近沒訪問,且沒修改的頁面(0,0)
第二優先順序:最近沒訪問,但修改過的頁面(0,1)
第三優先順序:最近訪問過,但沒修改的頁面(1,0)
第四優先順序:最近訪問過,且修改過的頁面(1,1)
14.6 知識回顧與重要考點
15 頁面分配策略
15.0 知識總覽
15.1 頁面分配、置換策略
駐留集
固定分配區域性置換
可變分配全域性置換
鎖定:系統會鎖定一些頁面,這些頁面中的內容不能置換出外存(如:重要的核心資料可以設為“鎖定”)
可變分配區域性置換
15.2 調入頁面的時機
15.3 從何處調入頁面
- 系統擁有足夠的對換區空間:頁面的調入、調出都是在記憶體與對換區之間進行,這樣可以保證頁面的調入、調出速度很快。在程序執行前,需將程序相關的資料從檔案區複製到對換區。
- 系統缺少足夠的對換區空間:凡是不會被修改的資料,都直接從檔案區調入,由於這些頁面不會被修改,因此換出時不必寫回磁碟,下次需要時再從檔案區調入即可。對於可能被修改的部分,換出時需寫回磁碟對換區,下次需要時再從對換區調入。
- UNIX方式:執行之前,程序有關的資料全部放在檔案區,故未使用過的頁面都可從檔案區調入。若被使用過的頁面需要換出,則寫回對換區,下次需要時從對換區調入。