亚洲一区爱区精品无码_无码熟妇人妻AV_日本免费一区二区三区最新_国产AV寂寞骚妇

頁面置換算法實(shí)驗(yàn)報(bào)告精選3篇(操作系統(tǒng)頁面置換算法實(shí)驗(yàn)報(bào)告總結(jié))

時(shí)間:2022-10-14 15:20:16 工作總結(jié)

  下面是范文網(wǎng)小編整理的頁面置換算法實(shí)驗(yàn)報(bào)告精選3篇(操作系統(tǒng)頁面置換算法實(shí)驗(yàn)報(bào)告總結(jié)),供大家品鑒。

頁面置換算法實(shí)驗(yàn)報(bào)告精選3篇(操作系統(tǒng)頁面置換算法實(shí)驗(yàn)報(bào)告總結(jié))

頁面置換算法實(shí)驗(yàn)報(bào)告精選1

  軟

  件

  學(xué)

  院

  上

  機(jī)

  實(shí)

  驗(yàn)

  報(bào)

  告

  課程名稱:

  操作系統(tǒng)原理

  實(shí)驗(yàn)項(xiàng)目:

  虛擬內(nèi)存頁面置換算法

  實(shí)

  驗(yàn)

  室:

  地獄 018

  姓

  名 :

  死神

  學(xué)

  號:

  專業(yè)班級 :

  實(shí)驗(yàn)時(shí)間:

  2015/12 / 13

  實(shí)驗(yàn)成績 評閱教師

一、

  實(shí)驗(yàn)?zāi)康眉耙?/p>

  通過這次實(shí)驗(yàn),加深對虛擬內(nèi)存頁面置換概念得理解,進(jìn)一步掌握先進(jìn)先出 FIFO、最佳置換OPI 與最近最久未使用LRU 頁面置換算法得實(shí)現(xiàn)方法。結(jié)合 Linux 得內(nèi)層得分析方法查瞧內(nèi)存得分配過程及 linux kernel 得內(nèi)存管理機(jī)制 二、實(shí)驗(yàn)性質(zhì)

  設(shè)計(jì)性 三、實(shí)驗(yàn)學(xué)時(shí)

  學(xué)時(shí) 四、實(shí)驗(yàn)環(huán)境

  實(shí)驗(yàn)環(huán)境1、實(shí)驗(yàn)環(huán)境:

  C 與C++程序設(shè)計(jì)學(xué)習(xí)與實(shí)驗(yàn)系統(tǒng) 2、知識準(zhǔn)備:(1)使用 Linux得基本命令;(2)了解 Linux vmstat、free、top等命令查瞧linux系統(tǒng)得內(nèi)存分配情況;(3)

  掌握虛擬內(nèi)存頁面置換算法 FIFO 等基本算法理論。

五、

  實(shí)驗(yàn)內(nèi)容及步驟

  假設(shè)有n個(gè)進(jìn)程分別在 T1, … ,Tn時(shí)刻到達(dá)系統(tǒng),它們需要得服務(wù)時(shí)間分別為S1,… ,Sn。分別采用先來先服務(wù) FCFS 與短作業(yè)優(yōu)先 SJF 進(jìn)程調(diào)度算法進(jìn)行調(diào)度,計(jì)算每個(gè)進(jìn)程得完成時(shí)間、周轉(zhuǎn)時(shí)間與帶權(quán)周轉(zhuǎn)時(shí)間,并且統(tǒng)計(jì) n 個(gè)進(jìn)程得平均周轉(zhuǎn)時(shí)間與平均帶權(quán)周轉(zhuǎn)時(shí)間。

  步驟

  通過已知最小物理塊數(shù)、頁面?zhèn)€數(shù)、頁面訪問序列、及采用置換方式可以得出頁面置換得缺頁次數(shù)與缺頁率,及每次缺頁時(shí)物理塊中存儲。

1.輸入得形式

?int

  PageOrder[MaxNumber];//頁面序列 int

PageNum,LackNum=0,BlockNum;//頁面?zhèn)€數(shù),缺頁次數(shù),最小物理塊數(shù) 2、輸出得形式 double

  LackPageRat(yī)e//缺頁率 缺頁個(gè)數(shù) 每次缺頁時(shí)物理塊中存儲

  程序所能達(dá)到得功能 模擬先進(jìn)先出 FIFO、最佳置換 OPI與最近最久未使用 LRU頁面置換算法得工作過程.假設(shè)內(nèi)存中分配給每個(gè)進(jìn)程得最小物理塊數(shù)為m,在進(jìn)程運(yùn)行過程中要訪問得頁面?zhèn)€數(shù)為 n,頁面訪問序列為P1, …,Pn,分別利用不同得頁面置換算法調(diào)度進(jìn)程得頁面訪問序列,給出頁面訪問序列得置換過程,計(jì)算每種算法缺頁次數(shù)與缺頁率。測試數(shù)據(jù),包括正確得輸入及其輸出結(jié)果與含有錯(cuò)誤得輸入及其輸出結(jié)果。

  程序中用到得所有抽象數(shù)據(jù)類型得定義、主程序得流程以及各程序模塊之間得層次(調(diào)用)關(guān)系.int

  PageOrder[MaxNumber];//頁面序列 int

