例:在乙個請求分頁儲存系統中,乙個程序的頁面走向為4,3,2,1,4,3,5,3,2,1,設分配給該程序的記憶體塊數m=4,採用fifo和lru頁面置換演算法(每調進乙個新頁認為發生一次缺頁中斷)。計算缺頁次數和缺頁率(寫出計算過程)。
下面簡單的把計算方法解釋一下:
fifo(先進先出置換演算法)
首先要根據頁面走向和記憶體塊數畫出**,行數為頁面走向的數量,列數為記憶體塊數的數量(本題中為10行4列的**)
依次填入乙個資料,所以可以填入四次,到第五個頁面走向就要進行判斷,也就是4,我們看到,4已經存在,則將列表空置,繼續進行下乙個判斷,下乙個為3,依舊在列表中存在,仍然置空,來到下乙個數,5.我們看到5沒有,根據先進先出演算法,需要將第一次進入的數進行置換,也就是把4換成5,並填入到**中,然後下面依次是3,2,1,的判斷,皆存在在**中。所以都置空。(這裡補充一下,如果下次再遇到不存在的數,如6,則將第二次進入的3進行置換,也就是把3置換成6填入,以此類推)
然後進行缺頁次數和缺頁率的計算。
缺頁次數=列總數-空白列 缺頁率=缺頁次數/總列數
lru(最近最久未使用演算法)
由於演算法的不同,採用置換的方式也會不一樣。這裡我們引入下標來計時(實際做題中不可以寫,這裡寫出是便於大家理解)。
我們首先填入4,下標為0,也就是在該列表中的存在時間,隨著填入的數依次增大。
然後填入3,下標為0,我們這時就要把4的下標變為1
然後填入2,下標為0,此時4的下標為2, 3的下標為1
然後填入1,下標為0,此時4的下標為3, 3的下標為2, 2的下標為1
第五個數4,在該列表中存在,這時需要置空,並對4的下標進行更新,變為0,其它的繼續下標加1(也就是4(0),3(3),2(2),1(1))
第六個數3,在該列表中存在,這時需要置空,並對3的下標進行更新,變為0,其它的繼續下標加1(也就是4(1),3(0),2(3),1(2))
第七個數5,不存在該列表,這時需要將下標最大的進行置換,也就是2的下標最大,將2置換成5,此時為(4(2),3(1),5(0),1(3))
第八個數3,在該列表中存在,這時需要置空,並對3的下標進行更新,變為0,其它的繼續下標加1(也就是4(3),3(0),5(1),1(4))
第九個數2,不存在該列表,這時需要將下標最大的進行置換,也就是1的下標最大,將1置換成2,其它的繼續下標加1,(也就是4(4),3(1),5(2),2(0))
第十個數1,不存在該列表,這時需要將下標最大的進行置換,也就是4的下標最大,將4置換成1,其它的繼續下標加1,(也就是1(0),3(2),5(3),2(1))
然後進行缺頁次數和缺頁率的計算。
缺頁次數=列總數-空白列 缺頁率=缺頁次數/總列數
最後再補充一下opt(最佳頁面置換演算法)
先說一下最佳頁面置換演算法的做題思路:就是當遇到不存在列表中的頁面走向數字時,需要進行判斷需要替換的數字,這裡的替換是根據列表中的數字中最遠的那個,就是後面的一串數中最晚出現的那個,如果出現有個數在後面沒有出現過就選這個沒出現的數,不會出現兩個不存在的數,給的數都是比較有規律的。
回到該題,由於給的數字較少,當遇到第7個數字5的時候,需要進行判斷,此時頁面中的是4,3,2,1.而後面的數字依次是3,2,1.我們可以看到4,沒有存在,所以直接將4替換,如果順序是4,3,2,。那麼替換的就是1了,同理,怎樣變數都是這樣判斷的。
所以這裡的資料和fifo的資料是一樣,但是原理不一樣。大家要特備注意,注意替換的思路!!!44
4453
3332
2211
資料既然一樣,那麼缺頁次數和缺頁率也是一樣的,主要是題型大家這種演算法的思路!
頁面置換演算法
常用的頁面置換演算法有三種 先進先出演算法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 理想置換演算法 這是一種理想情況下的頁...