2023年全國碩士研究生考試考研英語一試題真題(含答案詳解+作文范文)_第1頁
已閱讀1頁,還剩16頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p><b>  操作系統(tǒng)課程設(shè)計</b></p><p><b>  請求頁式存儲管理</b></p><p><b>  學(xué)院:</b></p><p><b>  學(xué)號:</b></p><p><b>  姓名:</b&

2、gt;</p><p><b>  輔導(dǎo)老師:</b></p><p><b>  設(shè)計四:</b></p><p><b>  1.設(shè)計目的</b></p><p>  請求頁式管理是一種常用的虛擬存儲管理技術(shù)。本設(shè)計通過請求頁式存儲管理中頁面置換算法模擬設(shè)計,了解虛擬存儲技

3、術(shù)的特點,掌握請求頁式管理的頁面置換算法。</p><p><b>  2.設(shè)計內(nèi)容:</b></p><p>  通過隨機(jī)數(shù)產(chǎn)生一個指令序列,共320條指令。指令的地址按下述原則生成:</p><p> ?、?50% 的指令是順序執(zhí)行的;</p><p>  ② 25% 的指令是均勻分布在前地址部分;</p>

4、;<p>  ③ 25% 的指令是均勻分布在后地址部分。</p><p><b>  具體的實施方法是:</b></p><p> ?、僭?[0,319] 的指令地址之間隨機(jī)選取一起點 m;</p><p> ?、陧樞驁?zhí)行一條指令;</p><p> ?、墼谇暗刂穂0,m+1]中隨機(jī)選取一條指令并執(zhí)行,該指

5、令的地址為 m′; </p><p> ?、茼樞驁?zhí)行一條指令,其地址為 m′+1;</p><p> ?、菰诤蟮刂?[m′+2,319] 中隨機(jī)選取一條指令并執(zhí)行 ;</p><p>  ⑥重復(fù)上述步驟② ~ ⑤ , 直到執(zhí)行 320 次指令。</p><p>  將指令序列變換成為頁地址流</p><p>  設(shè):①

6、頁面大小為 1K;</p><p> ?、谟脩魞?nèi)存容量為 4 頁到 32 頁 ;</p><p> ?、塾脩籼摯嫒萘繛?32K 。</p><p>  在用戶虛存中,按每 K 存放 10 條指令排列虛存地址,即 320 條指令在虛存中的存放方式為:</p><p>  第 0 條 ~ 第 9 條指令為第 0 頁 ( 對應(yīng)虛存地址為 [0,9]

7、);</p><p>  第 10 條 ~ 第 19 條指令為第 1 頁 ( 對應(yīng)虛存地址為 [10,19] ) ;</p><p><b>  ┇</b></p><p><b>  ┇</b></p><p>  第 310 條 ~ 第 319 條指令為第 31 頁 ( 對應(yīng)虛存地址為 [310

8、,319]) 。</p><p>  按以上方式,用戶指令可組成 32 頁。</p><p>  計算并輸出下述各種算法在不同內(nèi)存容量下的命中率。</p><p>  先進(jìn)先出的算法 (FIFO);最近最少使用算法 (LRR);</p><p>  最少訪問頁面算法 (LFR);最近最不經(jīng)常使用算法 (NUR)。</p><

9、;p><b>  3.實驗環(huán)境</b></p><p>  每個學(xué)生一臺微機(jī),需要安裝windows98或windows2000操作系統(tǒng),配備VC、VB、java或C編程語言,每個學(xué)生上機(jī)時間不少于24個小時。</p><p> ?。?)、分頁請求系統(tǒng)</p><p>  為了能實現(xiàn)請求調(diào)頁和置換功能,系統(tǒng)必須提供必要的硬件支持,其中,最

10、重要的是:</p><p> ?。?)請求分頁的頁表機(jī)制。它是在分頁的頁表機(jī)制上增加若干個項而形成的,作為請求分頁的數(shù)據(jù)結(jié)構(gòu);</p><p> ?。?)缺頁中斷機(jī)構(gòu)。每當(dāng)用戶程序要訪問的頁面尚未調(diào)入內(nèi)存時,便產(chǎn)生一缺頁中斷,以請求OS將所缺的頁面調(diào)入內(nèi)存;</p><p> ?。?)地址變換機(jī)構(gòu)。它同樣是在分頁的地址變換機(jī)構(gòu)的基礎(chǔ)上發(fā)展形成的。</p>