PageCount[MaxNumber]={0};//計(jì)算內(nèi)存內(nèi)數(shù)據(jù)離下一次出現(xiàn)得距離 int

  PageNum,LackNum=0,BlockNum;//頁面?zhèn)€數(shù),缺頁次數(shù),最小物理塊數(shù) double

  LackPageRate=0; bool found=false;

  六、實(shí)驗(yàn)數(shù)據(jù)及結(jié)果分析

  運(yùn)行截圖:

  圖6、1

  圖6、2

  圖6、3 七、實(shí)驗(yàn)總結(jié)

  這次試驗(yàn),讓我加深了對虛擬內(nèi)存頁面置換算法得理解,進(jìn)一步掌握先進(jìn)先出 FIFO、最佳置換 OPI 與最近最久未使用 LRU 頁面置換算法得實(shí)現(xiàn)方法。熟悉 Linux需要經(jīng)過大量得實(shí)驗(yàn)、改進(jìn)與思考,在編寫代碼得過程中遇到了一些問題要積極面對并通過討論上網(wǎng)或者問老師解決。通過這次試驗(yàn)我了解了虛擬內(nèi)存置換算法得一些知識,就是我對于所學(xué)習(xí)得專業(yè)知識得到了更好得鞏固與提升。

  附錄 源程序清單 #include <iostream> using namespace std;#define MaxNumber 100 void OPI(int

  PageOrder[MaxNumber],int

  PageCount[MaxNumber],?

  int

  PageNum,int LackNum,int BlockNum,double

  LackPageRate,bool found)

