1. 程式人生 > 其它 >第四部分 作業系統-虛擬記憶體

第四部分 作業系統-虛擬記憶體

一、起因

記憶體相對於暫存器速度慢,所以記憶體和暫存器之間有 cache

硬碟比記憶體容量大,但是速度慢

磁帶比硬碟容量還大

計算機系統中,尤其是多道程式執行下記憶體不夠用

二、覆蓋技術

1、目標

較小的可用記憶體中執行較大的程式。常用於多道程式系統,與分割槽儲存管理配合使用

2、原理

  • 程式劃分為獨立程式模組
  • 共享記憶體、分時執行
  • 常用功能常駐記憶體、不常用功能放於外存

3、缺點

覆蓋模組從外存裝入記憶體,實際上是以時間延長換取空間節省

三、交換技術

1、目標

多道程式在記憶體中時,讓正在執行的程式或需要執行的程式獲得更多的記憶體資源

2、原理

暫時不能執行的程式送到外存

3、存在的問題

  • 交換時機的確定:只當記憶體空間不夠或者有不夠的危險時
  • 交換區的大小:足夠存放程序的所有記憶體映像的拷貝;能對這些記憶體映像直接存取
  • 程式換入時的重定位:動態地址對映

4、與覆蓋技術的區別

覆蓋:發生在一個程式裡,程式設計師需要手動指定邏輯關係;

交換:發生在程式之間,由作業系統內部完成,不需要程式設計師設定

四、虛存技術

1、目標

覆蓋技術做的更好:由作業系統自動完成

交換技術做的更好:只對程序的部分內容在記憶體和外存之間進行交換

2、程式的區域性性原理

  • 時間區域性性:連續兩次訪問集中在一個較短時期
  • 空間區域性性:訪問的資料在較近的區域

3、基本概念

可以在頁式或段式記憶體管理的基礎上實現

  • 需要執行的部分頁面或者段裝入到記憶體
  • 執行過程中,將尚未在記憶體但是須執行的程式調入到記憶體
  • 記憶體中暫時不使用的頁面或段儲存在外存

4、基本特徵

  • 大的使用者空間:實體記憶體和外存相結合
  • 部分交換:部分虛擬地址空間進行的
  • 不連續性:實體記憶體分配的不連續,虛擬地址空間使用的不連續

5、實現 —— 虛擬頁式儲存管理

(1)頁表

  • 完成邏輯頁到物理頁幀的對映

(2)虛擬頁式儲存管理技術

  • 在頁式儲存管理的基礎上增加請求調頁和頁面置換功能
  • 執行過程中程式或者要訪問的資料不在記憶體中,則向系統發出缺頁中斷請求
  • 系統在處理這個中斷時,將外存中相應頁面調入記憶體,使得程式繼續執行

(3)頁表表項

  • 駐留位:表示該頁是在記憶體還是外存
  • 保護位:表示允許對該頁做何種型別的訪問
  • 修改位:該頁在記憶體中是否被修改過(決定是否把它的內容寫回外存)
  • 訪問位:該頁面被訪問過則設定此位(用於頁面置換演算法)

(4)缺頁中斷

(5)後備儲存

  • 一個虛擬地址空間的頁面可以被對映到一個檔案(在二級儲存中)的某個位置
  • 程式碼段:對映到可執行二進位制檔案
  • 動態載入的共享庫程式段:對映到動態呼叫的庫檔案
  • 其他段:可能被對映到交換檔案

五、頁面置換演算法

1、功能

當缺頁中斷髮生,需要調入新的頁面而記憶體已滿時,選擇記憶體中哪個物理頁面被置換

2、目標

儘可能地減少頁面的換進換出次數(即缺頁中斷的次數)

3、最優頁面置換演算法(區域性頁面置換演算法1)

(1)基本思路:距離下一次訪問等待時間最長的邏輯頁面作為置換的頁面

(2)理想情況,可作為其他演算法的效能評價的依據

4、先進先出演算法FIFO(區域性頁面置換演算法2)

(1)基本思路

  • 選擇在記憶體中駐留時間最長的頁面並淘汰之
  • 當發生一個缺頁中斷時,把鏈首頁面淘汰出去,把新的頁面新增到連結串列的末尾

(2)效能較差,並且有 belady 現象

5、最近最久未使用演算法 LRU(區域性頁面置換演算法3)

(1)基本思路

選擇最久未使用的那個頁面,並淘汰之

(2)最優頁面置換演算法的近似,基於程式的區域性性原理

(3)LRU 演算法需要記錄各個頁面使用時間的先後順序,開銷比較大

(4)實現方法

  • 系統維護一個頁面連結串列
  • 設定一個活動頁面棧

6、時鐘頁面置換演算法(區域性頁面置換演算法4)

基本思路:

(1)LRU的近似,FIFO的改進

(2)裝入記憶體頁面的頁表項的訪問位初始化為0,被訪問置為1;各個頁面組織成環形連結串列,指標指向最老頁面

7、二次機會法

(1)修改 clock 演算法,使它允許髒頁總是在一次時鐘頭掃描中保留下來,同事使用髒位和使用位來指導置換

(2)Enhanced Clock algorithm

useddirtyuseddirty
0 0 —> replace page
0 1 —> 0 0
1 0 —> 0 0
1 1 —> 0 1

8、最不常用演算法 LFU(區域性頁面置換演算法5)

(1)基本思路

當一個缺頁中斷髮生時,選擇訪問次數最少的那個頁淘汰之

(2)實現方法

對每個頁面設定一個訪問計數器,每當一個頁面被訪問時,該頁面的訪問計數器加一。在發生缺頁中斷時,淘汰技術值最小的那個頁面

(3)LRU和LFU的區別

LRU考察的是多久未訪問,時間越短越好;而LFU考察的是訪問的次數或頻度,訪問次數越多越好

9、Belady 現象

(1)現象

在採用 FIFO 演算法時,有時會出現分配的物理頁面數增加,缺頁率反而提高的異常現象

(2)原因

FIFO 演算法的置換特徵與程序訪問記憶體的動態特徵是矛盾的,與置換演算法的目標是不一致的(即替換較少使用的頁面)

因此,被它置換出去的頁面並不一定是程序不會訪問的

(3)LRU頁面置換演算法沒有Belady現象

10、LRU、FIFO、Clock 的比較

(1)LRU、FIFO 本質上都是先進先出的思路

(2)LRU 是針對頁面的最近訪問時間來排序、開銷大

(3)FIFO 是針對頁面進入記憶體的時間來排序、開銷小

(4)如果一個頁面進入記憶體後沒有被訪問,那麼它的最近訪問時間就是它進入記憶體的時間。即 LRU 退化為 FIFO