11、<p>  為了實現(xiàn)請求調(diào)頁還須得到OS的支持,在實現(xiàn)請求調(diào)頁功能時,石油OS將所需的頁從外存調(diào)入內(nèi)存;在實現(xiàn)置換功能時,也是由OS將內(nèi)存的某些頁調(diào)至外存。</p><p><b>  4.實驗提示</b></p><p>  提示:A.命中率=1-頁面失效次數(shù)/頁地址流長度</p><p>  B.本實驗中,頁地址流長度為320

12、,頁面失效次數(shù)為每次訪問相應(yīng)指令時,該指令所對應(yīng)的頁不在內(nèi)存的次數(shù)。</p><p>  C.關(guān)于隨機(jī)數(shù)產(chǎn)生方法,采用TC系統(tǒng)提供函數(shù)RAND()和RANDOMIZE()來產(chǎn)生。</p><p>  5.自己對算法的理解</p><p>  ㈠ FIFO頁面置換算法</p><p><b> ?、旁砗喪?lt;/b><

13、;/p><p>  ①在分配內(nèi)存頁面數(shù)(AP)小于進(jìn)程頁面數(shù)(PP)時,當(dāng)然是最先運行的AP個頁面放入內(nèi)存。</p><p> ?、谶@時有需要處理新的頁面,則將原來內(nèi)存中的AP個頁面最先進(jìn)入的調(diào)出(是以稱為FIFO),然后將新頁面放入。</p><p> ?、垡院笕绻儆行马撁嫘枰{(diào)入,則都按⑵的規(guī)則進(jìn)行。</p><p>  算法特點:所使用的

14、內(nèi)存頁面構(gòu)成一個隊列。</p><p> ?、?LRU頁面置換算法</p><p><b> ?、旁硭闶?lt;/b></p><p>  ①當(dāng)分配內(nèi)存頁面數(shù)(AP)小于進(jìn)程頁面數(shù)(PP)時,當(dāng)然是把最先執(zhí)行的AP個頁面放入內(nèi)存。</p><p> ?、诋?dāng)需要調(diào)頁面進(jìn)入內(nèi)存,而當(dāng)前分配的內(nèi)存頁面全部不空閑時,選擇將其中最長

15、時間沒有用到的那個頁面調(diào)出,以空出內(nèi)存來放置新調(diào)入的頁面(稱為LRU)。</p><p>  算法特點:每個頁面都有屬性來表示有多長時間未被CPU使用的信息。</p><p> ?、鏛FU即最不經(jīng)常使用頁置換算法</p><p><b>  原理簡述</b></p><p>  要求在頁置換時置換引用計數(shù)最小的頁,因為經(jīng)

16、常使用的頁應(yīng)該有一個較大的引用次數(shù)。但是有些頁在開始時使用次數(shù)很多,但以后就不再使用,這類頁將會長時間留在內(nèi)存中,因此可以將引用計數(shù)寄存器定時右移一位,形成指數(shù)衰減的平均使用次數(shù)。</p><p>  LRU算法的硬件支持</p><p>  把LRU算法作為頁面置換算法是比較好的,它對于各種類型的程序都能適用,但實現(xiàn)起來有相當(dāng)大的難度,因為它要求系統(tǒng)具有較多的支持硬件。所要解決的問題有:

17、</p><p>  1.一個進(jìn)程在內(nèi)存中的各個頁面各有多久時間未被進(jìn)程訪問;</p><p>  2.如何快速地知道哪一頁最近最久未使用的頁面。為此,須利用以下兩類支持硬件:</p><p><b> ?。?)寄存器</b></p><p>  用于記錄某進(jìn)程在內(nèi)存中各頁的使用情況。</p><p&