{

int module[MaxNumber];

  int sum=0;

  int i,j,k,m;

  for(i=0;i

  module[i]=PageOrder[i];

;++mus??)++j;i=

  Cout<〈module[j]<〈”

";

;ldne<〈tuoc?

  LackNum=BlockNum;

  for(i=BlockNum;i〈PageNum;i++)

  found=false;

  for(j=0;j<BlockNum;j++)//遍歷已存儲,判斷就是否缺頁

? ??

if(module[j]==PageOrder[i])

{

??

  found=true;

?

?

  break;

?

?? }

?

  if(found==false)//缺頁,選擇替換

{

?

for(j=0;j〈BlockNum;j++)

//計(jì)算內(nèi)存內(nèi)數(shù)據(jù)離下一次出現(xiàn)得距離

  PageCount[j]=0;

for(k=i+1;k

??? ?

?

  if(module[j]!=PageOrder[k])

??

  PageCount[j]++;

?

  esle?

;kaerb?

?

}

;]0[tnuoCegaP=xam tni?

  int kind=0;

  值大最出找//)++j;muNkcolB〈j;0=j(rof?

{

?

  if(PageCount[j]>max)

?

??

;]j[tnuoCegaP=xam?? ?

?

  kind=j(luò);

?

?

  module[kind]=PageOrder[i];

?

  LackNum++;)++m;3

;”

”<<]m[eludom<〈tuoc??

?;ldne<

?

  LackPageRate=(LackNum*1、0)/PageNum;

  Cout〈〈“該算法缺頁次數(shù)為:"<〈LackNum<<endl;

  Cout<<”該算法缺頁率為:"〈<LackPageRat(yī)e*100<〈'%”〈〈endl;} /******************************先進(jìn)先出置換算法*************************************/ void FIFO(int

  PageOrder[MaxNumber],int

  PageCount[MaxNumber],egaPkcaL

  elbuod ,muNkcolB tni,muNkcaL tni,muNegaP

  tni?Rate,bool found){

  int module[MaxNumber];

  int sum=0;

  int i,j,m;

  for(i=0;i〈BlockNum;i++)//將內(nèi)存填滿

{

  module[i]=PageOrder[i];

;++mus??

  PageCount[i]=3-i;)++j;i=<j;0=j(rof?

  Cout<<module[j]<<"

“;

cout<<endl;

}

  LackNum=BlockNum;

  for(i=BlockNum;i〈PageNum;i++)

  found=false;

for(j=0;j〈BlockNum;j++)//遍歷已存儲,判斷就是否缺頁

{

?

if(module[j]==PageOrder[i])

?

{

?

;eurt=dnuof?? ?

  break;

}

}

  if(found==false)//缺頁,選擇替換

?

;]0[tnuoCegaP=xam tni?

int kind=0;

  值大最出找//)++j;muNkcolB〈j;0=j(rof?

?

if(PageCount[j]>max)

;]j[tnuoCegaP=xam?? ??

  kind=j;

???

}

?

  for(int k=0;k<BlockNum;k++)//不就是最大值,則要+1

?

{

?

?

if(k!=kind)

  PageCount[k]++;

?

?

  module[kind]=PageOrder[i];

  PageCount[kind]=0;// 替換之后已經(jīng)查詢得次數(shù)改為0

  LackNum++;

?

for(m=0; m〈3;m++)

?

;”

”<〈]m[eludom〈

;ldne〈〈tuoc?? }

? } ?

  LackPageRate=(LackNum*1、0)/PageNum;

  Cout〈〈“該算法缺頁次數(shù)為:”<<LackNum<

  Cout<<”該算法缺頁率為:"<

  PageOrder[MaxNumber],int

  PageCount[MaxNumber],egaPkcaL

  elbuod,muNkcolB tni,muNkcaL tni,muNegaP

  tni??Rate,bool found){

  int module[MaxNumber];

  int sum=0;

  int i,j,m;

  for(i=0;i<BlockNum;i++)//將內(nèi)存填滿

{

  module[i]=PageOrder[i];

?

  sum++;

PageCount[i]=3—i;)++j;i=<j;0=j(rof?

  Cout〈〈module[j]〈〈”

”;

;ldne〈<tuoc??

  LackNum=BlockNum;

  for(i=BlockNum;i

found=false;

  for(j=0;j<BlockNum;j++)//遍歷已存儲,判斷就是否缺頁

{

?

  if(module[j]==PageOrder[i])

??

?

  found=true;

PageCount[j]=0;//查詢后,更改次數(shù)

??

for(int k=0;k〈BlockNum;k++)

?

{

?? ??)j=!k(fi??

PageCount[k]++;

?

}

?

  break;

?

?

}

?

  if(found==false)//缺頁,選擇替換

?

;]0[tnuoCegaP=xam tni??

  int kind=0;

  值大最出找//)++j;muNkcolB

??)xam〉]j[tnuoCegaP(fi??

{

?

?;]j[tnuoCegaP=xam?

??

  kind=j;

? }

??

  for(int k=0;k

?

if(k!=kind)

  PageCount[k]++;

??

?

  module[kind]=PageOrder[i];

  PageCount[kind]=0;// 替換之后未查詢得次數(shù)改為0

;++muNkcaL??

  for(m=0; m<3;m++)

?

  Cout〈

”;

?;ldne<〈tuoc? }

? } ?

  LackPageRate=(LackNum*1、0)/PageNum;

cout<〈“該算法缺頁次數(shù)為:"<

  Cout〈<”該算法缺頁率為:”〈<LackPageRate*100〈<“%’<<endl;} int main()

{

  int

  PageOrder[MaxNumber];//頁面序列

  int

  PageCount[MaxNumber]={0};//計(jì)算內(nèi)存內(nèi)數(shù)據(jù)離下一次出現(xiàn)得距離

  int

  PageNum,LackNum=0,BlockNum;//頁面?zhèn)€數(shù),缺頁次數(shù),最小物理塊數(shù)

;0=etaRegaPkcaL

  elbuod? bool found=false;

;3ecoihc,2ecoihc,0=1ecoihc tni?

int i=0;)0==1ecoihc(elihw? {

;”:入輸新重:1,入輸不:0;據(jù)數(shù)入輸新重否是就“〈〈tuoc? cin〉>chioce2;

  if(chioce2==1)

{?

  Cout<<”請輸入頁面?zhèn)€數(shù):”;

;muNegaP >>nic?;“數(shù)塊理物小最入輸請”〈〈tuoc? ;muNkcolB>>nic? cout<〈”請輸入頁面序列:”<

  for(i=0;i〈PageNum;i++)

;]i[redrOegaP>〉nic? }?;”:URL-3,IPO—2,OFIF-1:法算擇選請"<

  if(chioce3==1)

colB,muNkcaL,muNegaP,tnuoCegaP,redrOegaP(OFIF?kNum,LackPageRat(yī)e,found);

  else

if(chioce3==2)

colB ,muNkcaL,muNegaP,tnuoCegaP,redrOegaP(IPO?kNum,LackPageRate, found);

  esle?

,muNkcolB ,muNkcaL,muNegaP,tnuoCegaP,redrOegaP(URL?LackPageRate,found);

} *************************************“〈<tuoc?****************************”<<endl;

;"束結(jié):1,續(xù)繼:0:束結(jié)是就還續(xù)繼擇選請"<chioce1;

} }

