設計和實現最佳置換演算法、先進先出置換演算法、最近最久未使用置換演算法、頁面緩衝置換演算法;通過頁面訪問序列隨機發生器實現對上述演算法的測試及效能比較。
(1) 請求分頁虛擬記憶體管理
請求分頁虛擬記憶體管理是建立在基本分頁基礎上的,為了能支援虛擬儲存器功能,而增加了請求調頁功能和置換功能。
(2) 工作集
多數程式都顯示出高度的區域性性,也就是說,在乙個時間段內,一組頁面被反覆引用。這組被反覆引用的頁面隨著時間的推移,其成員也會發生變化。有時這種變化是劇烈的,有時這種變化則是漸進的。我們把這組頁面的集合稱為工作集
(3) 缺頁率
缺頁中斷次數/總的頁面訪問次數
(1)模擬的虛擬記憶體的位址為16位,頁面大小為1k,模擬的物理記憶體有32k。
(2)錶用整數陣列或結構陣列來表示
(3) 頁面訪問序列串是乙個整數序列,整數的取值範圍為0到n - 1。頁面訪問序列串中的每個元素p表示對頁面p的一次訪問
(4) 符合區域性訪問特性的隨機生成演算法
(1) 最佳置換演算法
最佳置換演算法的主要思想是,在發生頁面替換時,被替換的物件應該滿足,在以後的頁面訪問中,該物件不會再次被訪問或者較晚被訪問。是一種理想化演算法,具有最好效能(對於固定分配頁面方式,本法可保證獲得最低的缺頁率),但實際上卻難於實現,故主要用於演算法評價參照。
(2) 先進先出置換演算法
先進先出置換演算法的主要思想是,在發生頁面替換時,被替換的物件應該是最早進入記憶體的。
(3) 最近最久未使用置換演算法
最近最久未使用置換演算法的主要思想是,在發生頁面替換時,被替換的頁面應該滿足,在之前的訪問佇列中,該物件截止目前未被訪問的時間最長。
(4) 改進型clock置換演算法
改進型clock置換演算法的主要思想是,在每次頁面替換時,總是盡可能地先替換掉既未被訪問又未被修改的頁面。
(5) 頁面緩衝演算法
設立空閒頁面鍊錶和已修改頁面鍊錶採用可變分配和基於先進先出的區域性置換策略,並規定被淘汰頁先不做物理移動,而是依據是否修改分別掛到空閒頁面鍊錶或已修改頁面鍊錶的末尾,空閒頁面鍊錶同時用於物理塊分配,當已修改頁面煉表達到一定長度如z個頁面時,一起將所有已修改頁面寫回磁碟,故可顯著減少磁碟i/o操作次數。
(1) 全域性共享函式
void initmemo();//初始化儲存空間,主要是設定分配空間的大小
void generate();//生成訪問序列
bool isinmemo (int n); //指定頁號是否已經在記憶體中
(2) 最佳置換演算法
void optimal (int n); //訪問乙個頁面,執行一次最佳置換演算法
void mainoptimal();//演算法實現函式
(3) 先進先出置換演算法
void initqueue (pqueue q);//初始化佇列
void qpush (pqueue q, int num);//佇列中加入新的頁面結點
void qpop (pqueue q);//將頁面移出記憶體
void qdestroy (pqueue q);//銷毀佇列
bool findqueue (pqueue q, int num);//查詢頁面是否已經調入記憶體
void mainfifo();//每訪問乙個頁面,執行一次演算法
void fifo (pqueue q, int num);//先進先出置換演算法實現函式
(4) 最近最久未使用置換演算法
void lru (int n);//lru演算法實現函式
void mainlru();//每訪問乙個新的頁面,執行一次演算法
(5) 改進型clock置換演算法
void updatedclock (int n);//改進型clock演算法實現函式
void mainclock();//每訪問乙個新的頁面,執行一次演算法
(6) 頁面緩衝演算法
bool isinpnodes (int n); //頁面是否已經在鍊錶中
void addlink (int data, int type);//頁面新增到已修改頁面鍊錶和空閒鍊錶上
void freeidle();//將空閒鍊錶上的所有頁面送出記憶體
void freemod();//將已修改頁面鍊錶上所有的鍊錶送出記憶體
void pba (int n);//pba演算法實現函式
void mainpba();//每訪問乙個新的頁面,執行一次演算法
(一)某次的程式執行結果如下
(1)最佳置換演算法
(2)先進先出演算法
(3)最近最久未使用置換演算法
(4)改進型clock置換演算法
(5)頁面緩衝置換演算法
(二)多次執行程式,生成不同的訪問序列,記錄每種演算法的缺頁情況,最終整理如下
(1)測試序列1
置換演算法
缺頁數缺頁率
最佳置換演算法
170.53125
先進先出置換演算法
210.65625
最近最久未使用演算法
220.6875
改進型clock置換演算法
210.65625
頁面緩衝置換演算法
150.46875
(2)測試序列2
置換演算法
缺頁數缺頁率
最佳置換演算法
140.4375
先進先出置換演算法
190.59375
最近最久未使用演算法
170.53125
改進型clock置換演算法
190.59375
頁面緩衝置換演算法
180.5625
(3)測試序列3
置換演算法
缺頁數缺頁率
最佳置換演算法
140.4375
先進先出置換演算法
170.53125
最近最久未使用演算法
150.46875
改進型clock置換演算法
180.5625
頁面緩衝置換演算法
160.5
注:訪問序列長度為32,預設初始分配給每種演算法的記憶體空間塊數為3。
(三)訪問序列長度為32,預設初始分配給每種演算法的記憶體空間塊數為5,執行結果如下
置換演算法
缺頁數缺頁率
最佳置換演算法
80.25
先進先出置換演算法
100.3125
最近最久未使用演算法
110.34375
改進型clock置換演算法
110.34375
頁面緩衝置換演算法
90.28125
訪問序列長度為32,預設初始分配給每種演算法的記憶體空間塊數為8,執行結果如下
置換演算法
缺頁數缺頁率
最佳置換演算法
20.0625
先進先出置換演算法
60.1875
最近最久未使用演算法
40.125
改進型clock置換演算法
40.125
頁面緩衝置換演算法
90.28125
根據實驗結果可以看出,對同一種演算法,對於不同的訪問序列,其缺頁率是不同,會有所變化。總的來看,最佳置換演算法的缺頁率是最低的,然後頁面緩衝演算法的缺頁率要低於其他置換演算法。改進型clock演算法稍微好於先進先出演算法和最近最久未使用演算法。先進先出演算法和最近最久未使用演算法效能相近。
同時對比不同記憶體塊數下的程式執行結果能夠看出,演算法的缺頁率與分配的記憶體塊數有關係,分配的記憶體塊數越多,缺頁率越低。
作業系統實驗3 頁面置換演算法模擬程式
目的 熟悉頁面置換演算法及其實現,引入計算機系統效能評價方法的概念。內容 編制頁面置換演算法的模擬程式。要求 用隨機數方法產生頁面走向,頁面走向長度為l。根據頁面走向,分別採用fifo和lru演算法進行頁面置換,統計缺頁率。假定可用記憶體塊和頁表長度 作業的頁面數 分別為m和k,初始時,作業頁面都不...
作業系統 頁面置換演算法
1 最佳頁面置換演算法 opt 其所選擇的被淘汰頁面,將是以後永不再用的,或許是在最長 未來 時間內不再被訪問的頁面。最佳置換演算法是一種理想化的演算法,具有最好的效能,但難於實現。先進先出置換演算法最直觀,但可能性能最差,故應用極少。優點 保證獲得最低的缺頁率 缺點 無法預知乙個程序在記憶體的若干...
作業系統 頁面置換演算法
我在很多地方遇到了這個問題,所以想寫來看看,避免在以後換回再次的遇到這個問題,就在今天進行深入的了解下這個問題,我先它會對我以後的生活工作會有很大的幫助的。在位址對映過程中,若在頁面中發現所要訪問的頁面不再記憶體中,則產生缺頁中斷。當發生缺頁中斷時作業系統必須在記憶體中選擇乙個頁面將其移出記憶體,以...