18、gt;<b> ?。?)棧</b></p><p>  可利用一個特殊的棧來保存當(dāng)前使用的各個頁面的頁面號。每當(dāng)進(jìn)程訪問某頁面時,便將該頁面的頁面號從棧中移出,將它壓入棧頂。</p><p>  算法特點:LFU算法并不能真正反映出頁面的使用情況,因為在每一時間間隔內(nèi),只是用寄存器的一位來記錄頁的使用情況,因此,訪問一次和訪問10000次是等效的。</p>

19、<p> ?、?NUR頁面置換算法</p><p><b> ?、旁砗喪?lt;/b></p><p>  所謂“最近未使用”,首先是要對“近”作一個界定,比如CLEAR_PERIOD=50,便是指在CPU最近的50次進(jìn)程頁面處理工作中,都沒有處理到的頁面。那么可能會有以下幾種情況:</p><p> ?、偃绻@樣的頁面只有一個,就將

20、其換出,放入需要處理的新頁面。</p><p> ?、谌绻羞@樣的頁面不止一個,就在這些頁面中任取一個換出(可以是下標(biāo)最小的,或者是下標(biāo)最大的),放入需要處理的頁面。</p><p>  ③如果沒有一個這樣的頁面,就隨意換出一個頁面(可以是下標(biāo)最小的,或者是下標(biāo)最大的)。</p><p>  算法特點:有一個循環(huán)周期,每到達(dá)這個周期,所有頁面存放是否被CPU處理的信

21、息的屬性均被置于初始態(tài)(沒有被訪問)。</p><p><b>  6.實驗流程圖 </b></p><p><b>  7. 實驗運行結(jié)果</b></p><p><b>  等等。</b></p><p><b>  8. 實驗源程序</b></

22、p><p>  #include<iostream></p><p>  #include<time.h></p><p>  using namespace std;</p><p>  const int MaxNum=320;//指令數(shù)</p><p>  const int M=5;//內(nèi)存

23、容量</p><p>  int PageOrder[MaxNum];//頁面請求</p><p>  int Simulate[MaxNum][M];//頁面訪問過程</p><p>  int PageCount[M],LackNum;//PageCount用來記錄LRU算法中最久未使用時間,LackNum記錄缺頁數(shù)</p><p>  

24、float PageRate;//命中率</p><p>  int PageCount1[32];</p><p>  bool IsExit(int i)//FIFO算法中判斷新的頁面請求是否在內(nèi)存中</p><p><b>  {</b></p><p>  bool f=false;</p><

25、;p>  for(int j=0;j<M;j++)</p><p><b>  {</b></p><p>  if(Simulate[i-1][j]==PageOrder[i])//在前一次頁面請求過程中尋找是否存在新的頁面請求</p><p><b>  { </b></p><p

26、><b>  f=true;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  return f;</b></p><p><b>  }</b></p&g

27、t;<p>  int IsExitLRU(int i)//LRU算法中判斷新的頁面請求是否在內(nèi)存中</p><p><b>  {</b></p><p><b>  int f=-1;</b></p><p>  for(int j=0;j<M;j++)</p><p>&l

28、t;b>  {</b></p><p>  if(Simulate[i-1][j]==PageOrder[i])</p><p><b>  { </b></p><p><b>  f=j;</b></p><p><b>  }</b></p&

29、gt;<p><b>  }</b></p><p><b>  return f;</b></p><p><b>  }</b></p><p>  int Compare()//LRU算法找出內(nèi)存中需要置換出來的頁面</p><p><b>  {

30、</b></p><p><b>  int p,q;</b></p><p>  p=PageCount[0];</p><p><b>  q=0;</b></p><p>  for(int i=1;i<M;i++)</p><p><b>

31、  {</b></p><p>  if(p<PageCount[i])</p><p><b>  {</b></p><p>  p=PageCount[i];</p><p><b>  q=i;</b></p><p><b>  }<

32、;/b></p><p><b>  }</b></p><p><b>  return q;</b></p><p><b>  }</b></p><p>  void Init() //初始化頁框</p><p><b>  {

33、</b></p><p>  for(int k=0;k<MaxNum;k++)</p><p><b>  {</b></p><p>  int n=rand()%320;//隨機(jī)數(shù)產(chǎn)生320次指令</p><p>  PageOrder[k]=n/10;//根據(jù)指令產(chǎn)生320次頁面請求</p

34、><p><b>  }</b></p><p>  for(int i=0;i<MaxNum;i++)//初始化頁面訪問過程</p><p><b>  {</b></p><p>  for(int j=0;j<M;j++)</p><p><b>  

