2023年操作系統(tǒng)實(shí)驗(yàn)三面置換算法實(shí)驗(yàn)報(bào)告_第1頁(yè)
2023年操作系統(tǒng)實(shí)驗(yàn)三面置換算法實(shí)驗(yàn)報(bào)告_第2頁(yè)
2023年操作系統(tǒng)實(shí)驗(yàn)三面置換算法實(shí)驗(yàn)報(bào)告_第3頁(yè)
2023年操作系統(tǒng)實(shí)驗(yàn)三面置換算法實(shí)驗(yàn)報(bào)告_第4頁(yè)
2023年操作系統(tǒng)實(shí)驗(yàn)三面置換算法實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩16頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

實(shí)驗(yàn)三實(shí)驗(yàn)報(bào)告實(shí)驗(yàn)源碼:#include"stdio.h"#include<iostream.h>#include<stdlib.h>#defineDat(yī)aMax100//常量DataMax#defineBlockNum10//常量BlockNumintDataShow[BlockNum][DataMax];//用于存儲(chǔ)要顯示的數(shù)組boolDataShowEnable[BlockNum][DataMax];//用于存儲(chǔ)數(shù)組中的數(shù)據(jù)是否需要顯示intData[DataMax];//保存數(shù)據(jù)intBlock[BlockNum];//物理塊intcount[BlockNum];//計(jì)數(shù)器intN;//頁(yè)面?zhèn)€數(shù)intM;//最小物理塊數(shù)intChangeTimes;//缺頁(yè)次數(shù)voidDat(yī)aInput();//輸入數(shù)據(jù)的函數(shù)voidDataOutput();//輸出數(shù)據(jù)的函數(shù)voidFIFO();//FIFO函數(shù)voidOptimal();//Optimal函數(shù)voidLRU();//LRU函數(shù)intmain(intargc,char*argv[]){?DataInput(); intmenu;?while(true) {??printf("\n*菜單選擇*\n"); ?printf("*******************************************************\n");??printf("*1-Optimal*\n");? printf("*2-FIFO*\n"); printf("*3-LRU*\n");? printf("*4-返回上一級(jí)*\n");? printf("*0-EXIT*\n"); printf("*******************************************************\n");??scanf("%d",&menu);? ??switch(menu)??{ ??case1: Optimal();????break;? ?case2: ? FIFO(); ?? break; ? case3:????LRU(); break;? ?case0: ? ?exit(0);??? break; case4:? system("cls"); ???DataInput();????break;??} if(menu!=1&&menu!=2&&menu!=3&&menu!=0&&menu!=4){? system("cls");???printf("\n請(qǐng)輸入0-4之間的整數(shù)!\n");? continue;??} } return0;}voidDataInput(){ inti,choice;?printf("請(qǐng)輸入最小物理塊數(shù):"); scanf("%d",&M);?//輸入最小物理塊數(shù)大于數(shù)據(jù)個(gè)數(shù)?while(M>BlockNum)?{? printf("物理塊數(shù)超過預(yù)定值,請(qǐng)重新輸入:");??scanf("%d",&M); } ?printf("請(qǐng)輸入頁(yè)面的個(gè)數(shù):"); scanf("%d",&N);?//輸入頁(yè)面的個(gè)數(shù)大于數(shù)據(jù)個(gè)數(shù) while(N>DataMax)?{??printf("頁(yè)面?zhèn)€數(shù)超過預(yù)定值,請(qǐng)重新輸入:");? scanf("%d",&N); }?printf("請(qǐng)選擇產(chǎn)生頁(yè)面訪問序列的方式(1.隨機(jī)2.輸入):"); scanf("%d",&choice); switch(choice) { case1:? //產(chǎn)生隨機(jī)訪問序列? for(i=0;i<N;i++) { ?Data[i]=(int)(((float)rand()/32767)*10);//隨機(jī)數(shù)大小在0-9之間??}??system("cls");??//顯示隨機(jī)產(chǎn)生的訪問序列 printf("\n隨機(jī)產(chǎn)生的訪問序列為:"); ?for(i=0;i<N;i++)??{? ?printf("%d",Data[i]);??} printf("\n"); ?break; case2:??//輸入訪問序列 ?printf("請(qǐng)輸入頁(yè)面訪問序列:\n"); for(i=0;i<N;i++) ?scanf("%d",&Data[i]);??system("cls");??//顯示輸入的訪問序列 printf("\n輸入的訪問序列為:"); ?for(i=0;i<N;i++)??{ ?printf("%d",Data[i]);??} printf("\n"); ?break; default: ?while(choice!=1&&choice!=2) ?{ ? printf("請(qǐng)輸入1或2選擇相應(yīng)方式:");?? scanf("%d",&choice);? }? break; }}voidDataOutput(){?inti,j; //對(duì)所有數(shù)據(jù)操作?for(i=0;i<N;i++)?{ ?printf("%d",Dat(yī)a[i]); }?printf("\n");?for(j=0;j<M;j++) {? //對(duì)所有數(shù)據(jù)操作 ?for(i=0;i<N;i++)??{? ?if(DataShowEnable[j][i])?? printf("%d",DataShow[j][i]);? else ? printf(""); } printf("\n"); } printf("缺頁(yè)次數(shù):%d\n",ChangeTimes); printf("缺頁(yè)率:%d%%\n",ChangeTimes*100/N);}//最佳置換算法voidOptimal(){?inti,j,k;?boolfind;?intpoint;?inttemp;//臨時(shí)變量,比較離的最遠(yuǎn)的時(shí)候用?intm=1,n;?ChangeTimes=0;?for(j=0;j<M;j++) {? for(i=0;i<N;i++) ?{ ? DataShowEnable[j][i]=false;//初始化為false,表達(dá)沒有要顯示的數(shù)據(jù)??}?}?for(i=0;i<M;i++) { ?count[i]=0;//初始化計(jì)數(shù)器 } //擬定當(dāng)前頁(yè)面是否在物理塊中,在繼續(xù),不在置換 /////////////////////////////////////////////////////////////////////////////////// Block[0]=Data[0];??for(i=1;m<M;i++)?{ ?intflag=1; for(n=0;n<m;n++)? { if(Data[i]==Block[n])flag=0;??} if(flag==0)continue;? Block[m]=Data[i]; m++; } ////////////////////////////////////////////////////////////////////////////////// //對(duì)所有數(shù)據(jù)進(jìn)行操作 for(i=0;i<N;i++)?{? //表達(dá)塊中有沒有該數(shù)據(jù) find=false; for(j=0;j<M;j++)? { if(Block[j]==Data[i]) {?? find=true;???} } ?if(find)continue;//塊中有該數(shù)據(jù),判斷下一個(gè)數(shù)據(jù) //塊中沒有該數(shù)據(jù),最優(yōu)算法? ChangeTimes++;//缺頁(yè)次數(shù)++? for(j=0;j<M;j++) ?{???//找到下一個(gè)值的位置? find=false; ?for(k=i;k<N;k++) ?{ ??if(Block[j]==Dat(yī)a[k]) ? {?? find=true;?? ? count[j]=k; ? break; }? }? if(!find)count[j]=N;??}??//由于i是從0開始記,而BlockNum指的是個(gè)數(shù),從1開始,所以i+1??if((i+1)>M) ?{ ??//獲得要替換的塊指針 temp=0;? ?for(j=0;j<M;j++)?? { if(temp<count[j]) ? {???? temp=count[j];?? ?point=j;//獲得離的最遠(yuǎn)的指針??? }???}? }? elsepoint=i; ?//替換 Block[point]=Data[i];? //保存要顯示的數(shù)據(jù)??for(j=0;j<M;j++) ?{ ??DataShow[j][i]=Block[j];???DataShowEnable[i<M?(j<=i?j:i):j][i]=true;//設(shè)立顯示數(shù)據(jù) }??}?//輸出信息 printf("\nOptimal=>\n"); Dat(yī)aOutput();}//先進(jìn)先出置換算法voidFIFO(){ inti,j;?boolfind;?intpoint; inttemp;//臨時(shí)變量?intm=1,n; ChangeTimes=0;?for(j=0;j<M;j++) {? for(i=0;i<N;i++) { ? DataShowEnable[j][i]=false;//初始化為false,表達(dá)沒有要顯示的數(shù)據(jù) ?} } ??for(i=0;i<M;i++) { count[i]=0;//大于等于BlockNum,表達(dá)塊中沒有數(shù)據(jù),或需被替換掉//所以經(jīng)這樣初始化(321),每次替換>=3的塊,替換后計(jì)數(shù)值置1, ?//同時(shí)其它的塊計(jì)數(shù)值加1,成了(132),見下面先進(jìn)先出程序段?} //擬定當(dāng)前頁(yè)面是否在物理塊中,在繼續(xù),不在置換?/////////////////////////////////////////////////////////////////////////////////// Block[0]=Data[0]; ?for(i=1;m<M;i++)?{? intflag=1; ?for(n=0;n<m;n++) ?{?? if(Dat(yī)a[i]==Block[n])flag=0;??}??if(flag==0)continue; Block[m]=Data[i];? m++;?} //////////////////////////////////////////////////////////////////////////////////?//對(duì)有所數(shù)據(jù)操作 for(i=0;i<N;i++) {? //增長(zhǎng)count ?for(j=0;j<M;j++)??{ ?count[j]++; ?} find=false;//表達(dá)塊中有沒有該數(shù)據(jù) ?for(j=0;j<M;j++) {? ?if(Block[j]==Data[i])?? { ??find=true; ? } ?}??//塊中有該數(shù)據(jù),判斷下一個(gè)數(shù)據(jù)? if(find)continue; //塊中沒有該數(shù)據(jù) ChangeTimes++;//缺頁(yè)次數(shù)++ ?//由于i是從0開始記,而M指的是個(gè)數(shù),從1開始,所以i+1 ?if((i+1)>M)? { ? //獲得要替換的塊指針 ??temp=0;? for(j=0;j<M;j++) ??{??? if(temp<count[j]) ? ?{ ????temp=count[j];? ?? point=j;//獲得離的最遠(yuǎn)的指針?? }?? } ?}??elsepoint=i;??//替換? Block[point]=Data[i]; ?? count[point]=0;//更新計(jì)數(shù)值 ? //保存要顯示的數(shù)據(jù) ?for(j=0;j<M;j++) ?{? ?DataShow[j][i]=Block[j]; DataShowEnable[i<M?(j<=i?j:i):j][i]=true;//設(shè)立顯示數(shù)據(jù)??} } //輸出信息 printf("\nFIFO=>\n");?Dat(yī)aOutput();}//最近最久未使用置換算法voidLRU(){ inti,j;?boolfind; intpoint;?inttemp;//臨時(shí)變量?intm=1,n; ChangeTimes=0;?for(j=0;j<M;j++) {? for(i=0;i<N;i++) ?{ ?DataShowEnable[j][i]=false;//初始化為false,表達(dá)沒有要顯示的數(shù)據(jù)? } }?for(i=0;i<M;i++)?{??count[i]=0;//初始化計(jì)數(shù)器 }?//擬定當(dāng)前頁(yè)面是否在物理塊中,在繼續(xù),不在置換 /////////////////////////////////////////////////////////////////////////////////// Block[0]=Dat(yī)a[0]; for(i=1;m<M;i++) {??intflag=1; for(n=0;n<m;n++) {?? if(Data[i]==Block[n])flag=0; } ?if(flag==0)continue;??Block[m]=Dat(yī)a[i];??m++;?} ////////////////////////////////////////////////////////////////////////////////// //對(duì)有所數(shù)據(jù)操作 for(i=0;i<N;i++)?{? /

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論