欧美色欧美亚洲高清在线观看,国产特黄特色a级在线视频,国产一区视频一区欧美,亚洲成a 人在线观看中文

  1. <ul id="fwlom"></ul>

    <object id="fwlom"></object>

    <span id="fwlom"></span><dfn id="fwlom"></dfn>

      <object id="fwlom"></object>

      頁(yè)面置換算法模擬

      時(shí)間:2019-05-12 02:40:20下載本文作者:會(huì)員上傳
      簡(jiǎn)介:寫(xiě)寫(xiě)幫文庫(kù)小編為你整理了多篇相關(guān)的《頁(yè)面置換算法模擬》,但愿對(duì)你工作學(xué)習(xí)有幫助,當(dāng)然你在寫(xiě)寫(xiě)幫文庫(kù)還可以找到更多《頁(yè)面置換算法模擬》。

      第一篇:頁(yè)面置換算法模擬

      “計(jì)算機(jī)操作系統(tǒng)”課程設(shè)計(jì)大作業(yè)

      一、題目: 頁(yè)面置換算法模擬實(shí)驗(yàn)

      二、目的

      分別采用最佳(Optimal)置換算法、先進(jìn)先出(FIFO)頁(yè)面置換算法和最近最少使用(LRU)置換算法對(duì)用戶輸入的頁(yè)面號(hào)請(qǐng)求序列進(jìn)行淘汰和置換,從而加深對(duì)頁(yè)面置換算法的理解。

      三、內(nèi)容和要求

      請(qǐng)用C/C++語(yǔ)言編一個(gè)頁(yè)面置換算法模擬程序。用戶通過(guò)鍵盤(pán)輸入分配的物理內(nèi)存總塊數(shù),再輸入用戶邏輯頁(yè)面號(hào)請(qǐng)求序列,然后分別采用最佳(Optimal)置換算法、先進(jìn)先出(FIFO)頁(yè)面置換算法和最近最少使用(LRU)置換算法三種算法對(duì)頁(yè)面請(qǐng)求序列進(jìn)行轉(zhuǎn)換,最后按照課本P150頁(yè)圖4-26的置換圖格式輸出每次頁(yè)面請(qǐng)求后各物理塊內(nèi)存放的虛頁(yè)號(hào),并算出每種算法的缺頁(yè)次數(shù)。最后評(píng)價(jià)三種頁(yè)面置換算法的優(yōu)缺點(diǎn)。

      三種頁(yè)面置換算法的思想可參考教材P149-P152頁(yè)。

      假設(shè)頁(yè)面號(hào)請(qǐng)求序列為4、3、2、1、4、3、5、4、3、2、1、5,當(dāng)分配給某進(jìn)程的物理塊數(shù)分別為3塊和4塊時(shí),試用自己編寫(xiě)的模擬程序進(jìn)行頁(yè)面轉(zhuǎn)換并輸出置換圖和缺頁(yè)次數(shù)。

      四、提交內(nèi)容 本大作業(yè)每個(gè)人必須單獨(dú)完成,大作業(yè)以WORD附件形式提交。最后需提交的內(nèi)容包括:算法算法思路及流程圖、數(shù)據(jù)結(jié)構(gòu)說(shuō)明、源程序(關(guān)鍵代碼需要注釋說(shuō)明)、運(yùn)行結(jié)果截圖、心得體會(huì)及總結(jié)。

      大作業(yè)嚴(yán)禁抄襲。發(fā)現(xiàn)抄襲一律以不及格論。

      請(qǐng)大家嚴(yán)格按照大作業(yè)題目來(lái)編寫(xiě)程序,不要上交以前布置的大作業(yè)。如果提交的大作業(yè)題目與本文檔要求不符,成績(jī)一律為不及格。

      請(qǐng)大家按時(shí)在網(wǎng)院網(wǎng)上系統(tǒng)里提交大作業(yè),過(guò)了規(guī)定時(shí)間將無(wú)法再補(bǔ)交大作業(yè)。

      頁(yè)面置換算法模擬實(shí)驗(yàn)

      算法算法思路

      模擬FIFOOPTLRU這3種頁(yè)面置換算法,先分配所需的內(nèi)存空間,在根據(jù)已知的序列,分別根據(jù)不同的頁(yè)面算法去訪問(wèn)已知序列,得出不同內(nèi)存空間的置換算法的缺頁(yè)數(shù)量??傮w流程圖

      開(kāi)始輸入內(nèi)存數(shù)執(zhí)行頁(yè)面置換FIFOLRUOPT顯示結(jié)果結(jié)束

      數(shù)據(jù)結(jié)構(gòu)說(shuō)明

      源程序(關(guān)鍵代碼需要注釋說(shuō)明)FIFO關(guān)鍵源碼

      LRU關(guān)鍵源碼

      OPT關(guān)鍵源碼

      程序源碼

      #include using namespace std;#define N 12 //默認(rèn)序列12 #define M 4 // 默認(rèn)開(kāi)辟4 內(nèi)存空間 struct page{ int pno;// 定義頁(yè)號(hào)

      int bno;//定義塊號(hào)

      int time;// 定義最近使用

      int status;//定義命中狀態(tài)

      int order;//定義優(yōu)先級(jí) };

      int list[12]={4,3,2,1,4,2,5,2,3,2,1,5};// 已知序列

      // 輸出方法

      void output(int *a ,int n){ for(int i=0;i

      cout<<*a<<'t';

      a++;} cout<<'n';}

      void fifo(int *list,int mem_num){

      page p[N];// 定義記錄數(shù)組

      int flag;int mem[M];// 定義內(nèi)存

      int index =0;// 默認(rèn)下標(biāo)

      int lack=0;// 初始化內(nèi)存

      for(int i=0;i

      mem[i]=0;} // 遍歷序列

      for(i=0;i

      flag=0;// 設(shè)置默認(rèn)命中 0

      for(int j=0;j

      if(list[i]==mem[j]){ // 檢測(cè)序列與已知內(nèi)存值,命中返回flag

      flag=1;

      break;

      }

      }

      if(flag==1){ // 判斷是否命中,則對(duì) p 賦值

      p[i].bno = j+1;

      p[i].pno = list[i];

      p[i].status =1;

      }else{

      p[i].pno = list[i];

      p[i].status = 0;

      mem[index] = list[i];

      p[i].bno = index+1;// 賦予 頁(yè)號(hào)

      index =(index+1)%mem_num;// 每次取余

      lack++;

      } }

      cout<<“FIFO算法:n”;cout<<“---**n”;cout<<“缺頁(yè)次數(shù):”<<'t'<

      cout<<“-----**n”;cout<<“序列號(hào)n”;

      cout<<“-----**n”;for(i=0;i

      cout<<“-----**n”;} for(i=mem_num;icout<<“-----**n”;}

      }

      struct mem{ int order;//內(nèi)存優(yōu)先級(jí) 主要用于識(shí)別是否不常用

      int pno;// 內(nèi)存頁(yè)號(hào)

      int time;// 記錄是否最近使用 };

      void lru(int *list,int mem_num){ page p[N];// 定義記錄數(shù)組

      int flag;mem m[M];// 定義內(nèi)存

      int index =0;// 默認(rèn)下標(biāo)

      int lack=0;int temp;int max=0;// 內(nèi)存賦值

      for(int i=0;i

      m[i].pno=0;

      //默認(rèn)初始優(yōu)先級(jí) 0

      m[i].order = 0;} for(i=0;i

      flag=0;

      for(int j=0;j

      if(list[i]==m[j].pno){

      flag=1;

      index=j;

      //m[j].order++;

      p[i].order =m[j].order;

      break;

      }

      }

      if(flag==1){ //命中后,p[i].bno = index+1;

      p[i].pno = list[i];

      p[i].status = 1;

      p[i].order--;

      temp = p[i].order;

      for(j=0;j

      if(p[j].order

      temp=p[j].order;

      index = p[j].bno;

      }

      }

      }else{

      p[i].status=0;

      p[i].pno = list[i];

      m[index].pno = list[i];

      m[index].order = p[i].order;

      p[i].bno = index+1;

      for(j=0;j

      if(m[j].order>max){

      index = j;

      }

      }

      index =(index+1)%mem_num;// 每次取余有效的下標(biāo)

      //max++;

      lack++;

      } } cout<<“LRU算法:n”;cout<<“---**n”;cout<<“缺頁(yè)次數(shù):”<<'t'<

      cout<<“-----**n”;cout<<“序列號(hào)n”;

      cout<<“-----**n”;for(i=0;i

      cout<<“-----**n”;} for(i=mem_num;ivoid opt(int *list,int mem_num){ page p[N];//定義頁(yè)面

      mem m[M];int flag=0;int index = 0;//下標(biāo)

      int max = N;int lack=0;for(int i=0;i

      m[i].pno=0;

      m[i].time = 0;//設(shè)置內(nèi)存使用頻率

      }

      for(i=0;i

      flag=0;

      for(int j=0;j

      if(list[i]==m[j].pno){

      flag=1;

      index = j;

      break;

      }

      }

      if(flag==1){

      p[i].status =1;

      p[i].bno = index+1;

      p[i].pno = list[i];

      for(j=0;j

      for(int g=i;g

      if(m[j].pno==list[g]){

      m[j].time = N-g;//獲取到 最近使用

      p[i].time = m[j].time;

      index = j;

      }

      }

      }

      }else{

      p[i].status =0;

      p[i].pno = list[i];

      m[index].pno = list[i];

      m[index].time = N;//設(shè)置默認(rèn)不使用

      p[i].bno =index+1;

      for(j=0;j

      if(m[j].time>max){

      index = j;

      }

      }

      index =(index+1)%mem_num;

      lack++;

      }

      } cout<<“OPT算法:n”;cout<<“---**n”;cout<<“缺頁(yè)次數(shù):”<<'t'<

      cout<<“-----**n”;cout<<“序列號(hào)n”;

      cout<<“-----**n”;for(i=0;i

      cout<<“-----**n”;} for(i=mem_num;icout<<“-----**n”;} }

      void main(){ int m;cout << “===========================n”;cout << “請(qǐng)輸入內(nèi)存大?。?/4)n”;cin >> m;cout << “===========================n”;opt(list,m);fifo(list,m);lru(list,m);

      }

      運(yùn)行結(jié)果截圖

      FIFO、LRU、OPT運(yùn)行截圖(開(kāi)辟3個(gè)內(nèi)存空間):

      FIFO、LRU、OPT運(yùn)行截圖(開(kāi)辟4個(gè)內(nèi)存空間):

      心得體會(huì)及總結(jié):

      在開(kāi)始做題目的時(shí)候,需要了解什么是FIOFOLRUOPT這3個(gè)頁(yè)面置換的知識(shí)點(diǎn),同時(shí)參考了網(wǎng)絡(luò)上許多實(shí)現(xiàn)過(guò)程技巧,并在在紙上面簡(jiǎn)單畫(huà)出頁(yè)面如何記錄如何與內(nèi)存置換,這樣子比較方便寫(xiě)出算法。由于這次設(shè)計(jì)的時(shí)間比較倉(cāng)促,其中不免會(huì)有些紕漏,比如在程序的實(shí)現(xiàn)上還不夠嚴(yán)謹(jǐn),出錯(cuò)處理不夠完善等多方面問(wèn)題,這些都有進(jìn)一步改善。同時(shí),在這次編寫(xiě)3個(gè)頁(yè)面算法的過(guò)程中,我學(xué)到了很多東西,無(wú)論在理論上還是實(shí)踐中,都得到不少的提高,這對(duì)以后的工作中會(huì)有一定的幫助。

      第二篇:頁(yè)面置換算法實(shí)驗(yàn)報(bào)告(精選)

      《操作系統(tǒng)--頁(yè)面置換算法》

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

      名: 范學(xué)升

      學(xué)

      號(hào):1001050903

      級(jí):電科10-1班

      業(yè):電子信息科學(xué)與技術(shù)

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

      1.通過(guò)模擬實(shí)現(xiàn)幾種基本頁(yè)面置換的算法,了解虛擬存儲(chǔ)技術(shù)的特點(diǎn)。

      2.掌握虛擬存儲(chǔ)請(qǐng)求頁(yè)式存儲(chǔ)管理中幾種基本頁(yè)面置換算法的基本思想,并至少用三種算法來(lái)模擬實(shí)現(xiàn)。

      3.通過(guò)對(duì)幾種置換算法頁(yè)面的比較,來(lái)對(duì)比他們的優(yōu)缺點(diǎn),并通過(guò)比較更換頻率來(lái)對(duì)比它們的效率。

      二、實(shí)驗(yàn)內(nèi)容:

      設(shè)計(jì)一個(gè)虛擬存儲(chǔ)區(qū)和內(nèi)存工作區(qū),并使用下述算法來(lái)模擬實(shí)現(xiàn)頁(yè)面的置換: 1.先進(jìn)先出的算法(FIFO)2.最近最久未使用算法(LRU)3.最佳置換算法(OPT)

      三、實(shí)驗(yàn)分析

      在進(jìn)程運(yùn)行過(guò)程中,若其所訪問(wèn)的頁(yè)面不存在內(nèi)存而需要把它們調(diào)入內(nèi)存,但內(nèi)存已無(wú)空閑時(shí),為了保證該進(jìn)程能夠正常運(yùn)行,系統(tǒng)必須從內(nèi)存中調(diào)出一頁(yè)程序或數(shù)據(jù)送磁盤(pán)的對(duì)換區(qū)中。但應(yīng)調(diào)出哪個(gè)頁(yè)面,需根據(jù)一定的算法來(lái)確定,算法的好壞,直接影響到系統(tǒng)的性能。

      一個(gè)好的頁(yè)面置換算法,應(yīng)該有較低的頁(yè)面更換頻率。

      假設(shè)分給一作業(yè)的物理塊數(shù)為3,頁(yè)面數(shù)為20個(gè)。頁(yè)面號(hào)為(20個(gè)):

      7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1

      1.先進(jìn)先出(FIFO)置換算法的思路

      該算法總是淘汰最先進(jìn)入內(nèi)存的頁(yè)面,即選擇在內(nèi)存中駐留時(shí)間最久的頁(yè)面予以淘汰。該算法實(shí)現(xiàn)簡(jiǎn)單,只需把一個(gè)進(jìn)程已調(diào)入內(nèi)存的頁(yè)面,按照先后次序連接成一個(gè)隊(duì)列,并設(shè)置一個(gè)替換指針,使它總指向最老的頁(yè)面。

      2.最近久未使用(LRU)置換算法的思路

      最近久未使用置換算法的替換規(guī)則,是根據(jù)頁(yè)面調(diào)入內(nèi)存后的使用情況來(lái)進(jìn)行決策的。該算法賦予每個(gè)頁(yè)面一個(gè)訪問(wèn)字段,用來(lái)記錄一個(gè)頁(yè)面自上次被訪問(wèn)以來(lái)所經(jīng)歷的時(shí)間,當(dāng)需淘汰一個(gè)頁(yè)面的時(shí)候選擇現(xiàn)有頁(yè)面中其時(shí)間值最大的進(jìn) 行淘汰。

      3.最佳(OPT)置換算法的思路

      其所選擇的被淘汰的頁(yè)面,獎(jiǎng)是以后不使用的,或者是在未來(lái)時(shí)間內(nèi)不再被訪問(wèn)的頁(yè)面,采用最佳算法,通??杀WC獲得最低的缺頁(yè)率。

      4.?dāng)?shù)據(jù)結(jié)構(gòu)

      struct pageInfor { int content;//頁(yè)面號(hào) int timer;//被訪問(wèn)標(biāo)記 };

      class PRA { public:

      PRA(void);int findSpace(void);//查找是否有空閑內(nèi)存

      int findExist(int curpage);//查找內(nèi)存中是否有該頁(yè)面 int findReplace(void);//查找應(yīng)予置換的頁(yè)面 void display(void);//顯示 void FIFO(void);//FIFO算法 void LRU(void);//LRU算法

      void BlockClear(void);//BLOCK清空,以便用另一種方法重新演示 pageInfor * block;//物理塊 pageInfor * page;//頁(yè)面號(hào)串 private: };

      5.FIFO頁(yè)面置換算法

      當(dāng)需要訪問(wèn)一個(gè)新的頁(yè)面時(shí),首先調(diào)用findExist(i)函數(shù)來(lái)查看物理塊中是否就有這個(gè)頁(yè)面,若要查看的頁(yè)面物理塊中就有,則調(diào)用display函數(shù)直接顯示,不需要替換頁(yè)面;如果要查看的頁(yè)面物理塊中沒(méi)有,就需要尋找空閑物理塊放入,若存在有空閑物理塊,則將頁(yè)面放入;若沒(méi)有空閑物理塊,則調(diào)用findReplace函數(shù)替換頁(yè)面。并將物理塊中所有頁(yè)面timer++。

      6.LRU頁(yè)面置換算法

      當(dāng)需要訪問(wèn)一個(gè)新的頁(yè)面,首先調(diào)用findExist(i)函數(shù)查看物理塊中是否就有這個(gè)頁(yè)面。

      7.OPT頁(yè)面置換算法

      當(dāng)需要訪問(wèn)一個(gè)新的頁(yè)面,首先調(diào)用findExist(i)函數(shù)來(lái)查看物理塊中是否有這個(gè)頁(yè)面。

      8.尋找置換頁(yè)面函數(shù)findReplace比較三個(gè)物理塊中的時(shí)間標(biāo)記timer,找到時(shí)間最久的。

      四、源程序結(jié)構(gòu)分析

      1. 程序結(jié)構(gòu)

      程序共有以下九個(gè)部分:

      int findSpace(void);//查找是否有空閑內(nèi)存

      int findExist(int curpage);//查找內(nèi)存中是否有該頁(yè)面 int findReplace(void);//查找應(yīng)予置換的頁(yè)面 void display(void);//顯示 void FIFO(void);//FIFO算法 void LRU(void);//LRU算法 void OPT(void);//OPT算法;

      void BlockClear(void);//BLOCK清空,以便用另一種方法重新演示 int main()

      //主程序

      五、實(shí)驗(yàn)結(jié)果

      1運(yùn)行后的初始界面 opt算法

      3.FIFO算法

      4LRU算法

      第三篇:頁(yè)面置換算法模擬,實(shí)驗(yàn)報(bào)告

      中北大學(xué)軟件學(xué)院 實(shí) 驗(yàn) 報(bào) 告

      業(yè)

      軟件工程

      課程名稱

      計(jì)算機(jī)操作系統(tǒng)

      學(xué)

      號(hào)

      輔導(dǎo)教師

      成績(jī)

      實(shí)驗(yàn)日期 2015、11、20 實(shí)驗(yàn)時(shí)間實(shí)驗(yàn)名稱 :實(shí)驗(yàn)四

      頁(yè)面置換算法模擬 2、實(shí)驗(yàn)?zāi)康?1)了解內(nèi)存分頁(yè)管理策略(2)掌握調(diào)頁(yè)策略(3)掌握一般常用得調(diào)度算法(4)學(xué)會(huì)各種存儲(chǔ)分配算法得實(shí)現(xiàn)方法。

      (5)了解頁(yè)面大小與內(nèi)存實(shí)際容量對(duì)命中率得影響。

      3、實(shí)驗(yàn)要求 編程實(shí)現(xiàn)頁(yè)面置換算法,最少實(shí)現(xiàn)兩種算法,比較算法得優(yōu)劣,并將調(diào)試結(jié)果顯示在計(jì)算機(jī)屏幕上,并檢測(cè)機(jī)算與筆算得一致性。

      (1)采用頁(yè)式分配存儲(chǔ)方案,通過(guò)分別計(jì)算不同算法得命中率來(lái)比較算法得優(yōu)劣,同時(shí)也考慮頁(yè)面大小及內(nèi)存實(shí)際容量對(duì)命中率得影響;(2)實(shí)現(xiàn) OPT 算法(最優(yōu)置換算法)、LRU 算法(Least Recently)、FIFO 算法(First IN First Out)得模擬;(3)使用某種編程語(yǔ)言模擬頁(yè)面置換算法.4、實(shí)驗(yàn)算法描述 (1)FIFO(先進(jìn)先出)

      Y

      N

      Y

      開(kāi)始 頁(yè)面走向存入數(shù)組 p[]中,內(nèi)存塊用page[]表示初始化為 0 當(dāng)前p[]中第i個(gè)元素就是否已在內(nèi)Page[]就是否有空把 page[]中最先裝入得頁(yè)面置換出去、i++ 把 p[i]得內(nèi)容直接裝入最上面一個(gè)空內(nèi)存塊,i++ 輸出當(dāng)前內(nèi)存塊狀態(tài) i++

      圖 4-1FIFO算法流程圖

      結(jié)束

      (2)

      LRU(最近最久未使用)

      Y

      N

      Y

      圖 4—2

      LRU 算法流程圖

      開(kāi)始 頁(yè)面走向存入數(shù)組 p[]中,內(nèi)存塊用 page[]表示初始化為 0 當(dāng)前 p[]中第 i 個(gè)元素就是否已在內(nèi)存 Page[]就是否有空把 page[]中最近最久未使用得頁(yè)面置換出去、i++ 把 p[i]得內(nèi)容直接裝入最上面一個(gè)空內(nèi)存塊,i++ 輸出當(dāng)前內(nèi)存塊狀態(tài)

      結(jié)束 i++

      (3)OPT(最佳置換算法)

      Y

      N

      Y

      圖4-3 OPT 流程圖

      開(kāi)始 頁(yè)面走向存入數(shù)組 p[]中,內(nèi)存塊用 page[]表示初始化為 0 當(dāng)前 p[]中第 i 個(gè)元素就是否已在內(nèi)存 Page[]就是否有空把 page[]中以后一段時(shí)間都不使用或就是使用時(shí)間離現(xiàn)在最遠(yuǎn)得換出、i++ 把 p[i]得內(nèi)容直接裝入最上面一個(gè)空內(nèi)存塊,i++ 輸出當(dāng)前內(nèi)存塊狀態(tài)

      結(jié)束 i++

      6、實(shí)驗(yàn)代碼 #include <iostream〉 using namespace std;#define Bsize 3 #define Psize 20 struct pageInfor {

      號(hào)面頁(yè)//

      ;tnetnoc tni? int timer;

      //被訪問(wèn)標(biāo)記 };class PRA{ public:

      PRA(void);

      存內(nèi)閑空有否是就找查//

      ;)diov(ecapSdnif tni? int findExist(int curpage);

      //查找內(nèi)存中就是否有該頁(yè)面

      int findReplace(void);

      //查找應(yīng)予置換得頁(yè)面

      void display(void);

      //顯示

      法算 OFIF//;)diov(OFIF diov? 法算 URL//;)diov(URL diov? void Optimal(void);//OPTIMAL 算法

      void BlockClear(void);//BLOCK 恢復(fù)

      pageInfor * block;//物理塊

      pageInfor * page;//頁(yè)面號(hào)串 private: };PRA::PRA(void){

      int QString[20]={7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1};

      block = new pageInfor[Bsize];)++i;ezisB<i;0=i tni(rof? {

      ;1— = tnetnoc、]i[kcolb? ;0 = remit、]i[kcolb?? }

      page = new pageInfor[Psize];)++i;ezisP〈i ;0=i(rof? {

      ;]i[gnirtSQ = tnetnoc、]i[egap?;0 = remit、]i[egap?? }?} int PRA::findSpace(void)

      {

      for(int i=0; i

      if(block[i]、content == -1)

      置位中 KCOLB回返,存內(nèi)閑空到找//;i nruter?;1— nruter?} int PRA::findExist(int curpage)

      {

      for(int i=0;i<Bsize; i++))tnetnoc、]egapruc[egap == tnetnoc、]i[kcolb(fi??

      置位中 KCOLB 回返,面頁(yè)該有中存內(nèi)到找//;i nruter? ;1— nruter?} int PRA::findReplace(void)

      {

      ;0 = sop tni? for(int i=0;i<Bsize; i++))remit、]sop[kcolb => remit、]i[kcolb(fi??

      ? pos = i;//找到應(yīng)予置換頁(yè)面,返回 BLOCK中位置

      return pos; } void PRA::display(void)

      {

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

      if(block[i]、content!=-1)

      ?;” ”<〈tnetnoc、]i[kcolb〈〈tuoc? ;ldne<<tuoc?} void PRA::Optimal(void){

      ; noitisop,ecaps,tsixe tni? for(int i=0; i

      {?;)i(tsixEdnif = tsixe??)1-=!

      tsixe(fi?

      {?

      ;ldne〈〈”頁(yè)缺不“<<tuoc? }??

      esle?

      {?? ?? space = findSpace();

      ?)1— =!

      ecaps(fi? ?

      {? ?

      ;]i[egap = ]ecaps[kcolb?

      ?

      ;)(yalpsid??

      ? }

      ?

      esle?

      {?? ?)++k ;ezisB<k ;0=k tni(rof?

      ? for(int j=i; j<Psize; j++)

      ?

      {???

      ??)tnetnoc、]j[egap =!tnetnoc、]k[kcolb(fi?

      { 為 REMIT 置設(shè),用會(huì)不來(lái)將//};0001 = remit、]k[kcolb??一個(gè)很大數(shù)

      ??

      esle?

      ??

      ??

      ?

      ? block[k]、timer = j;

      ?

      ?? break;

      } ??? }?????

      ? position = findReplace();

      ?

      ;]i[egap = ]noitisop[kcolb?

      ;)(yalpsid??

      }?? ? }

      }?} void PRA::LRU(void){

      int exist,space,position ;

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

      {? ? exist = findExist(i);)1- =!

      tsixe(fi?

      {

      ?? cout<<”不缺頁(yè)”<

      ?

      block[exist]、timer = —1;//恢復(fù)存在得并剛訪問(wèn)過(guò)得BLOCK 中頁(yè)面 TIMER 為-1

      ? }

      ? else

      {? ?? space = findSpace();?)1-=!ecaps(fi? ?

      {?;]i[egap = ]ecaps[kcolb?? ?

      ;)(yalpsid? ?? }

      ?

      esle?

      {??

      ;)(ecalpeRdnif = noitisop??

      ?

      block[position] = page[i];

      ?

      ;)(yalpsid?

      }??

      }?

      for(int j=0;j〈Bsize;j++)

      ;++remit、]j[kcolb?? }?} void PRA::FIFO(void)

      {

      int exist,space,position ;

      for(int i=0;i

      {?

      exist = findExist(i);

      ? if(exist!=-1)

      {cout<<"不缺頁(yè)"<

      esle?

      space = findSpace();

      ?)1-=!

      ecaps(fi? ?? {

      ?

      block[space] = page[i];

      ?

      ? display();

      }??

      esle?? ?

      ??

      position = findReplace();

      ??

      block[position] = page[i];

      ;)(yalpsid?? ?? }

      }?)++j;ezisB

      block[j]、timer++;//BLOCK 中所有頁(yè)面TIMER++

      }?} void PRA::BlockClear(void){

      for(int i=0;i

      {?

      block[i]、content =-1;

      ? block[i]、timer = 0;

      } void main(void){

      ;ldne<〈”:法 算 換 置 面 頁(yè)“<<tuoc? cout〈〈”頁(yè)面號(hào)引用串:7,0,1,2,0,3,0,4,2,3,0,3,2,1,2,0,1,7,0,1"<〈endl;

      cout〈〈”選擇<1>應(yīng)用 LRU 算法”〈<endl;

      cout<<”選擇<2〉應(yīng)用 FIFO 算法”〈

      cout<<”選擇<3>應(yīng)用 Optimal 算法“<〈endl;

      ;ldne<<"出退>0〈擇選”〈<tuoc? int select;

      PRA test;? while(select)

      ? cin〉>select;)tceles(hctiws?

      {?

      :0 esac??;kaerb? :1 esac???;ldne<<“:下如果結(jié)法算URL”<〈tuoc?

      ;)(URL、tset??

      ;)(raelCkcolB、tset??;ldne<<”---—-—--—-—--—-—-—-———“<

      ? break;

      :2 esac?

      cout<〈”FIFO 算法結(jié)果如下:“<<endl;

      test、FIFO();?;)(raelCkcolB、tset?

      ? cout<〈”-——-------—-—------—--”<〈endl;

      ?

      break;

      case 3:

      ;ldne〈<”:下如果結(jié)法算 lamitpO”<

      test、Optimal();

      ?

      ;)(raelCkcolB、tset??;ldne<<"----—------——--————---"〈〈tuoc??;kaerb?

      default:

      ?

      ;ldne〈<”號(hào)能功確正入輸請(qǐng)“<<tuoc?

      ;kaerb?? }?? } }

      6、實(shí)驗(yàn)結(jié)果

      7、實(shí)驗(yàn)心得 加深了對(duì)操作系統(tǒng)得認(rèn)識(shí),了解了操作系統(tǒng)中各種資源分配算法得實(shí)現(xiàn),特別就是對(duì)虛擬存儲(chǔ),頁(yè)面置換有了深入得了解,并能夠用高級(jí)語(yǔ)言進(jìn)行模擬演示。在這短短得兩周時(shí)間里,通過(guò)瀏覽、閱讀有關(guān)得資料,學(xué)到了很多東西,同時(shí)也發(fā)現(xiàn)僅僅書(shū)本得知識(shí)就是遠(yuǎn)遠(yuǎn)不夠得,需要把知識(shí)運(yùn)用到實(shí)踐中去,能力才能得到提高。

      使用 MFC可視化編程極大得減少了編寫(xiě)得代碼量,直觀得界面設(shè)計(jì),不但便于修改,而且簡(jiǎn)化了界面程序代碼得編寫(xiě) 兩種頁(yè)面置換算法 FIFO 與LRU理解起來(lái)相當(dāng)容易,但在實(shí)際編程實(shí)現(xiàn)得時(shí)候需要注意各種細(xì)節(jié),需要耐心細(xì)致,實(shí)際編程中遇到一些細(xì)節(jié)上得小問(wèn)題確實(shí)需要仔細(xì)考慮才行.

      第四篇:頁(yè)面置換算法實(shí)驗(yàn)報(bào)告

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

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

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

      0902班

      0909090814

      FIFU算法

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

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

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

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

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

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

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

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

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

      FIFU.cpp #include #include #include #include“頭文件.cpp”

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

      void initialize(page p[])//初始化頁(yè)面函數(shù) { for(int i=0;i<5;i++)//初始化頁(yè)面,頁(yè)面內(nèi)容分別為小寫(xiě)字母 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頁(yè)面命中n”,t);//for(int i=0;i<5;i++)//調(diào)入此頁(yè)面后其他以在內(nèi)存中存在的頁(yè)面計(jì)數(shù)器加1 // { // if(p[i].flog==in)// p[i].count++;// } return(1);} else return(0);}

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

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

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

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

      main(){ int s;long t3,t1,t2;page pag[5];//定義五個(gè)頁(yè)面,,,,,,,,,,,如果這個(gè)定義在子函數(shù)之前那么不用通過(guò)參數(shù) 子函數(shù)便可以直接訪問(wèn) t3=time(NULL);initialize(pag);do { t1=time(NULL);s=use(pag);//,,,,,,,,,,,,,,如果這里寫(xiě)成int s=use(pag)則會(huì)運(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”);}

      五,測(cè)試結(jié)果:

      LFU算法

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

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

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

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

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

      FLU.cpp #include #include #include #include“頭文件.cpp”

      int capacity=3;

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

      void initialize(page p[])

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

      {

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

      //初始化頁(yè)面,頁(yè)面內(nèi)容分別為小寫(xiě)字母 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頁(yè)面命中n”,t);

      p[t].usebit=1;

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

      //

      {

      //

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

      //

      p[i].count++;

      //

      }

      return(1);

      }

      else

      return(0);

      }

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

      {

      int t=rand()%5;

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

      // {

      //

      printf(“tt%d頁(yè)面命中n”,t);

      //

      p[t].usebit=1;

      // }

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

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

      p[t].flog=in;

      capacity--;

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

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

      {

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

      p[i].count++;

      }

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

      }

      void port(page p[])

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

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

      {

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

      int z=-1;

      //用來(lái)判斷近期是否有未被訪問(wèn)過(guò)的頁(yè)面

      int g=0;

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

      {

      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)//如果所有頁(yè)面均為1則按照FIFO算法置換頁(yè)面 //如果g=3則表明頁(yè)面使用位全為零,此時(shí)也按照FIFO算法置換頁(yè)面

      {

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

      p[y].count=0;

      capacity++;

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

      p[y].usebit=0;

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

      p[i].usebit=0;

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

      }

      else

      //如果有頁(yè)面為0則將此頁(yè)面置換出來(lái)

      {

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

      p[z].count=0;

      capacity++;

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

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

      }

      }

      main(){

      int s;

      long t3,t1,t2;

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

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

      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é)

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

      第五篇:實(shí)驗(yàn)5 頁(yè)面置換算法

      實(shí)驗(yàn)5

      頁(yè)面置換算法

      一、實(shí)驗(yàn)題目:頁(yè)面置換算法(請(qǐng)求分頁(yè))

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

      進(jìn)一步理解父子進(jìn)程之間的關(guān)系。

      1)理解內(nèi)存頁(yè)面調(diào)度的機(jī)理。2)掌握頁(yè)面置換算法的實(shí)現(xiàn)方法。3)通過(guò)實(shí)驗(yàn)比較不同調(diào)度算法的優(yōu)劣。4)培養(yǎng)綜合運(yùn)用所學(xué)知識(shí)的能力。

      頁(yè)面置換算法是虛擬存儲(chǔ)管理實(shí)現(xiàn)的關(guān)鍵,通過(guò)本次試驗(yàn)理解內(nèi)存頁(yè)面調(diào)度的機(jī)制,在模擬實(shí)現(xiàn)FIFO、LRU等經(jīng)典頁(yè)面置換算法的基礎(chǔ)上,比較各種置換算法的效率及優(yōu)缺點(diǎn),從而了解虛擬存儲(chǔ)實(shí)現(xiàn)的過(guò)程。將不同的置換算法放在不同的子進(jìn)程中加以模擬,培養(yǎng)綜合運(yùn)用所學(xué)知識(shí)的能力。

      三、實(shí)驗(yàn)內(nèi)容及要求

      這是一個(gè)綜合型實(shí)驗(yàn),要求在掌握父子進(jìn)程并發(fā)執(zhí)行機(jī)制和內(nèi)存頁(yè)面置換算法的基礎(chǔ)上,能綜合運(yùn)用這兩方面的知識(shí),自行編制程序。

      程序涉及一個(gè)父進(jìn)程和兩個(gè)子進(jìn)程。父進(jìn)程使用rand()函數(shù)隨機(jī)產(chǎn)生若干隨機(jī)數(shù),經(jīng)過(guò)處理后,存于一數(shù)組Acess_Series[]中,作為內(nèi)存頁(yè)面訪問(wèn)的序列。兩個(gè)子進(jìn)程根據(jù)這個(gè)訪問(wèn)序列,分別采用FIFO和LRU兩種不同的頁(yè)面置換算法對(duì)內(nèi)存頁(yè)面進(jìn)行調(diào)度。要求:

      1)每個(gè)子進(jìn)程應(yīng)能反映出頁(yè)面置換的過(guò)程,并統(tǒng)計(jì)頁(yè)面置換算法的命中或缺頁(yè)情況。

      設(shè)缺頁(yè)的次數(shù)為diseffect。總的頁(yè)面訪問(wèn)次數(shù)為total_instruction。缺頁(yè)率 = disaffect/total_instruction 命中率 = 1-disaffect/total_instruction 2)將為進(jìn)程分配的內(nèi)存頁(yè)面數(shù)mframe 作為程序的參數(shù),通過(guò)多次運(yùn)行程序,說(shuō)明FIFO算法存在的Belady現(xiàn)象。

      四、程序流程圖

      開(kāi)始創(chuàng)建子進(jìn)程1創(chuàng)建子進(jìn)程2

      結(jié)束 子進(jìn)程1邏輯頁(yè)面讀完?N命中?N內(nèi)存頁(yè)面滿?Y命中次數(shù)+1YY最先進(jìn)入的進(jìn)程退出內(nèi)存頁(yè)面N當(dāng)前調(diào)入頁(yè)面進(jìn)入內(nèi)存頁(yè)面退出 2邏輯頁(yè)面讀完?N命中?N內(nèi)存頁(yè)面滿?N當(dāng)前調(diào)入頁(yè)面進(jìn)入內(nèi)存頁(yè)面Y被訪問(wèn)次數(shù)最少的進(jìn)程退出內(nèi)存頁(yè)面Y命中次數(shù)+1,命中頁(yè)面訪問(wèn)數(shù)+1Y退出

      五、運(yùn)行結(jié)果及其說(shuō)明

      FIFO:

      LRU:

      六、回答以下問(wèn)題: ① 父進(jìn)程、子進(jìn)程之間的并發(fā)執(zhí)行的過(guò)程

      父進(jìn)程與子進(jìn)程之間的并發(fā)執(zhí)行宏觀并行,微觀串行。從宏觀來(lái)說(shuō),父進(jìn)程創(chuàng)建子進(jìn)程1,子進(jìn)程1和父進(jìn)程同時(shí)執(zhí)行,直到父進(jìn)程創(chuàng)建子進(jìn)程2遇到wait()函數(shù)掛機(jī)為止,當(dāng)子進(jìn)程1結(jié)束父進(jìn)程和子進(jìn)程2并發(fā)執(zhí)行到再次遇見(jiàn)wait()函數(shù)是掛起等待子進(jìn)程2結(jié)束,到子進(jìn)程2結(jié)束返回父進(jìn)程父進(jìn)程繼續(xù)執(zhí)行至結(jié)束。從微觀來(lái)說(shuō),父進(jìn)程先執(zhí)行至創(chuàng)建子進(jìn)程1,接下來(lái)父進(jìn)程掛起執(zhí)行子進(jìn)程1知道子進(jìn)程1結(jié)束回到父進(jìn)程;父進(jìn)程繼續(xù)執(zhí)行到創(chuàng)建子進(jìn)程2再次掛起,執(zhí)行子進(jìn)程2,直到子進(jìn)程2結(jié)束回到父進(jìn)程繼續(xù)執(zhí)行至結(jié)束。

      ② 通過(guò)完成實(shí)驗(yàn),根據(jù)你的體會(huì),闡述虛擬存儲(chǔ)器的原理。虛擬存儲(chǔ)器實(shí)際上是用來(lái)解決作業(yè)大而內(nèi)存小的問(wèn)題,他通過(guò)頁(yè)面置換算法來(lái)提供遠(yuǎn)大于內(nèi)存地址空間的地址范圍,針對(duì)不同的程序?qū)⒉煌臄?shù)據(jù)頁(yè)面讀取到虛擬存儲(chǔ)器中用來(lái)實(shí)現(xiàn)。

      ③ 寫(xiě)出FIFO算法中出現(xiàn)Belady現(xiàn)象的內(nèi)存頁(yè)面訪問(wèn)序列。

      4個(gè)內(nèi)存頁(yè)面數(shù):

      序列2 2 5 3 3 1 3 1 2 5 5 2 3個(gè)內(nèi)存頁(yè)面數(shù):

      序列2 1 3 2 1 4 3 1 3 1 5 5

      7次命中,命中率為0.58 6次命中,命中率為0.5

      七、程序源代碼、文檔注釋及文字說(shuō)明

      #include #include #include #include #include #include #include #include #define max_Frame 12 #define Frame 2

      main(){ srand(time(0));int pid1, pid2, fd[2], Acess_Series[12], temp;float effect, rate = 0;char str1[100], str2[100];struct M_Frame {

      int page_no;

      char flag;};struct M_Frame one_frame[4];one_frame[0].page_no = 0;one_frame[1].page_no = 0;one_frame[2].page_no = 0;one_frame[3].page_no = 0;effect = 0;int i = 0;printf(“內(nèi)存訪問(wèn)頁(yè)面序列:”);for(;i<12;i++){

      Acess_Series[i] = rand()% 5 + 1;

      printf(“%d ”, Acess_Series[i]);} while((pid1 = fork())==-1);if(pid1 == 0){

      int no = 0;

      int pno = 0;

      printf(“FIFO頁(yè)面置換算法:n”);

      for(;no<12;no++)

      {

      printf(“調(diào)入的頁(yè)面號(hào)是%d ”, Acess_Series[no]);

      int k = 0;

      for(;k <= Frame;k++)

      {

      if(one_frame[k].page_no == Acess_Series[no]){ effect++;printf(“命中n”);break;}

      if(one_frame[k].page_no == 0)

      {

      one_frame[k].page_no = Acess_Series[no];

      printf(“未命中n”);

      break;

      }

      if(k == Frame)

      {

      int j = 1;

      for(;j <= Frame;j++)

      {

      one_frame[j1].page_no;one_frame[t1].page_no = one_frame[j].page_no;

      }

      one_frame[Frame].page_no = Acess_Series[no];

      printf(“未命中n”);

      }

      }

      printf(“內(nèi)存情況為:%d |%d |%d |%dn”, one_frame[0].page_no, one_frame[1].page_no, one_frame[2].page_no, one_frame[3].page_no);

      }

      rate = effect / 12;

      printf(“命中次數(shù):%fn”, effect);

      printf(“命中率:%fn”, rate);

      }

      wait(0);

      exit(0);} }

      下載頁(yè)面置換算法模擬word格式文檔
      下載頁(yè)面置換算法模擬.doc
      將本文檔下載到自己電腦,方便修改和收藏,請(qǐng)勿使用迅雷等下載。
      點(diǎn)此處下載文檔

      文檔為doc格式


      聲明:本文內(nèi)容由互聯(lián)網(wǎng)用戶自發(fā)貢獻(xiàn)自行上傳,本網(wǎng)站不擁有所有權(quán),未作人工編輯處理,也不承擔(dān)相關(guān)法律責(zé)任。如果您發(fā)現(xiàn)有涉嫌版權(quán)的內(nèi)容,歡迎發(fā)送郵件至:645879355@qq.com 進(jìn)行舉報(bào),并提供相關(guān)證據(jù),工作人員會(huì)在5個(gè)工作日內(nèi)聯(lián)系你,一經(jīng)查實(shí),本站將立刻刪除涉嫌侵權(quán)內(nèi)容。

      相關(guān)范文推薦

        虛擬內(nèi)存頁(yè)面置換算法實(shí)驗(yàn)報(bào)告[合集五篇]

        軟件學(xué)院上機(jī)實(shí)驗(yàn)報(bào)告 課程名稱:操作系統(tǒng)原理實(shí)驗(yàn)項(xiàng)目:虛擬內(nèi)存頁(yè)面置換算法實(shí)驗(yàn)室:地獄 018姓名 : 死神學(xué)號(hào):專業(yè)班級(jí) : 實(shí)驗(yàn)時(shí)間:2015/12 / 13 實(shí)驗(yàn)成績(jī) 評(píng)閱教師一、實(shí)驗(yàn)?zāi)康眉?.....

        計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)4頁(yè)面置換算法

        實(shí)驗(yàn)4 頁(yè)面置換算法(2學(xué)時(shí)) 一、實(shí)驗(yàn)?zāi)康?通過(guò)實(shí)驗(yàn)加強(qiáng)對(duì)虛擬存儲(chǔ)管理中頁(yè)面置換算法的理解和掌握。 二、實(shí)驗(yàn)內(nèi)容 編寫(xiě)程序?qū)崿F(xiàn)虛擬存儲(chǔ)管理中OPT,FIFO,LRU頁(yè)面置換算法。 三......

        操作系統(tǒng) 七次實(shí)驗(yàn)報(bào)告 常用頁(yè)面置換算法模擬實(shí)驗(yàn)

        操作系統(tǒng)課程第七次實(shí)驗(yàn)報(bào)告姓名學(xué)號(hào)系計(jì)算機(jī)任課教師指導(dǎo)教師評(píng)閱教師實(shí)驗(yàn)地點(diǎn)綜合樓B102實(shí)驗(yàn)時(shí)間2012-9-26實(shí)驗(yàn)課表現(xiàn)出勤和個(gè)人表現(xiàn)Q1(15+15(組長(zhǎng)評(píng)分)=30分)得分:實(shí)驗(yàn)總分(......

        計(jì)算機(jī)操作系統(tǒng)實(shí)驗(yàn)三頁(yè)面置換算法模擬實(shí)驗(yàn)

        計(jì)算機(jī)工程學(xué)院實(shí)驗(yàn)報(bào)告書(shū)課程名:《操作系統(tǒng)原理A》題目:虛擬存儲(chǔ)器管理頁(yè)面置換算法模擬實(shí)驗(yàn)班級(jí):學(xué)號(hào):姓名:評(píng)語(yǔ):成績(jī):指導(dǎo)教師:批閱時(shí)間:年月日一、實(shí)驗(yàn)?zāi)康呐c要求1.目的:請(qǐng)求頁(yè)式......

        頁(yè)面置換算法模擬實(shí)驗(yàn) 操作系統(tǒng)大作業(yè)(含源文件)(合集五篇)

        “計(jì)算機(jī)操作系統(tǒng)”課程設(shè)計(jì)大作業(yè) 頁(yè)面置換算法模擬實(shí)驗(yàn) (含完整資料,可直接提交) 一、題目: 頁(yè)面置換算法模擬實(shí)驗(yàn) 二、目的 分別采用最佳(Optimal)置換算法、先進(jìn)先出(FI......

        頁(yè)面替換算法實(shí)驗(yàn)報(bào)告

        操作系統(tǒng)頁(yè)面替換算法實(shí)驗(yàn)報(bào)告 姓名: 沈慧 班級(jí): 計(jì)091 學(xué)號(hào): 0913022006 頁(yè)面替換算法 一.目的和要求 (一)目的 存儲(chǔ)管理的主要功能之一是合理地分配空間。請(qǐng)求頁(yè)式管理是一種常......

        專題頁(yè)面策劃

        宮頸糜爛專題頁(yè)面宮頸糜爛的癥狀:1度宮頸糜爛癥狀:1度宮頸糜爛通常沒(méi)有癥狀,如果出現(xiàn)癥狀,通常表現(xiàn)為白帶增多、淡黃色、膿性,或伴有異味等。 2度宮頸糜爛癥狀:大多數(shù)是白帶異常,會(huì)......

        銀行家算法的模擬【實(shí)驗(yàn)報(bào)告】(合集5篇)

        實(shí)驗(yàn)二銀行家算法的模擬 專業(yè):信息管理與信息系統(tǒng) 學(xué)號(hào):2014****** 姓名:陳* 實(shí)驗(yàn)日期:2016年12月20日 一、 實(shí)驗(yàn)?zāi)康?銀行家算法是一種最具有代表性的避免死鎖的算法。 要解釋......