本來是乙個師妹提的問題,順便就把這個更加鞏固一下,經典的頁面置換演算法
#include#include#include#define invalid -1
#define true 1
#define false 0
using namespace std;
struct page //頁面控制塊結構
;page pageone[32];
struct page_connect
;page_connect pagecon[32];
page_connect *free_head,*busy_head,*busy_tail;
int initialize(int);
int fifo(int i);
int lru(int i);
int opt(int i);
int nru(int i);
int arr[320];//arr陣列用來存指令
int pagetotal[320]; //pagetotal陣列用來存每條指令對應的頁面
int pageoffset[320]; //pageoffset陣列用來存每條指令對應的偏移量
int main()
for(int i=0;i<320;i++)//將指令序列變成頁位址流
for(int i=0;i<320;i++)
coutpageone[busy_head->hit].page_number=invalid;//將頭指標指向的頁面置為無效
free_head=busy_head;//釋放了第乙個頁面,將空閒指標指向它
free_head->next=null; //除了free指標所指,再無空閒頁面
busy_head=p;//busy_head指標指向其下乙個頁面
}p=free_head->next;//當前存在空閒頁面,將p指標指向下乙個空閒頁面
free_head->hit=pagetotal[i];
pagecon[pagetotal[i]].page_number=free_head->page_number;
free_head->next=null;
if(busy_tail==null)//當頁面都空閒的時候
busy_tail=busy_head=free_head;//將三個指標都指向空閒頁面,即第乙個空閒頁面
else
free_head=p;
}} cout<<"fifo hit rate="<<1-(double)count/320free_head=&pagecon[pageone[min_index].page_number];//將空間指標指向時間最小的記憶體頁面
pageone[min_index].page_number=invalid;//將該下標對應的頁面號設定為無效
pageone[min_index].time=0;//把該頁面時間設定為0
free_head->next=null; //空間指標的next指向空
}pageone[pagetotal[i]].page_number=free_head->page_number;//將i指令對應的頁面的頁面號置為有效
pageone[pagetotal[i]].time=present_time;
free_head=free_head->next; //指向空間頁面的指標指向下一位
}} else //找到空間頁面
}cout<<"lru hit rate="<<1-(double)count/320} }
cout<<"opt hit rate="<<1-(double)count/320}
pageone[pagetotal[i]].page_number=free_head->page_number;//當有空閒頁面,該頁面存當前頁面
free_head->hit=pagetotal[i];//空閒指標的hit位儲存i指令對應的頁面
free_head=free_head->next;
} else//頁面未失效,在記憶體頁面中可以找到
pageone[pagetotal[i]].counter=1;//將其counter值設定為1
if(i%50==0)//i每過50,就將每個頁面的counter值置為0,週期性清零
for(int j=0;j<32;j++)
pageone[j].counter=0;
} cout<<"nru hit rate="<<1-(double)count/320<
頁面置換演算法
常用的頁面置換演算法有三種 先進先出演算法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 理想置換演算法 這是一種理想情況下的頁...