頁面置換演算法

2021-07-23 17:20:14 字數 2337 閱讀 4426

1. 總述

為提高記憶體利用率,解決記憶體供不應求的問題,更加合理的使用記憶體,人們創造了分頁式記憶體抽象。同時有乙個虛擬記憶體的概念,是指將記憶體中暫時不需要的部分寫入硬碟,看上去硬碟擴充套件了記憶體的容量,所以叫做「虛擬」記憶體。使用虛擬記憶體,應用程式可以使用比實際物理記憶體更大的記憶體空間。可以認為這個更大的記憶體空間就在硬碟上,只有將某一部分需要被用到時,才被寫入真實記憶體;當它暫時不再被用到時,又被寫回硬碟。分頁式記憶體管理將物理記憶體分為等大的小塊,每塊大小通常為1k、2k、4k等,稱為頁幀;邏輯記憶體(使用虛擬記憶體技術擴大的記憶體,可認為其位於硬碟上)也被分為等大的小塊,稱為頁;且頁和頁幀的大小一定是一樣的,它是寫入真實記憶體和寫回硬碟最小單位。

介紹另外幾個概念:

使用位:每個頁幀都有乙個使用位,記錄此頁幀是否被使用。

修改位(髒位):每個頁幀都有乙個髒位,記錄此頁幀是否被更改。調出真實記憶體時,被更改過的頁幀要寫回硬碟,未被更改過的頁幀直接扔掉即可,因為硬碟上此頁幀的副本仍然有效。

當然,程序載入到真實記憶體才可以執行,而程序**使用的是邏輯位址,所以牽扯到乙個位址轉換的問題,將邏輯位址轉換為實體地址。邏輯位址可分為兩段,前半段代表頁號,後半段代表頁內偏移,實體地址也可分為兩段,前半段代表頁幀號,後半段代表頁內偏移。位址轉換的方法即,將邏輯位址的頁號對應為實體地址的頁幀號(對應關係記錄在一張表中,比如頁號為5,對應到真實記憶體中頁幀號為3),頁內偏移不同變化(頁和頁幀的大小是一樣的)。

2. 介紹頁面置換演算法

假設某一時刻記憶體頁幀已經被寫滿了,但這時又需要將乙個頁寫到物理記憶體中,就需要將原本在物理記憶體中的某一頁換出來。如果置換不當,就會導致剛剛被換出到硬碟的頁又要被寫回記憶體,減慢系統執行的速度。頁面置換演算法就是考慮將哪一頁換出來以獲得優良效能的方法。

2.1 optimal演算法(最優演算法)

首先介紹最優演算法,它需要知道以後要被用到的頁,然後將不會被用到的頁換出記憶體;如果所有頁都會被用到,就把需要使用時間離現在最長的頁換出,以盡量使不好的情況晚發生。這種方法能使系統獲得最佳效能,但是,它是不可能實現的......因為當前無法獲知以後哪些頁要被用到。不過最優演算法還是能夠作為其他演算法優秀程度的衡量。

2.2 fifo(first-in first-out,先進先出)演算法

fifo演算法的思想很簡單,就是置換出當前已經待在記憶體裡時間最長的那個頁。fifo演算法的執行速度很快,不需要考慮其他的因素,需要的開銷很少。但是正是由於沒有考慮頁面的重要性的問題,fifo演算法很容易將重要的頁換出記憶體。

2.3 second chance(第二次機會)演算法

為了避免fifo演算法將重要的頁換出記憶體,second chance演算法提供了一些改進。second chance演算法在將頁面換出記憶體前檢查其使用位(使用位前文有介紹),如果其使用位為1,證明此頁最近有被使用,猜測它還可能被使用,於是不把它置換出記憶體,但是把其使用位置為0,隨後檢查下乙個頁面,直到發現某頁的使用位為0,將此頁置換出記憶體。

2.4 clock演算法(時鐘輪轉法)

為了節約second chance演算法乙個接著乙個檢查使用位的開銷,時鐘輪轉法又提出了改進。時鐘輪轉法將所有的頁組成乙個圓,圓心的指標指向下乙個要被置換的頁面,置換前同樣檢查使用位,如果使用位為1,同樣將其使用位置為0,隨後將順指標旋轉,檢查下乙個頁面,直到發現某頁的使用位為0,將此頁置換出記憶體。很容易理解此演算法為什麼叫「時鐘」輪轉法。

圖示:

此時2號頁是下乙個要被置換出記憶體的頁,置換時如果發現其使用位為1,則將使用位置0後順時針旋轉指標檢查1號頁。

2.5 lru(least recent used, 最近最少使用)演算法

為獲得對最優演算法的模擬,提出了lru演算法。由於當前時間之後需要用到哪些頁無法提前獲知,於是記錄當前時間之前頁面的使用情況,認為之前使用過的頁面以後還會被用到。在置換時,將最近使用最少的頁面換出記憶體。此種方法的開銷比較大。

2.6 nru(not recent used, 最近未使用)演算法

前面提到修改位和使用位,nru演算法利用這兩個標誌位將所有頁幀分為4組:

第0組:修改位和使用位都為0;

第1組:修改位為0,使用位為1;

第2組:修改位為1,使用位為0;

第3組:修改位和使用位都為1。

nru演算法從組數最小的一組中隨機選擇乙個頁面將其移出記憶體。可能有人會發現第2組這種情況根本不會出現,如果乙個頁幀被修改,其修改位會被置1,同時它也被使用了,其使用位也會被置1;即不會出現被修改但是沒有被使用的情況。真實情況是,頁幀的使用位會被定時清零,這樣第3組經過一次清零就會變成第2組。這也符合「最近」未使用,即很久以前被使用的頁幀被清零了,不在統計範圍內,只要「最近」沒有被使用,就很有可能被移出。

nru演算法不是最好的,但是它使用起來開銷很小,用較小的代價就得到了不錯的效果,不失為一種不錯的演算法。

頁面置換演算法

常用的頁面置換演算法有三種 先進先出演算法fifo first in first out 該演算法的基本思想是首先淘汰那些駐留在主存時間最長的頁面。最近最久未用演算法 lru 該演算法的基本思想是 如果某一頁被訪問了,那麼它很可能馬上又被訪問 反之,如果某一頁很久沒被訪問,那麼最近也不會再訪問。lr...

頁面置換演算法

include using namespace std int process 100 頁面佇列 int memory 3 塊數 int optqueue 100 opt演算法的佇列 int fifoqueue 100 fifo演算法佇列 int lruqueue 100 lru演算法佇列 int ...

頁面置換演算法

位址對映過程中,若在頁面中發現所要訪問的頁面不再記憶體中,則產生缺頁中斷。當發生缺頁中斷時作業系統必須在記憶體選擇乙個頁面將其移出記憶體,以便為即將調入的頁面讓出空間。而用來選擇淘汰哪一頁的規則叫做頁面置換演算法。常見的置換演算法有 1 最佳置換演算法 opt 理想置換演算法 這是一種理想情況下的頁...