作業系統課程設計五 請求分頁系統中的置換演算法

2022-05-07 20:36:09 字數 2292 閱讀 7428

1.通過如下方法產生一指令序列,共 320 條指令。

a. 在[1,32k-2]的指令位址之間隨機選取一起點,訪問 m;

b. 順序訪問m+1;

c. 在[0,m-1]中隨機選取m1,訪問 m1;

d. 順序訪問m1+1;

e. 在[m1+2,32k-2]中隨機選取m2,訪問 m2;

f. 順序訪問m2+1;

g. 重複 a—f,直到執行 320 次指令。

2. 指令序列變換成頁位址流設:

(1)頁面大小為 1k;

(2) 分配給使用者的記憶體頁塊個數為 4 頁到 32 頁,步長為1頁;

(3)使用者虛存容量為 32k。

計算並輸出下述各種演算法在不同記憶體頁塊下的命中率。

a. 先進先出(fifo)頁面置換演算法

b. 最近最久未使用(lru)頁面置換演算法

c. 最佳(optimal)頁面置換演算法

程式功能:

採用題目要求在隨機生成的指令序列,頁面大小為 1k,分配給使用者的記憶體頁塊個數為 4 頁到 32 頁,步長為1頁。使用者虛存容量為 32k。分別計算先進先出(fifo)頁面置換演算法,b.最近最久未使用(lru)頁面置換演算法,c.最佳(optimal)頁面置換演算法在不同記憶體頁塊下的命中率。以**形式給出。

設計思路:

希望程式設計出的效果為依次列印不同記憶體頁塊下三種演算法的命中率,主程式中只需要設計乙個迴圈,呼叫函式計算,依次列印即可。

設計乙個預處理函式,按照題目要求設計出320個隨機的指令序列。取用srand(time(0));設定時間種子。使用隨機函式rand()%m得到0~m-1的隨機數(mfifo演算法,用鍊錶模擬佇列。初始化之後,每次取得下乙個指令,檢查佇列中存在對應的頁號,如果存在命中次數加1,否則刪除佇列中最後乙個頁號,插入當前頁號。

lru演算法,選擇最近且最久未被使用的頁面進行淘汰。利用區域性性原理,根據乙個作業在執行過程中過去的頁面訪問歷史來推測未來的行為。它認為過去一段時間裡不曾被訪問過的頁面,在最近的將來可能也不會再被訪問。所以,這種演算法的實質是:當需要淘汰乙個頁面時,總是選擇在最近一段時間內最久不用的頁面予以淘汰。 設定乙個結構體,儲存指令所在的頁號和在佇列中沒有被訪問的次數。如果需要淘汰,每次淘汰沒有被訪問次數最多的頁號。

opt演算法:從主存中移出永遠不再需要的頁面;如無這樣的頁面存在,則選擇最長時間不需要訪問的頁面。於所選擇的被淘汰頁面將是以後永不使用的,或者是在最長時間內不再被訪問的頁面,這樣可以保證獲得最低的缺頁率。每次淘汰時,評估每乙個頁號將來的位置,選擇最長時間不需要訪問的頁面淘汰。

程式只需要整合乙個初始化函式和三個頁面置換演算法函式即可。

#include #include#include#include#include#include#include#includeusing namespace std;

const int minn=4;

const int maxx=32;

const int n=320;

int ins[2*n];

double hit_num=0;

const int max_add=32766;//32k-2

struct node;

void get_input()

for(int i=0;itemp;

for(int i=0;i::iterator it=find(temp.begin(),temp.end(),ins[i]);

if(it==temp.end())else

}hit_num=hit_num/n;

hit_num*=100;

return hit_num;

}double lru(int page)

bool flag=false;

for(it=temp.begin();it!=temp.end();it++)

}if(!flag)

}temp.erase(max_it);

temp.push_back(node);}}

hit_num=hit_num*1.0/n;

hit_num*=100;

return hit_num;

}double opt(int page)

}temp.erase(ans);

temp.push_back(ins[i]);

}else

}hit_num=hit_num*1.0/n;

hit_num*=100;

return hit_num;

}int main()

return 0;

}

作業系統課程設計

實驗 一 程序管理與程序同步 實驗目的 了解程序管理的實現方法,理解和掌握處理程序同步問題的方法並完成程式設計。實驗內容 實現銀行家演算法 程序排程的過程模擬。實驗步驟 理解銀行家演算法的核心機制 設計相應資料結構 程式設計實現 測試。理解程序的三狀態排程過程 設計排程演算法 程式設計實現 測試。實...

作業系統課程設計

1 實驗內容 學習程序管理的設計與實現,學習和運用作業系統原理,設計乙個作業系統子系統的模擬系統。通過該系統的設計除錯可增加對作業系統實現的感知性。設計乙個允許n個程序併發執行的程序管理的模擬系統。該系統包括簡單的程序控制 同步及通訊機構,其程序排程演算法可任意選擇。分析系統所需的資料結構 演算法的...

作業系統 請求分頁管理(續)

最小物理塊數的確定 物理塊的分配策略 物理塊分配演算法 按比例分配演算法 考慮優先權的分配演算法 何時調入頁面 請求調頁策略 從何處調入頁面 頁面調入過程 在缺頁調入記憶體後,利用修改後的頁表,去形成所要訪問資料的實體地址,再去訪問記憶體資料 請求分頁中的位址變換過程 頁面緩衝演算法 pba pag...