資源簡介
通過編寫和調試請求頁式存儲管理的模擬程序以加深對請求頁式存儲管理方案的理解。
為了簡單起見。頁面淘汰算法采用 FIFO頁面淘汰算法,并且在淘汰一頁時,判斷它是否被改寫過,如果被修改過,將它寫回到輔存。
代碼片段和文件信息
#include?
#include?
#include?
#include“windows.h“?
#include??
#define?N?64?//可存頁數
struct?
{ int?lNumber;?//頁號?
int?pNumber;?//物理塊號?
int?dNumber;?//在磁盤上的位置?
int?write;?//修改標志?
int?flag;?//存在標志?
}page[N];?
int?pageQ[N];//頁面循環隊列存放內存中的頁數
int?next=0;//循環隊列下一個要置換的位置,初值為0
int?kuaishu=-1;//給pNumber依次賦值,kuaishu是page的角標
int?n=0;//這個n是創建的頁數
//******************************************************************
void?show_page(int?n)
{
cout<<“當前頁表內容為:“< for(int?i=0;i {
cout<<“page[“< cout<<“page[“< cout<<“page[“< }
}
//******************************************************************
void?page_FIFO(int?In)//In是被調入的page號
{
int?Out=pageQ[next];//記錄被置換出的page號
????pageQ[next]?=?In;//在隊列里需要把next處的值Out換成In
????if(page[Out].write)?
{
cout<<“將“< ????????page[Out].write?=?0;?//修改標記變為0
????????page[Out].flag??=?0;//已被調出內存,flag為0
}
cout<<“淘汰主存塊“< ????page[In].flag?=?1;??????//被調入內存,flag為1
????page[In].pNumber?=?page[Out].pNumber;//將調出的內存塊號轉給調入的
next=(next+1)%(kuaishu+1);//內存總塊數是kuaishu+1
}
//*******************************************************************
void?show_address(int?xieint?dizhi)
{
if(dizhi>(n*1024-1))??{cout<<“不存在該頁!“< int?logic_addryeweiyi;
ye=int(dizhi/1024);//頁
weiyi=dizhi%1024;//
評論
共有 條評論