35、{</b></p><p>  Simulate[i][j]=-1;</p><p><b>  }</b></p><p><b>  }</b></p><p>  for(int q=0;q<M;q++)//初始化最久未使用數(shù)組</p><p><

36、;b>  {</b></p><p>  PageCount[q]=0;</p><p><b>  }</b></p><p><b>  }</b></p><p>  void OutPut()//輸出</p><p><b>  {<

37、/b></p><p><b>  int i,j;</b></p><p>  cout<<"頁面訪問序列:"<<endl;</p><p>  for(j=0;j<MaxNum;j++)</p><p><b>  {</b></p&

38、gt;<p>  cout<<PageOrder[j]<<" ";</p><p><b>  }</b></p><p>  cout<<endl;</p><p>  cout<<"頁面訪問過程(只顯示前10個):"<<endl

39、;</p><p>  for(i=0;i<10;i++)</p><p><b>  {</b></p><p>  for(j=0;j<M;j++)</p><p><b>  {</b></p><p>  if(Simulate[i][j]==-1)<

40、;/p><p>  cout<<" ";</p><p><b>  else</b></p><p>  cout<<Simulate[i][j]<<" ";</p><p><b>  }</b></p>&

41、lt;p>  cout<<endl;</p><p><b>  }</b></p><p>  cout<<"缺頁數(shù)= "<<LackNum<<endl;</p><p>  cout<<"命中率= "<<PageRate&l

42、t;<endl;</p><p>  cout<<"--------------------------------------------------------------"<<endl;</p><p><b>  }</b></p><p>  void FIFO()//FIFO算法&l

43、t;/p><p><b>  {</b></p><p>  int j,x=0,y=0;</p><p>  LackNum=0,</p><p><b>  Init();</b></p><p>  for(j=0;j<M;j++)//將前五個頁面請求直接放入內(nèi)存中&

44、lt;/p><p><b>  {</b></p><p>  for(int k=0;k<=j;k++)</p><p><b>  {</b></p><p><b>  if(j==k)</b></p><p>  Simulate[j][k]=

45、PageOrder[j];</p><p><b>  else</b></p><p>  Simulate[j][k]=Simulate[j-1][k]; </p><p><b>  }</b></p><p>  //LackNum++;</p><

46、p><b>  }</b></p><p>  for(x=M;x<MaxNum;x++)</p><p><b>  {</b></p><p>  for(int t=0;t<M;t++)//先將前一次頁面訪問過程賦值給新的頁面訪問過程</p><p><b>  {

47、</b></p><p>  Simulate[x][t]=Simulate[x-1][t];</p><p><b>  }</b></p><p>  if(!IsExit(x))//根據(jù)新訪問頁面是否存在內(nèi)存中來更新頁面訪問過程</p><p><b>  {</b></p&

48、gt;<p>  LackNum++;</p><p>  Simulate[x][y%M]=PageOrder[x];</p><p><b>  y++;</b></p><p><b>  }</b></p><p><b>  }</b></p>

49、;<p>  PageRate=1-((float)LackNum/(float)MaxNum);//算出命中率</p><p><b>  OutPut();</b></p><p><b>  }</b></p><p>  void LRU()//LRU算法</p><p>&l

