91av视频/亚洲h视频/操亚洲美女/外国一级黄色毛片 - 国产三级三级三级三级

  • 大小: 8KB
    文件類型: .cpp
    金幣: 1
    下載: 0 次
    發布日期: 2021-05-16
  • 語言: C/C++
  • 標簽: 請求調頁??

資源簡介

假設每個頁面中可存放10條指令,分配給作業的內存塊數為4。 用C語言語言模擬一個作業的執行過程,該作業共有320條指令, 即它的地址空間為32頁,目前它的所有頁都還未調入內存。在模擬過程中,如果所訪問的指令已在內存,則顯示其物理地址,并轉下一條指令。如果所訪問的指令還未裝入內存,則發生缺頁,此時需要記錄缺頁的次數,并將相應頁調入內存。如果4個內存塊均已裝入該作業,則需要進行頁面置換,最后顯示其物理地址,并轉向下一條指令。在所有320條指令執行完畢后,請計算并顯示作業運行過程中發生的缺頁率。 置換算法:請分別考慮最佳置換算法(OPT)、先進先出(FIFO)算法和最近最久未使用算法(LRU)。 作業中指令的訪問次序按下述原則生成: 50%的指令是順序執行的; 25%的指令是均勻分布在前地址部分; 25%的指令是均勻分布在后地址部分; 具體的實施方法是:    在[0,319]的指令地址之間隨機選取一起點m;    順序執行下一條指令,即執行地址序號為m+1的指令;    通過隨機數,跳轉到前地址部分[0,m+1]中的某條指令處,其序號為m1;    順序執行下一條指令,其地址序號為m1+1的指令;    通過隨機數,跳轉到后地址部分[m1+2,319]中的某條指令處,其序號為m2;    順序執行下一條指令,其地址序號為m2+1的指令; 重復跳轉到前地址部分,順序執行,跳轉到后地址部分,順序執行的過程直至執行320條指令。

資源截圖

代碼片段和文件信息

#include
#include
#define?Bsize?4

typedef?struct?BLOCK????????//定義物理塊結構體
{
????int?pageNum;????????????//頁號
????int?accessed_time;??????//訪問字段,其值表示多久未被訪問

}?BLOCK;

int?pc;?????????????????????//程序計數器,用來記錄指令的序號
int?n;??????????????????????//缺頁計數器,用來記錄缺頁的次數
static?int?temp[320];???????//用來存儲320條隨機數
BLOCK?block[Bsize];?????????//定義一大小為4的物理塊數組

void?init();????????????????//程序初始化函數
int?findExist(int?curpage);?//查找物理塊中是否有該頁面
int?findSpace();????????????//查找空閑物理塊
int?findReplace();??????????//查找應予置換的頁面
void?random();??????????????//產生320條隨機數顯示并存儲到temp[320]
void?show_Q_Page();?????????//顯示調用的頁面隊列
void?OPT();?????????????????//OPT算法
void?LRU();?????????????????//LRU算法
void?FIFO();????????????????//FIFO算法

void?init()
{
????//初始化內存物理塊數組,缺頁次數和程序計數器
????for(int?i?=?0;?i?????{
????????block[i].pageNum?=?-1;
????????block[i].accessed_time?=?0;
????????pc?=?n?=?0;
????}
}

int?findExist(int?curpage)
{
????//查找物理塊中是否有curpage頁面

????for(int?i?=?0;?i?????{
????????//若檢測到內存中有該頁面,返回在block中的位置
????????if(block[i].pageNum?==?curpage?)
????????????return?i;
????}
????return?-1;??????????????//若沒有則返回-1.
}

int?findSpace()
{
????//查找是否有空閑物理塊
????for(int?i?=?0;?i?????{
????????//若找到空閑的block,返回在block的位置
????????if(block[i].pageNum?==?-1)
????????????return?i;
????}
????return?-1;??????????????//否則返回-1.
}

int?findReplace()
{
????//找到應予置換頁面,即最近最久未使用的頁面,返回其所在塊的位置
????int?pos?=?0;
????for(int?i?=?0;?i?????{
????????if(block[i].accessed_time?>?block[pos].accessed_time)
????????????pos?=?i;
????}
????return?pos;
}

void?random()
{
????//產生320條隨機數顯示并存儲到temp[320]
????int?flag?=?0;
????scanf(“%d“?&pc);????????????????//在[0,319]的指令地址之間隨機選取一起點m
????printf(“?????????-?-?-?-?-?-?產生的320條指令序列:-?-?-?-?-\n“);
????for(int?i?=?0;?i?????{
????????temp[i]?=?pc;
????????if(flag?%?2?==?0)?pc?=?++pc?%?320;?//產生50%的順序執行指令(flag=0或2時順序執行)
????????if(flag?==?1)?pc?=?rand()?%?(pc?-?1);?//產生25%的均勻分布在前地址部分指令
????????if(flag?==?3)?pc?=?pc?+?1?+?(rand()?%?(320?-?(pc?+?1)));
????????//產生25%的均勻分布在后地址部分指令
????????flag?=?++flag?%?4;
????????printf(“?%03d“?temp[i]);
????????if((i?+?1)?%?15?==?0)?printf(“\n“);
????}
}

void?show_Q_Page()
{
????//顯示隨機數
????for(int?i?=?0;?i?????{
????????printf(“?%03d“?temp[i]?/?10);
????????if((i?+?1)?%?15?==?0)?printf(“\n“);
????}

}

void?OPT()
{???
????int?exist?space?position?;
????int?curpage;
????int?f?=?0;
????printf(“訪問頁???物理地址\t缺頁\t\t訪問頁???物理地址\t缺頁“);
????for(int?i?=?0;?i?????{
????????f++;
????????if(f?%?2?==?1)printf(“\n“);
????????if(i?%?100?==?0)?getchar();
????????pc?=?temp[i];
????????curpage?=?pc?/?10;
????????printf(“%4d“?curpage);
????????exist?=?findExist(curpage);//查找內存中是否有當前頁面
????????if(exist?==?-1)???????????//若沒有
????????{
????????????space?=?findSpace();???????????//在內存中查找是否有空閑塊
????????????if(space?!=?-1)????????

評論

共有 條評論