頁面置換算法實(shí)驗(yàn)報(bào)告精選2

  計(jì)算機(jī)體系結(jié)構(gòu)

  實(shí)驗(yàn)報(bào)告

  班級:計(jì)科姓名:張華敏學(xué)號:

  0902班

  0

  fIFU算法

  一,實(shí)驗(yàn)內(nèi)容:

  編寫一段程序來模擬頁面置換算法中的FIFU算法的實(shí)現(xiàn) 二,算法設(shè)計(jì):

  設(shè)置一個(gè)產(chǎn)生隨機(jī)數(shù)的函數(shù)rand()產(chǎn)生隨機(jī)數(shù)來模擬程序所需訪問的頁面的標(biāo)號,如果頁面需要被訪問則把頁面中的一個(gè)標(biāo)志位設(shè)為in表示他已經(jīng)被調(diào)入內(nèi)存,如果再次需要訪問此頁面是只需檢查此頁面的標(biāo)志位是否為in就可判斷它是否已經(jīng)存在在內(nèi)存中了,如果已經(jīng)存在則可直接使用,如果不存在則需調(diào)入,在調(diào)入新頁面是先檢查內(nèi)存空間是否已滿,如果未滿則直接調(diào)入,如果已經(jīng)滿了則需選擇一個(gè)頁面將其調(diào)出,調(diào)出時(shí)就把頁面的標(biāo)志位設(shè)為out。選擇頁面的規(guī)則是:將進(jìn)入內(nèi)存時(shí)間最久的頁面調(diào)出去,為了達(dá)到這一目的,在頁面中設(shè)置一個(gè)計(jì)數(shù)器,每當(dāng)有新頁面調(diào)入內(nèi)存時(shí)則將內(nèi)存中已經(jīng)存在的頁面計(jì)數(shù)器自動(dòng)加一,調(diào)出頁面時(shí)就選擇那個(gè)計(jì)數(shù)器最大值的頁面,調(diào)出后重新將計(jì)數(shù)器設(shè)為零。三,遇到的問題及解決方案:

  在做此實(shí)驗(yàn)時(shí)遇到了一些小問題,如在C語言中函數(shù)名定義為export()則會報(bào)錯(cuò)。在調(diào)用有返回值的函數(shù)是如果直接int s=use(pag)則會運(yùn)行出錯(cuò),要先分開寫如:int s,s=use(pag).四,源代碼 頭文件.cpp #include<> #include<>

  int t;//全局變量,用來盛放rand()函數(shù)產(chǎn)生的隨機(jī)數(shù)

  enum boolean{in,out};//定義一個(gè)枚舉類型 /////////如果把in,out換成 true,false則會處錯(cuò)誤

  typedef struct { int num;//頁面編號 char content;//頁面內(nèi)容

  enum boolean flog;//判斷此頁面是否頁調(diào)入,調(diào)入為true,否則為false;int count;//頁面計(jì)數(shù)器

  int usebit;//使用位,被使用過值為1,否則為0 }page;

#include<> #include<> #include<> #include“頭文件.cpp”

  int capacity=3;//設(shè)置內(nèi)存最多可以容納的頁面數(shù)

  void initialize(page p[])//初始化頁面函數(shù) { for(int i=0;i<5;i++)//初始化頁面,頁面內(nèi)容分別為小寫字母 abcde,計(jì)數(shù)器全部為0 {p[i].num=i;p[i].content=i+97;p[i].flog=out;p[i].count=0;} }

  int use(page p[]){ t=rand()%5;//產(chǎn)生一個(gè)0-5的隨機(jī)數(shù),if(p[t].flog==in){ printf(“tt%d頁面命中n”,t);//for(int i=0;i<5;i++)//調(diào)入此頁面后其他以在內(nèi)存中存在的頁面計(jì)數(shù)器加1 // { // if(p[i].flog==in)// p[i].count++;// } return(1);} else return(0);}

  void import(page p[])//調(diào)入頁面的函數(shù) { /* int t=rand()%5;//產(chǎn)生一個(gè)0-5的隨機(jī)數(shù),if(p[t].flog==in)printf(“tt%d頁面命中n”,t);*/ // if(p[t].flog==out)//如果此頁面未被調(diào)入內(nèi)存則立即調(diào)入 p[t].flog=in;capacity--;//調(diào)入后內(nèi)存空間減少一葉

  for(int i=0;i<5;i++)//調(diào)入此頁面后其他以在內(nèi)存中存在的頁面計(jì)數(shù)器加1 { if(p[i].flog==in&&p[i].num!=t)p[i].count++;} printf(“頁面%d被調(diào)入內(nèi)存n”,t);}

  void port(page p[])//調(diào)出頁面的函數(shù),,,,,,,,,,,如果函數(shù)名定義為export則處錯(cuò)誤 { int x=0,y;//x用來暫時(shí)存放計(jì)數(shù)器 中的最大值,y存放此頁面的頁面號 for(int i=0;i<5;i++)//尋找計(jì)數(shù)器值最大的 頁面 { if(p[i].count>x){ x=p[i].count;y=i;} }

  P[y].flog=out;//修改調(diào)入符號 p[y].count=0;capacity++;//調(diào)入后內(nèi)存空間增加一葉 printf(“ttt頁面%d被調(diào)出內(nèi)存n”,y);}

  main(){ int s;long t3,t1,t2;page pag[5];//定義五個(gè)頁面,,,,,,,,,,,如果這個(gè)定義在子函數(shù)之前那么不用通過參數(shù) 子函數(shù)便可以直接訪問 t3=time(NULL);initialize(pag);do { t1=time(NULL);s=use(pag);//,,,,,,,,,,,,,,如果這里寫成int s=use(pag)則會運(yùn)行出錯(cuò)

//printf(“s=%d capacity=%dn”,s,capacity);if(capacity>0&&s==0)import(pag);else { if(capacity==0&&s==0){ port(pag);import(pag);} } t2=time(NULL);while(t2-t1<1){ t2=time(NULL);} }while(t2-t3<20);system(“pause”);}

  五,測試結(jié)果:

  LFU算法

  一,實(shí)驗(yàn)內(nèi)容:

  編寫一段程序來模擬頁面置換算法中的LFU算法的實(shí)現(xiàn) 二,算法設(shè)計(jì):

  設(shè)置一個(gè)產(chǎn)生隨機(jī)數(shù)的函數(shù)rand()產(chǎn)生隨機(jī)數(shù)來模擬程序所需訪問的頁面的標(biāo)號,如果頁面需要被訪問則把頁面中的一個(gè)標(biāo)志位設(shè)為in表示他已經(jīng)被調(diào)入內(nèi)存,如果再次需要訪問此頁面是只需檢查此頁面的標(biāo)志位是否為in就可判斷它是否已經(jīng)存在在內(nèi)存中了,如果已經(jīng)存在則可直接使用,如果不存在則需調(diào)入,在調(diào)入新頁面是先檢查內(nèi)存空間是否已滿,如果未滿則直接調(diào)入,如果已經(jīng)滿了則需選擇一個(gè)頁面將其調(diào)出,調(diào)出時(shí)就把頁面的標(biāo)志位設(shè)為out。選擇頁面的規(guī)則是:將最近一段時(shí)間未被訪問過的頁面調(diào)出。為了達(dá)到這一目的在頁面中設(shè)置一個(gè)標(biāo)志位,如果頁面在近期只要被訪問過則將該標(biāo)志位設(shè)置為1(默認(rèn)為0),在選擇調(diào)出頁面時(shí)只需將標(biāo)志位為0的頁面調(diào)出即可。三,遇到的問題及解決方案: 未遇到什么問題

  四,實(shí)驗(yàn)感悟:

  遇到問題后上網(wǎng)查資料和有效,及時(shí)查不到自己想要的但是也可從相關(guān)結(jié)果中獲得啟發(fā)給自己靈感來想到解決問題的方法.四,源代碼

#include<> #include<> #include<> #include“頭文件.cpp”

  int capacity=3;

//設(shè)置內(nèi)存最多可以容納的頁面數(shù)

  void initialize(page p[])

//初始化頁面函數(shù)

{

  for(int i=0;i<5;i++)

//初始化頁面,頁面內(nèi)容分別為小寫字母 abcde,計(jì)數(shù)器全部為0

{p[i].num=i;

  P[i].content=i+97;

  P[i].flog=out;

  P[i].count=0;

  P[i].usebit=0;

}

}

  int use(page p[]){

  t=rand()%5;

//產(chǎn)生一個(gè)0-5的隨機(jī)數(shù),if(p[t].flog==in)

{

  Printf(“tt%d頁面命中n”,t);

  P[t].usebit=1;

//for(int i=0;i<5;i++)//調(diào)入此頁面后其他以在內(nèi)存中存在的頁面計(jì)數(shù)器加1

//

{

//

  if(p[i].flog==in)

//

  P[i].count++;

//

}

  return(1);

}

  else

  return(0);

}

  void import(page p[])//調(diào)入頁面的函數(shù)

{

  int t=rand()%5;

//產(chǎn)生一個(gè)0-5的隨機(jī)數(shù),//if(p[t].flog==in)

// {

//

  Printf(“tt%d頁面命中n”,t);

//

  P[t].usebit=1;

// }

// if(p[t].flog==out)

//如果此頁面未被調(diào)入內(nèi)存則立即調(diào)入

  P[t].flog=in;

  Capacity--;

//調(diào)入后內(nèi)存空間減少一葉

  for(int i=0;i<5;i++)//調(diào)入此頁面后其他以在內(nèi)存中存在的頁面計(jì)數(shù)器加1

{

  if(p[i].flog==in&&p[i].num!=t)

  P[i].count++;

}

  Printf(“頁面%d被調(diào)入內(nèi)存n”,t);

}

  void port(page p[])

//調(diào)出頁面的函數(shù)

////////////////////////////////如果函數(shù)名定義為export則處錯(cuò)誤

{

  int x=0,y;//x用來暫時(shí)存放計(jì)數(shù)器 中的最大值,y存放此頁面的頁面號

  int z=-1;

//用來判斷近期是否有未被訪問過的頁面

  int g=0;

  for(int i=0;i<5;i++)//尋找計(jì)數(shù)器值最大的 頁面

{

  if(p[i].count>x)

{

  x=p[i].count;

  y=i;

}

}

  for(int i=0;i<5;i++)

{

  if(p[i].flog==in&&p[i].usebit==0)

{

  z=i;

  g++;

}

}

  if(z==-1||g==3)//如果所有頁面均為1則按照FIFO算法置換頁面 //如果g=3則表明頁面使用位全為零,此時(shí)也按照FIFO算法置換頁面

{

  P[y].flog=out;//修改調(diào)入符號

  P[y].count=0;

  Capacity++;

//調(diào)入后內(nèi)存空間增加一葉

  P[y].usebit=0;

  for(int i=0;i<5;i++)//將所有頁面置0

  P[i].usebit=0;

  Printf(“ttt頁面%d被調(diào)出內(nèi)存n”,y);

}

  else

//如果有頁面為0則將此頁面置換出來

{

  P[z].flog=out;//修改調(diào)入符號

  P[z].count=0;

  Capacity++;

//調(diào)入后內(nèi)存空間增加一葉

  Printf(“ttt頁面%d被調(diào)出內(nèi)存n”,z);

}

}

  main(){

  int s;

  Long t3,t1,t2;

  Page pag[5];//定義五個(gè)頁面

///////////////////如果這個(gè)定義在子函數(shù)之前那么不用通過參數(shù) 子函數(shù)便可以直接訪問

  t3=time(NULL);

  initialize(pag);

  do

{

  t1=time(NULL);

  s=use(pag);

  if(capacity>0&&s==0)

  import(pag);

  else

{

  if(capacity==0&&s==0)

{

  Port(pag);

  import(pag);

}

}

  t2=time(NULL);

  while(t2-t1<1)

{

  t2=time(NULL);

}

}while(t2-t3<20);

  system(“pause”);}

  六,實(shí)驗(yàn)結(jié)果

  總結(jié)

  通過本次試驗(yàn)我對各種頁面置換算法有了更深入的了解,也使得自己認(rèn)識到平常學(xué)習(xí)到某些東西覺得懂了會了可是一旦實(shí)際動(dòng)手操作起來就會發(fā)現(xiàn)總會存在這樣或者那樣的錯(cuò)誤,只有多動(dòng)手實(shí)際操作才會發(fā)現(xiàn)不足發(fā)現(xiàn)錯(cuò)誤并且改正。查漏補(bǔ)缺提高自己的實(shí)際動(dòng)手能力。

頁面置換算法實(shí)驗(yàn)報(bào)告精選3

  操作系統(tǒng)課程第七次實(shí)驗(yàn)報(bào)告

  姓名

  學(xué)號

  系

  計(jì)算機(jī)

  任課教師

  指導(dǎo)教師

  評閱教師

  實(shí)驗(yàn)地點(diǎn)

  綜合樓B102

  實(shí)驗(yàn)時(shí)間

  2012-9-26

  實(shí)驗(yàn)課表現(xiàn)

  出勤和個(gè)人表現(xiàn)Q1(15+15(組長評分)=30分)

  得分:

  實(shí)驗(yàn)

  總分

(Q1+Q2+Q3+Q4)

  實(shí)驗(yàn)完成情況Q2(45分(組長與教師評分的加權(quán)平均))

  得分:

  實(shí)驗(yàn)編號與實(shí)驗(yàn)名稱:

  實(shí)驗(yàn)七、常用頁面置換算法模擬實(shí)驗(yàn)

  實(shí)驗(yàn)?zāi)康模?/p>

  通過模擬實(shí)現(xiàn)請求頁式存儲管理的幾種基本頁面置換算法,了解虛擬存儲技術(shù)的特點(diǎn),掌握虛擬存儲請求頁式存儲管理中幾種基本頁面置換算法的基本思想和實(shí)現(xiàn)過程,并比較它們的效率。

  實(shí)驗(yàn)內(nèi)容及要求(詳見實(shí)驗(yàn)講義與實(shí)驗(yàn)指導(dǎo)書):

  要求:

  1)要求用你熟悉的程序設(shè)計(jì)語言編寫和調(diào)試一個(gè)頁面置換模擬程序;要求在主函數(shù)中測試。

  2)實(shí)驗(yàn)報(bào)告中必須包括:設(shè)計(jì)思想、數(shù)據(jù)定義(包括詳細(xì)說明)、處理流程(詳細(xì)算法描述和算法流程圖)、源代碼、運(yùn)行結(jié)果、體會等部分。

  3)必須模擬本實(shí)驗(yàn)內(nèi)容中提到的算法中的至少2種頁面置換算法。

  4)

  比較不同頁面置換算法的效率

  內(nèi)容:編寫一個(gè)程序,使用以下頁面置換算法中的某2種分別模擬一個(gè)分頁系統(tǒng),并統(tǒng)計(jì)同一個(gè)頁面訪問序列情況下不同頁面置換算法引發(fā)的缺頁中斷次數(shù)。

  1、第二次機(jī)會算法(Second

  Chance)

  2、最近最少使用算法(Least

  recently

  Used,LRU)

  3、最不常用算法(Not

  frequently

  Used,NFU)

  4、最近未使用算法(Not

  recently

  Used,NRU)

  5、時(shí)鐘頁面置換算法

  6、老化算法(aging)

  頁框的數(shù)量固定為4,虛擬頁面數(shù)為8。實(shí)驗(yàn)輸入為訪問頁面序列,比如0,1,3,2,7,1

  實(shí)驗(yàn)用到的軟件(:)

  devC++,Visio

  實(shí)驗(yàn)內(nèi)容及關(guān)鍵步驟(代碼)Q3(15分)

  得分:

  流程圖:輸入頁面訪問序列

  取訪問的頁號

  查頁表

  是否缺頁?

  是

  置缺頁標(biāo)志flag為’*’

  按算法不同淘汰一頁面

  調(diào)入所訪問的頁面

  否

  fIFO算法流程圖

  LRU算法流程圖:

  函數(shù)關(guān)系解釋圖:

  實(shí)現(xiàn)結(jié)果:

  圖1

  圖2

  代碼:

#include

<>

#include

<>

#define

  mEMORY_SIZE

/*物理塊數(shù)*/

#define

  PROESS_SIZE

/*頁面號引用串個(gè)數(shù)*/#include

<>

#include

<>

/*全局變量*/

  int

  mSIZE=4;

  int

  PSIZE=8;

  static

  int

  memery[4]={0};

/*物理塊中的頁號*/

  static

  int

  Page[8]={0};

/*頁面號引用串*/

  static

  int

  temp[8][4]={0};

/*輔助數(shù)組*/

/*置換算法函數(shù)*/

  void

  fIFO();

  void

  LRU();

  void

  OPT();

  void

  designBy();

/*輔助函數(shù)*/

  void

  Print(unsigned

  int

  t);

/*主函數(shù)*/

  int

  main()

{

  int

  i,k,code;

  designBy();

  system(“color

  0A“);

  Puts(“請依次輸入頁面號(8個(gè)):“);

  for(i=0;i

  scanf(“%1d“,&page[i]);

  system(“cls“);

  system(“color

  0E“);

  do{

  Puts(“輸入的頁面號引用串為:“);

  for(k=0;k<=(pSIZE-1)/20;k++)

{

  for(i=20*k;(i

{

  if(((i+1)%20==0)||(((i+1)%20)&&(i==pSIZE-1)))

  Printf(“%d\n“,page[i]);

  else

  Printf(“%d

“,page[i]);

}

}

  Printf(“*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*\n“);

  Printf(“*

  請選擇頁面置換算法:\t\t\t

*\n“);

  Printf(“*

-----------------------------------------

*\n“);

  Printf(“*

  1.先進(jìn)先出(FIFO)

  2.最近最久未使用(LRU)

*\n“);

  Printf(“*

  3.退出

*\n“);

  Printf(“*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*

*\n“);

  Printf(“請選擇操作:[

]\b\b“);

  scanf(“%d“,&code);

  switch(code)

{

  Case

  1:

  fIFO();

  break;

  Case

  2:

  LRU();

  break;

  Case

  3:

  system(“cls“);

  system(“color

  0A“);

  exit(0);

  default:

  Printf(“輸入錯(cuò)誤,請重新輸入:“);

}

  Printf(“按任意鍵重新選擇置換算法:>>>“);

  getch();

  system(“cls“);

}while

(code!=3);

  getch();

}

  void

  Print(unsigned

  int

  t)

{

  int

  i,j,k,l;

  int

  flag;

  for(k=0;k<=(pSIZE-1)/20;k++)

{

  for(i=20*k;(i

{

  if(((i+1)%20==0)||(((i+1)%20)&&(i==pSIZE-1)))

  Printf(“%d\n“,page[i]);

  else

  Printf(“%d

“,page[i]);

}

  for(j=0;j

{

  for(i=20*k;(i{

  if(i>=j)

  Printf(“

  |%d|“,temp[i][j]);

  else

  Printf(“

  |

  |“);

}

  for(i=mSIZE+20*k;(i

{

  for(flag=0,l=0;l

  if(temp[i][l]==temp[i-1][l])

  flag++;

  if(flag==mSIZE)/*頁面在物理塊中*/

  Printf(“

“);

  else

  Printf(“

  |%d|“,temp[i][j]);

}

/*每行顯示20個(gè)*/

  if(i%20==0)

  Continue;

  Printf(“\n“);

}

}

  Printf(“----------------------------------------\n“);

  Printf(“缺頁次數(shù):%d\t\t“,t+mSIZE);

  Printf(“缺頁率:%d/%d\n“,t+mSIZE,pSIZE);

  Printf(“置換次數(shù):%d\t\t“,t);

  Printf(“訪問命中率:%d%%\n“,(pSIZE-(t+mSIZE))*100/pSIZE);

  Printf(“----------------------------------------\n“);

}

/*先進(jìn)先出頁面置換算法*/

  void

  fIFO()

{

  int

  memery[10]={0};

  int

  time[10]={0};

/*記錄進(jìn)入物理塊的時(shí)間*/

  int

  i,j,k,m;

  int

  max=0;

/*記錄換出頁*/

  int

  Count=0;

/*記錄置換次數(shù)*/

/*前mSIZE個(gè)數(shù)直接放入*/

  for(i=0;i

{

  memery[i]=page[i];

  time[i]=i;

  for(j=0;j

  temp[i][j]=memery[j];

}

  for(i=mSIZE;i

{

/*判斷新頁面號是否在物理塊中*/

  for(j=0,k=0;j

{

  if(memery[j]!=page[i])

  k++;

}

  if(k==mSIZE)

/*如果不在物理塊中*/

{

  Count++;

/*計(jì)算換出頁*/

  max=time[0]

  for(m=2;m

  if(time[m]

  max=m;

  memery[max]=page[i];

  time[max]=i;

/*記錄該頁進(jìn)入物理塊的時(shí)間*/

  for(j=0;j

  temp[i][j]=memery[j];

}

  else

{

  for(j=0;j

  temp[i][j]=memery[j];

}

}

  Print(count);

}

/*最近最久未使用置換算法*/

  void

  LRU()

{

  int

  memery[10]={0};

  int

  flag[10]={0};

/*記錄頁面的訪問時(shí)間*/

  int

  i,j,k,m;

  int

  max=0;

/*記錄換出頁*/

  int

  Count=0;

/*記錄置換次數(shù)*/

/*前mSIZE個(gè)數(shù)直接放入*/

  for(i=0;i

{

  memery[i]=page[i];

  flag[i]=i;

  for(j=0;j

  temp[i][j]=memery[j];

}

  for(i=mSIZE;i

{

/*判斷新頁面號是否在物理塊中*/

  for(j=0,k=0;j

{

  if(memery[j]!=page[i])

  k++;

  else

  flag[j]=i;

/*刷新該頁的訪問時(shí)間*/

}

  if(k==mSIZE)

/*如果不在物理塊中*/

{

  Count++;

/*計(jì)算換出頁*/

  max=flag[0]

  for(m=2;m

  if(flag[m]

  max=m;

  memery[max]=page[i];

  flag[max]=i;

/*記錄該頁的訪問時(shí)間*/

  for(j=0;j

  temp[i][j]=memery[j];

}

  else

{

  for(j=0;j

  temp[i][j]=memery[j];

}

}

//

  Compute();

  Print(count);

}

/*顯示設(shè)計(jì)者信息*/

  void

  designBy()

{

  Printf(“┏━━━━━━━━━━━━━━━━━━━━━━━━━┓\n“);

  Printf(“┃㊣

  實(shí)驗(yàn)七:頁面置換算法

㊣┃\n“);

  Printf(“┃

  學(xué)號:

┃\n“);

  Printf(“┃

  姓名:黃浩全

>┃\n“);

  Printf(“┣━━━━━━━━━━━━━━━━━━━━━━━━━┫\n“);

}

  實(shí)驗(yàn)過程中遇到的問題解決辦法與實(shí)驗(yàn)體會Q4(需手寫,10分)

  得分:

  1、在FIFO算法可以很容易用數(shù)組實(shí)現(xiàn),而LRU算法可以用數(shù)組實(shí)現(xiàn),不過用結(jié)構(gòu)體會更明顯簡單。結(jié)構(gòu)體成員變量可以記錄頁號進(jìn)入的時(shí)間,和最近使用的記錄。相對比數(shù)組更容易理解和實(shí)現(xiàn)。

  2:首先,F(xiàn)IFO(先進(jìn)先出)算法和LRU(最近未使用算法)兩者之間,F(xiàn)IFO算法明顯會比LRU容易理解,而且比LRU算法較容易實(shí)現(xiàn),但在性能方面,LRU的確在優(yōu)化方面做的比較理想。再且在考慮頁框和頁表號之間的問題用代碼可以容易模擬,但是真是在物理內(nèi)存塊中是如何實(shí)現(xiàn),那確實(shí)是很難以理解,需要真正理解到內(nèi)存內(nèi)部的知識才知道這兩個(gè)算法是怎么實(shí)現(xiàn)的。

  評閱教師特殊評語:

  評閱教師:

  日

  期:

頁面置換算法實(shí)驗(yàn)報(bào)告精選3篇(操作系統(tǒng)頁面置換算法實(shí)驗(yàn)報(bào)告總結(jié))相關(guān)文章:

食品工藝學(xué)實(shí)驗(yàn)報(bào)告心得體會4篇 食品工藝學(xué)實(shí)驗(yàn)報(bào)告心得體會怎么寫

電子商務(wù)實(shí)驗(yàn)報(bào)告3篇 電子商務(wù)實(shí)驗(yàn)結(jié)果及分析

精選金工實(shí)習(xí)報(bào)告范文4篇 金工實(shí)習(xí)實(shí)驗(yàn)報(bào)告答案

證券投資學(xué)實(shí)驗(yàn)報(bào)告3篇(證券投資學(xué)實(shí)驗(yàn)報(bào)告基本分析)

C語言基礎(chǔ)實(shí)驗(yàn)報(bào)告3篇 初識c語言實(shí)驗(yàn)報(bào)告

網(wǎng)頁制作實(shí)驗(yàn)報(bào)告總結(jié)4篇 html網(wǎng)頁制作實(shí)驗(yàn)報(bào)告總結(jié)

ERP實(shí)驗(yàn)報(bào)告3篇(ERP的實(shí)驗(yàn)報(bào)告)

大學(xué)生企業(yè)經(jīng)營模擬實(shí)訓(xùn)報(bào)告6篇(企業(yè)模擬經(jīng)營實(shí)訓(xùn)實(shí)驗(yàn)報(bào)告)

《植物角里的科學(xué)問題》教學(xué)反思2篇(植物角里的科學(xué)問題實(shí)驗(yàn)報(bào)告)

會計(jì)電算實(shí)習(xí)報(bào)告范文3篇(電算會計(jì)實(shí)訓(xùn)實(shí)驗(yàn)報(bào)告)