50、t;b>  {</b></p><p>  int j,x=0,y=0;</p><p>  LackNum=0,</p><p><b>  Init();</b></p><p>  for(j=0;j<M;j++)//將前五個頁面請求直接放入內(nèi)存中</p><p>&

51、lt;b>  {</b></p><p>  for(int k=0;k<=j;k++)</p><p><b>  {</b></p><p>  PageCount[k]++;</p><p><b>  if(j==k)</b></p><p>

52、  Simulate[j][k]=PageOrder[j];</p><p><b>  else</b></p><p>  Simulate[j][k]=Simulate[j-1][k]; </p><p><b>  }</b></p><p>  LackNum++;

53、 </p><p><b>  }</b></p><p>  for(x=M;x<MaxNum;x++)</p><p><b>  {</b></p><p>  for(int t=0;t<M;t++)//先將前一次頁面訪問過程賦值給新的頁面訪問過程</p>&

54、lt;p><b>  {</b></p><p>  Simulate[x][t]=Simulate[x-1][t];</p><p><b>  }</b></p><p>  int p=IsExitLRU(x);</p><p>  if(p==-1)//根據(jù)反回的p值來更新頁面訪問過程

55、</p><p><b>  {</b></p><p><b>  int k;</b></p><p>  k=Compare();</p><p>  for(int w=0;w<M;w++)</p><p><b>  {</b></

56、p><p><b>  if(w!=k)</b></p><p>  PageCount[w]++;</p><p><b>  else</b></p><p>  PageCount[k]=1;</p><p><b>  }</b></p>

57、<p>  Simulate[x][k]=PageOrder[x];</p><p>  LackNum++;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p>&l

58、t;p>  for(int w=0;w<M;w++)</p><p><b>  {</b></p><p><b>  if(w!=p)</b></p><p>  PageCount[w]++;</p><p><b>  else</b></p>

59、<p>  PageCount[p]=1;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  PageRate=1-((float)LackNum/(float)MaxNum)

60、;//算出命中率</p><p><b>  OutPut();</b></p><p><b>  }</b></p><p>  //最近最不常用調(diào)度算法(LFU)</p><p>  void LFU(){}</p><p>  void NUR(){}</p&g

61、t;<p>  void YourChoice(int choice)</p><p><b>  {</b></p><p>  switch(choice)</p><p><b>  {</b></p><p><b>  case 1:</b></p

62、><p>  cout<<"----------------------------------------------------------"<<endl;</p><p>  cout<<"FIFO算法結(jié)果如下:"<<endl;</p><p><b>  FIFO(

63、);</b></p><p><b>  break;</b></p><p><b>  case 2:</b></p><p>  cout<<"----------------------------------------------------------"<&l

64、t;endl;</p><p>  cout<<"LRU算法結(jié)果如下:"<<endl;</p><p><b>  LRU();</b></p><p><b>  break;</b></p><p><b>  case 3:</b&g

65、t;</p><p>  cout<<"----------------------------------------------------------"<<endl;</p><p>  cout<<"LFU算法結(jié)果如下:"<<endl;</p><p><b>

66、  //LFU();</b></p><p><b>  break;</b></p><p><b>  case 4:</b></p><p>  cout<<"----------------------------------------------------------&quo

67、t;<<endl;</p><p>  cout<<"NUR算法結(jié)果如下:"<<endl;</p><p><b>  //NUR();</b></p><p><b>  break;</b></p><p><b>  case

68、5:</b></p><p><b>  break;</b></p><p><b>  default:</b></p><p>  cout<<"重新選擇算法:1--FIFO 2--LRU 3--LFU 4--NUR 5--退出 "<<endl;</p&

69、gt;<p>  cin>>choice;</p><p>  YourChoice(choice);</p><p><b>  }</b></p><p><b>  }</b></p><p>  void main()</p><p><

70、;b>  {</b></p><p>  int choice,i=1;</p><p><b>  while(i)</b></p><p><b>  {</b></p><p>  cout<<"請選擇算法:1--FIFO 2--LRU 3--LFU

71、4--NUR 5--退出 "<<endl;</p><p>  cin>>choice;</p><p>  if(choice==5)</p><p><b>  {</b></p><p><b>  i=0;</b></p><p>&

72、lt;b>  } </b></p><p><b>  else </b></p><p><b>  { </b></p><p>  YourChoice(choice);</p><p><b>  } </b></p><p>

73、<b>  }</b></p><p><b>  }</b></p><p><b>  9. 實驗體會</b></p><p>  通過上面的截圖可以發(fā)現(xiàn),實驗中指令是由隨機(jī)函數(shù)產(chǎn)生的,然后根據(jù)產(chǎn)生的指令算出需要訪問的頁面.在本次實驗中我寫了四個頁面置換算法—(先進(jìn)先出)FIFO算法和(最久未使用

溫馨提示

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

評論

0/150

提交評論