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

下載本文檔

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

文檔簡(jiǎn)介

1、<p><b>  操作系統(tǒng)課程設(shè)計(jì)</b></p><p>  動(dòng)態(tài)分區(qū)分配存儲(chǔ)管理</p><p><b>  計(jì)算機(jī)10-01班</b></p><p>  第一章 課程設(shè)計(jì)概述</p><p><b>  1.1 設(shè)計(jì)任務(wù):</b></p>

2、<p>  動(dòng)態(tài)分區(qū)分配存儲(chǔ)管理</p><p><b>  1.2 設(shè)計(jì)要求</b></p><p>  建立描述內(nèi)存分配狀況的數(shù)據(jù)結(jié)構(gòu);</p><p>  ?建立描述進(jìn)程的數(shù)據(jù)結(jié)構(gòu);</p><p>  ?使用兩種方式產(chǎn)生進(jìn)程:(a)自動(dòng)產(chǎn)生, (b)手工輸入;</p><p>

3、  ?在屏幕上顯示內(nèi)存的分配狀況、每個(gè)進(jìn)程的執(zhí)行情況;</p><p>  ?建立分區(qū)的分配與回收算法,支持緊湊算法;</p><p>  ?時(shí)間的流逝可用下面幾種方法模擬:(a)按鍵盤(pán),每按一次可認(rèn)為過(guò)一個(gè)時(shí)間單位; (b) 響應(yīng)WM_TIMER;</p><p>  ?將一批進(jìn)程的執(zhí)行情況存入磁盤(pán)文件,以后可以讀出并重放;</p><

4、;p>  ?支持算法:首次適應(yīng)算法、循環(huán)首次適應(yīng)算法、最佳適應(yīng)算法:最壞適應(yīng)算法。</p><p><b>  1.3 設(shè)計(jì)目的</b></p><p>  旨在讓我們更好的了解動(dòng)態(tài)分區(qū)管理方面的知識(shí).</p><p>  第二章 原理及算法描述</p><p>  2.1動(dòng)態(tài)分區(qū)分配算法原理</p>

5、;<p><b>  首次適應(yīng)算法</b></p><p>  * 算法概述:分配內(nèi)存時(shí),從鏈?zhǔn)组_(kāi)始順序查找,找到滿足的空閑分區(qū)則劃出空間分配,余下的空閑空間仍保留在空閑鏈表中</p><p>  * 實(shí)現(xiàn)方法:分配時(shí)從數(shù)組第一個(gè)元素開(kāi)始比較,若符合條件則將該元素減去對(duì)應(yīng)作業(yè)的值</p><p><b>  循環(huán)首次適應(yīng)

6、算法</b></p><p>  * 算法概述:由首次適應(yīng)算法演變,只是每次分配改為由上一次找到的空閑分區(qū)開(kāi)始查找</p><p>  * 實(shí)現(xiàn)方法:在首次適應(yīng)算法的基礎(chǔ)上增加一個(gè)值用于記錄找到的空閑分區(qū)的位置</p><p><b>  最佳適應(yīng)算法</b></p><p>  * 算法概述:每次為作業(yè)分配

7、內(nèi)存時(shí),總是把能滿足要求、又是最小的空閑分區(qū)分配給作業(yè)</p><p>  * 實(shí)現(xiàn)方法:我們決定每次分配先把空閑分區(qū)按從小到大的順序排列,然后將第一個(gè)匹配分區(qū)分配給作業(yè)</p><p><b>  最壞適應(yīng)算法</b></p><p>  * 算法概述:每次為作業(yè)分配內(nèi)存時(shí),總是挑選一個(gè)最大的空閑分區(qū)分割給作業(yè)使用</p>&l

8、t;p>  * 實(shí)現(xiàn)方法:算法與最佳適應(yīng)算法幾乎相同,僅在排序時(shí)把空閑分區(qū)表按從大到小的順序排列,所以未作詳細(xì)注釋</p><p><b>  回收分區(qū)</b></p><p>  當(dāng)進(jìn)程運(yùn)行完畢釋放內(nèi)存時(shí),系統(tǒng)根據(jù)回收區(qū)的首址,從空閑區(qū)鏈(表)中找到相應(yīng)的插入點(diǎn),此時(shí)可能出現(xiàn)以下四種情況之一;</p><p>  1)回收區(qū)與插入點(diǎn)的前

9、一個(gè)空閑分區(qū)F1相鄰接,此時(shí)應(yīng)將回收區(qū)與插入點(diǎn)的前一分區(qū)合并,不必為回收區(qū)分配新表項(xiàng),而只需修改其前一分區(qū)F1的大小.</p><p>  2)回收分區(qū)與插入點(diǎn)的后一空閑分區(qū)F2相鄰接,此時(shí)也可將兩分區(qū)合并,形成新的空閑分區(qū),但用回收區(qū)的首址作為新空閑區(qū)的首址,大小為兩者之和.</p><p>  3)回收區(qū)同時(shí)與插入點(diǎn)的前,后兩個(gè)分區(qū)鄰接,此時(shí)將三個(gè)分區(qū)合并,使用F1的表項(xiàng)和F1的首址,

10、取消F2的表項(xiàng),大小為三者之和.</p><p>  4)回收區(qū)既不與F1相鄰接,又不與F2鄰接.這時(shí)應(yīng)為回收區(qū)單獨(dú)建立一新表項(xiàng),填寫(xiě)回收區(qū)的首址和大小,并根據(jù)其首址插入到空閑鏈中的適當(dāng)位置.</p><p><b>  緊湊算法</b></p><p>  通過(guò)移動(dòng)內(nèi)存中的作業(yè)的位置,以把原來(lái)多個(gè)分散的小分區(qū)拼接成一個(gè)大分區(qū)的方法.</

11、p><p>  第三章 開(kāi)發(fā)環(huán)境</p><p>  此程序是本人利用c++語(yǔ)言在vs2012的開(kāi)發(fā)環(huán)境中實(shí)現(xiàn)的 </p><p>  第四章 程序?qū)崿F(xiàn)--數(shù)據(jù)結(jié)構(gòu)</p><p>  #include <iostream></p><p>  #include <string></

12、p><p>  #include <fstream> </p><p>  using namespace std;</p><p>  ofstream stream;//輸出流對(duì)象</p><p>  int ary1[20][4];//內(nèi)存分配狀態(tài)</p><p>  int ary2[20][3];//

13、空閑分區(qū)狀態(tài)</p><p>  int ary3[10];//進(jìn)程分配狀態(tài)</p><p>  int recycle;//需要回收的盤(pán)塊序號(hào) </p><p>  int id1;//算法選擇號(hào)</p><p>  int m;//內(nèi)存區(qū)數(shù)</p><p>  int n;//空閑區(qū)數(shù)</p><

14、;p>  int q;//進(jìn)程數(shù)</p><p>  int r=0;//循環(huán)首次適應(yīng)算法:對(duì)應(yīng)的這次查找到的空閑分區(qū)序號(hào)</p><p><b>  //打印輸出函數(shù)</b></p><p>  void vision()</p><p><b>  { </b></p>

15、<p><b>  int i;</b></p><p><b>  int j;</b></p><p>  if(id1==1)stream.open("first_fit.txt", ios::app);</p><p>  if(id1==2)stream.open("nex

16、tfirst_fit.txt", ios::app);</p><p>  if(id1==3)stream.open("best_fit.txt",ios::app);</p><p>  if(id1==4)stream.open("worst_fit.txt", ios::app);</p><p>  if(

17、id1==5)stream.open("compact.txt",ios::app);</p><p>  if(id1==6)stream.open("huishou.txt",ios::app);</p><p>  cout<<"-------------內(nèi)存分配狀態(tài)-------------"<<e

18、ndl;</p><p>  cout<<"分區(qū)號(hào) 大小/KB 始址/KB 狀態(tài)"<<endl;</p><p>  stream<<"-------------內(nèi)存分配狀態(tài)-------------"<<endl;</p><p>  stream<&l

19、t;"分區(qū)號(hào) 大小/KB 始址/KB 狀態(tài)"<<endl;</p><p>  for(j=0;j<m;j++)</p><p><b>  {</b></p><p>  cout <<ary1[j][0]<<" ";<

20、/p><p>  stream<<ary1[j][0]<<" ";</p><p>  cout <<ary1[j][1]<<" ";</p><p>  stream<<ary1[j][1]<<"

21、 ";</p><p>  cout <<ary1[j][2]<<" ";</p><p>  stream<<ary1[j][2]<<" ";</p><p>  if(ary1[j][3]==2){</p><p>

22、  cout<<"已分配";</p><p>  stream<<"已分配";}</p><p><b>  else{</b></p><p>  cout<<"未分配";</p><p>  stream<<&

23、quot;未分配";</p><p><b>  }</b></p><p>  cout <<endl;</p><p>  stream<<endl;</p><p><b>  }</b></p><p>  cout <<

24、endl;</p><p>  cout<<"--------空閑分區(qū)鏈--------"<<endl;</p><p>  cout<<"分區(qū)號(hào) 大小/KB 起址/KB"<<endl;</p><p>  stream<<"--------空閑分區(qū)鏈---

25、-----"<<endl;</p><p>  stream<<"分區(qū)號(hào) 大小/KB 起址/KB"<<endl;</p><p>  for(i=0;i<n;i++)</p><p><b>  {</b></p><p>  cout<<

26、;ary2[i][0]<<" ";</p><p>  stream<<ary2[i][0]<<" ";</p><p>  cout<<ary2[i][1]<<" ";</p><p>  stream&

27、lt;<ary2[i][1]<<" ";</p><p>  cout<<ary2[i][2];</p><p>  stream<<ary2[i][2];</p><p>  cout<<endl;</p><p>  stream<<end

28、l;</p><p><b>  }</b></p><p>  cout<<"--------------------------"<<endl;</p><p>  stream<<"--------------------------"<<endl;&

29、lt;/p><p>  cout<<endl;</p><p>  stream.close();</p><p><b>  }</b></p><p>  //作業(yè)信息的自動(dòng)產(chǎn)生</p><p>  void create_pro()</p><p><b

30、>  {</b></p><p><b>  int i;</b></p><p>  for(i=0;i<q;i++)</p><p><b>  {</b></p><p>  ary3[i]=rand()%100;</p><p>  if(ar

31、y3[i]==0)</p><p><b>  {i--;}</b></p><p><b>  }</b></p><p>  ary3[0]=42;</p><p>  ary3[1]=86;</p><p>  cout<<"產(chǎn)生"<

32、;<q<<"個(gè)隨機(jī)進(jìn)程"<<endl;</p><p>  cout<<"大小分別是:";</p><p>  for(i=0;i<q;i++){</p><p>  cout<<"["<<ary3[i]<<"]&

33、quot;<<" ";</p><p><b>  }</b></p><p>  cout <<endl;</p><p><b>  }</b></p><p><b>  //作業(yè)的手動(dòng)生成</b></p><

34、;p>  void create_zuoye(){</p><p><b>  int j;</b></p><p>  int choice2;</p><p>  int id3=rand()%10;</p><p>  m=id3;//內(nèi)存區(qū)數(shù)量 </p><p>  cout<

35、;<"---您將創(chuàng)建幾個(gè)進(jìn)程---:" ;</p><p>  cin>>choice2;</p><p>  q=choice2;</p><p>  cout<<"輸入想創(chuàng)建的作業(yè)請(qǐng)求大小"<<endl;</p><p>  for(int i=0;i<

36、;choice2;i++)</p><p><b>  {</b></p><p><b>  cin>>j;</b></p><p>  ary3[i]=j;</p><p><b>  }</b></p><p>  cout<&l

37、t;"你創(chuàng)建了"<<choice2<<"個(gè)進(jìn)程 ";</p><p>  for(int i=0;i<choice2;i++){</p><p>  cout<<ary3[i]<<" ";</p><p><b>  }</b>

38、</p><p>  cout<<endl;</p><p><b>  }</b></p><p>  //內(nèi)存信息的自動(dòng)產(chǎn)生</p><p>  void create_apply()</p><p><b>  {</b></p><p&

39、gt;<b>  int i;</b></p><p>  for (i=0;i<m;i++)</p><p><b>  {</b></p><p>  ary1[i][0]=i+1;</p><p>  ary1[i][1]=rand()%100;</p><p>

40、<b>  if(i==0)</b></p><p>  ary1[i][2]=0;</p><p><b>  else</b></p><p><b>  {</b></p><p>  ary1[i][2]=ary1[i-1][2]+ary1[i-1][1];</p

41、><p><b>  }</b></p><p>  ary1[i][3]=rand()%3;</p><p>  //cout <<i<<endl;</p><p>  if(ary1[i][1]==0)</p><p><b>  {i--;}</b>

42、</p><p><b>  }</b></p><p>  int k=0;//空閑區(qū)數(shù)量</p><p>  for (i=0;i<m;i++)</p><p><b>  {</b></p><p>  if(ary1[i][3]!=2)</p>&

43、lt;p>  {ary2[k][0]=ary1[i][0];</p><p>  ary2[k][1]=ary1[i][1];</p><p>  ary2[k][2]=ary1[i][2];</p><p><b>  k++;</b></p><p><b>  }</b></p&g

44、t;<p><b>  }</b></p><p>  n=k;//空閑塊數(shù)量</p><p><b>  }</b></p><p>  //內(nèi)存信息的手動(dòng)生成</p><p>  int create_fenqu(){</p><p>  int k,x,

45、y,o=0; </p><p><b>  int a=0;</b></p><p>  cout<<"輸入想創(chuàng)建的內(nèi)存分區(qū)塊數(shù) : " ;</p><p><b>  cin>>k;</b></p><p>  cout<<"

46、輸入"<<k<<"個(gè)內(nèi)存分區(qū)塊 大小"<<endl;</p><p>  for(int i=0;i<k;i++){</p><p>  ary1[i][0]=i; //序號(hào)</p><p><b>  cin>>x;</b></p><p

47、>  ary1[i][1]=x;//大小</p><p><b>  }</b></p><p>  cout<<"輸入內(nèi)存塊的分配狀態(tài)"<<endl;</p><p>  for(int i=0;i<k;i++){</p><p><b>  cin&g

48、t;>y;</b></p><p><b>  if(y==2){</b></p><p><b>  n++;</b></p><p><b>  }</b></p><p>  ary1[i][3]=y;//狀態(tài)</p><p>&

49、lt;b>  }</b></p><p>  ary1[0][2]=0;</p><p>  ary1[1][2]=ary1[0][1];</p><p>  for(int i=2;i<k;i++){</p><p>  ary1[i][2]=ary1[i-1][2]+ary1[i-1][1];//起始地址</

50、p><p><b>  }</b></p><p><b>  m=k; </b></p><p>  for (int i=0;i<k;i++)</p><p><b>  {</b></p><p>  if(ary1[i][3]!=2){<

51、;/p><p>  ary2[a][0]=ary1[i][0];</p><p>  ary2[a][1]=ary1[i][1];</p><p>  ary2[a][2]=ary1[i][2];</p><p><b>  a++;</b></p><p><b>  }</b>

52、;</p><p><b>  }</b></p><p><b>  n=a;</b></p><p>  return m,n;</p><p><b>  }</b></p><p><b>  //首次適應(yīng)算法</b><

53、;/p><p>  void first_fit()</p><p><b>  { </b></p><p><b>  vision();</b></p><p><b>  int i;</b></p><p><b>  int j;&

54、lt;/b></p><p><b>  int k;</b></p><p><b>  int l;</b></p><p>  int d;//用來(lái)保存第k個(gè)的值</p><p>  int id2=0;</p><p>  for(i=0;i<q;i++)

55、//為每個(gè)進(jìn)程分配空間</p><p><b>  {</b></p><p>  for(j=0;j<n;j++)//查找空閑鏈表每項(xiàng)</p><p><b>  {</b></p><p>  if(ary2[j][1]>=ary3[i])//進(jìn)程占用空間小于等于其中一個(gè)空閑區(qū)的大小

56、</p><p><b>  {</b></p><p>  cout<<"["<<ary3[i]<<"]與"<<"["<<ary2[j][1]<<"]相匹配"<<endl;</p><

57、p>  stream.open("first_fit.txt", ios::app);</p><p>  stream<<"["<<ary3[i]<<"]與"<<"["<<ary2[j][1]<<"]相匹配"<<endl;&

58、lt;/p><p>  stream.close();</p><p>  if(ary2[j][1]==ary3[i])//進(jìn)程占用空間等于其中一個(gè)空閑區(qū)塊大小</p><p><b>  {</b></p><p>  ary1[ary2[j][0]-1][3]=2;</p><p>  for(

59、k=j+1;k<n;k++)</p><p><b>  {</b></p><p>  ary2[k-1][0]=ary2[k][0];</p><p>  ary2[k-1][1]=ary2[k][1];</p><p>  ary2[k-1][2]=ary2[k][2];</p><p&g

60、t;<b>  }</b></p><p><b>  n--; </b></p><p>  }else//否則的話,空閑鏈對(duì)應(yīng)的地方盤(pán)塊大小小了進(jìn)程占用的大小,并且內(nèi)存分配從對(duì)應(yīng)的那一項(xiàng)開(kāi)始增加一項(xiàng)</p><p><b>  {</b></p><p>  l=ary

61、2[j][0];</p><p>  d=ary1[l-1][1];//大小</p><p>  ary1[l-1][1]=ary3[i];</p><p>  ary1[l-1][3]=2;</p><p><b>  m++;</b></p><p>  for(k=m;k>ary2[j

62、][0]+1;k--)</p><p><b>  {</b></p><p>  ary1[k-1][0]=ary1[k-2][0]+1;</p><p>  ary1[k-1][1]=ary1[k-2][1];</p><p>  ary1[k-1][2]=ary1[k-2][2];</p><p

63、>  ary1[k-1][3]=ary1[k-2][3];</p><p><b>  }</b></p><p>  l=ary2[j][0];</p><p>  ary1[l][0]=l+1;</p><p>  ary1[l][1]=d-ary3[i];</p><p>  ary1

64、[l][2]=ary1[l-1][1]+ary1[l-1][2];</p><p>  ary1[l][3]=0;</p><p><b>  k=0;</b></p><p>  for(id2=0;id2<m;id2++)</p><p><b>  {</b></p>&l

65、t;p>  if(ary1[id2][3]!=2)</p><p><b>  {</b></p><p>  ary2[k][0]=ary1[id2][0];</p><p>  ary2[k][1]=ary1[id2][1];</p><p>  ary2[k][2]=ary1[id2][2];</p&g

66、t;<p><b>  k++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  n=k;</b></p><p><b>  }</b></p&

67、gt;<p><b>  break;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"["

68、;<<ary3[i]<<"]與"<<"["<<ary2[j][1]<<"]不匹配"<<endl;</p><p>  stream.open("first_fit.txt", ios::app);</p><p>  stream<&

69、lt;"["<<ary3[i]<<"]與"<<"["<<ary2[j][1]<<"]不匹配"<<endl;</p><p>  stream.close();</p><p><b>  }</b></p>

70、;<p><b>  } </b></p><p>  vision(); </p><p><b>  }</b></p><p><b>  }</b></p><p>  //首次循環(huán)適應(yīng)算法</p><p>  void n

71、ext_fit()</p><p><b>  { </b></p><p><b>  vision();</b></p><p><b>  int i;</b></p><p><b>  int j;</b></p><p>

72、;<b>  int k;</b></p><p><b>  int s;</b></p><p><b>  int d; </b></p><p><b>  int id2;</b></p><p>  for(i=0;i<q;i++)//對(duì)

73、每一個(gè)進(jìn)程隊(duì)列中的進(jìn)程分配資源</p><p><b>  {</b></p><p>  for(j=r;j<n;j++)</p><p><b>  {</b></p><p>  if(ary3[i]<=ary2[j][1])</p><p><b&g

74、t;  {</b></p><p>  cout<<"["<<ary3[i]<<"]與"<<"["<<ary2[j][1]<<"]相匹配"<<endl;</p><p>  stream.open("nex

75、tfirst_fit.txt", ios::app);</p><p>  stream<<"["<<ary3[i]<<"]與"<<"["<<ary2[j][1]<<"]相匹配"<<endl;</p><p>  st

76、ream.close();</p><p>  if(ary3[i]==ary2[j][1])</p><p><b>  {</b></p><p>  //---改變內(nèi)存分配---</p><p>  k=ary2[j][0];//得到對(duì)應(yīng)空閑塊對(duì)應(yīng)內(nèi)存塊的序號(hào)</p><p><b&g

77、t;  k--;</b></p><p>  ary1[k][3]=2;//把對(duì)應(yīng)內(nèi)存塊標(biāo)志位上改成已分配</p><p>  //------------------</p><p>  //--改變空閑塊表:把從這塊空閑塊以下的所有空閑塊向上移一格--</p><p><b>  n--;</b><

78、/p><p>  for(k=j;k<n;k++)</p><p><b>  {</b></p><p>  ary2[k][0]=ary2[k+1][0];</p><p>  ary2[k][1]=ary2[k+1][1];</p><p>  ary2[k][2]=ary2[k+1][2

79、];</p><p><b>  }</b></p><p><b>  vision();</b></p><p>  //------------------</p><p><b>  break;</b></p><p><b>  }

80、</b></p><p>  else//對(duì)應(yīng)的空閑塊大小大于進(jìn)程需要大小</p><p><b>  {</b></p><p>  //-----改變內(nèi)存分配情況-----</p><p>  r=(r+1)%n;</p><p>  //改變第k塊的內(nèi)容</p>&

81、lt;p>  k=ary2[j][0];</p><p>  d=ary1[k-1][1];</p><p>  ary1[k-1][1]=ary3[i];</p><p>  ary1[k-1][3]=2;</p><p>  //從k+1之后所有向后移一格</p><p>  m++;//內(nèi)存塊數(shù)增加1<

82、;/p><p>  for(s=m-1;s>k;s--)</p><p><b>  {</b></p><p>  ary1[s][0]=ary1[s-1][0]+1;</p><p>  ary1[s][1]=ary1[s-1][1];</p><p>  ary1[s][2]=ary1[s

83、-1][2];</p><p>  ary1[s][3]=ary1[s-1][3];</p><p><b>  }</b></p><p>  //改變第k+1塊內(nèi)容:對(duì)應(yīng)的數(shù)組是ary1[k]</p><p>  ary1[k][0]=ary1[k-1][0]+1;</p><p>  ary

84、1[k][1]=d-ary1[k-1][1];</p><p>  ary1[k][2]=ary1[k-1][1]+ary1[k-1][2];</p><p>  //--------------------------</p><p>  //----改變空閑表分配情況----</p><p><b>  k=0;</b&g

85、t;</p><p>  for(id2=0;id2<m;id2++)</p><p><b>  {</b></p><p>  if(ary1[id2][3]!=2)</p><p><b>  {</b></p><p>  ary2[k][0]=ary1[id2

86、][0];</p><p>  ary2[k][1]=ary1[id2][1];</p><p>  ary2[k][2]=ary1[id2][2];</p><p><b>  k++;</b></p><p><b>  }</b></p><p><b>  

87、}</b></p><p><b>  n=k;</b></p><p>  //--------------------------</p><p><b>  vision();</b></p><p><b>  break;</b></p>&

88、lt;p><b>  }</b></p><p><b>  }</b></p><p><b>  else{</b></p><p>  cout<<"["<<ary3[i]<<"]與"<<"[

89、"<<ary2[j][1]<<"]不匹配"<<endl;</p><p>  stream.open("nextfirst_fit.txt", ios::app);</p><p>  stream<<"["<<ary3[i]<<"]與&q

90、uot;<<"["<<ary2[j][1]<<"]不匹配"<<endl;</p><p>  stream.close();</p><p><b>  }</b></p><p><b>  }</b></p><

91、p><b>  }</b></p><p><b>  }</b></p><p>  //思路:先把空閑列表檢索一遍,選出最佳答案,進(jìn)行分配</p><p>  void best_fit()//最佳算法--按順序檢索,把與進(jìn)程要求內(nèi)存大小最接近的快分配給進(jìn)程</p><p><b&g

92、t;  {</b></p><p><b>  int i;</b></p><p><b>  int s;</b></p><p>  int j=-9999;//用來(lái)保存最接近的答案</p><p>  int e;//用來(lái)存放進(jìn)行比較時(shí)的中間結(jié)果</p><p

93、><b>  int k;</b></p><p><b>  int l;</b></p><p><b>  int d;</b></p><p><b>  int id2;</b></p><p><b>  vision();&l

94、t;/b></p><p>  for(i=0;i<q;i++)</p><p>  { e=9999;</p><p><b>  j=-9999;</b></p><p>  for(s=0;s<n;s++)</p><p><b>  {</b>&

95、lt;/p><p>  if((ary2[s][1]>=ary3[i])&&(e>ary2[s][1]))//滿足分配要求</p><p><b>  {</b></p><p>  e=ary2[s][1];</p><p><b>  j=s;</b></p>

96、<p><b>  }</b></p><p><b>  }</b></p><p><b>  if(j<0)</b></p><p><b>  {</b></p><p>  cout<<"["&

97、lt;<ary3[i]<<"]與"<<"所有空閑盤(pán)塊不匹配"<<endl;</p><p>  stream.open("best_fit.txt", ios::app);</p><p>  stream<<"["<<ary3[i]<&l

98、t;"]與"<<"所有空閑盤(pán)塊不匹配"<<endl;</p><p>  stream.close();</p><p><b>  }else</b></p><p><b>  {</b></p><p>  cout<<

99、;"["<<ary3[i]<<"]與"<<"["<<ary2[j][1]<<"]最佳相匹配"<<endl;</p><p>  stream.open("best_fit.txt", ios::app);</p><p>

100、;  stream<<"["<<ary3[i]<<"]與"<<"["<<ary2[j][1]<<"]最佳相匹配"<<endl;</p><p>  stream.close();</p><p>  if(ary2[j][1]=

101、=ary3[i])</p><p><b>  {</b></p><p>  k=ary2[j][0];</p><p>  ary1[k-1][3]=2;</p><p>  for(l=k;l<n;l++)</p><p><b>  {</b></p>

102、;<p>  ary2[l-1][0]=ary2[l][0];</p><p>  ary2[l-1][1]=ary2[l][1];</p><p>  ary2[l-1][2]=ary2[l][2];</p><p><b>  }</b></p><p><b>  n--;</b>

103、;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  //把對(duì)應(yīng)的內(nèi)存分配進(jìn)行更改</p><p>  k=ary2[j][0];</p>&l

104、t;p>  d=ary1[k-1][1];</p><p>  ary1[k-1][1]=ary3[i];</p><p>  ary1[k-1][3]=2;</p><p><b>  m++;</b></p><p>  for(l=m;l>ary2[j][0]+1;l--)</p><

105、;p><b>  {</b></p><p>  ary1[l-1][0]=ary1[l-2][0]+1;</p><p>  ary1[l-1][1]=ary1[l-2][1];</p><p>  ary1[l-1][2]=ary1[l-2][2];</p><p>  ary1[l-1][3]=ary1[l-

106、2][3];</p><p><b>  }</b></p><p>  k=ary2[j][0];</p><p>  ary1[k][0]=k+1;</p><p>  ary1[k][1]=d-ary1[k-1][1];</p><p>  ary1[k][2]=ary1[k-1][1]+a

107、ry1[k-1][2];</p><p>  ary1[k][3]=0;</p><p><b>  k=0;</b></p><p>  for(id2=0;id2<m;id2++)</p><p><b>  {</b></p><p>  if(ary1[id2]

108、[3]!=2)</p><p><b>  {</b></p><p>  ary2[k][0]=ary1[id2][0];</p><p>  ary2[k][1]=ary1[id2][1];</p><p>  ary2[k][2]=ary1[id2][2];</p><p><b>

109、;  k++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  n=k;</b></p><p>  for(k=j+1;k<n;k++)</p><p><b&

110、gt;  {</b></p><p>  ary2[k][0]++;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  vision(

111、);</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //最壞適應(yīng)算法</b></p><p>  void worst_fit()</p><p><b>  {

112、</b></p><p><b>  int i;</b></p><p><b>  int s;</b></p><p>  int j=-9999;//用來(lái)保存最接近的答案</p><p>  int e=-9999;//用來(lái)存放進(jìn)行比較時(shí)的中間結(jié)果</p><

113、p><b>  int k;</b></p><p><b>  int l;</b></p><p><b>  int d;</b></p><p><b>  int id2;</b></p><p><b>  vision();&

114、lt;/b></p><p>  for(i=0;i<q;i++)</p><p><b>  {</b></p><p><b>  j=-9999;</b></p><p><b>  e=-9999;</b></p><p>  for

115、(s=0;s<n;s++)</p><p><b>  {</b></p><p>  if((ary2[s][1]>=ary3[i])&&(e<ary2[s][1]))//滿足分配要求</p><p><b>  {</b></p><p>  e=ary2[s]

116、[1];</p><p><b>  j=s;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(j<0)</b></p><p><b>  

117、{</b></p><p>  cout<<"["<<ary3[i]<<"]與"<<"所有空閑盤(pán)塊不匹配"<<endl;</p><p>  stream.open("worst_fit.txt", ios::app);</p>

118、<p>  stream<<"["<<ary3[i]<<"]與"<<"所有空閑盤(pán)塊不匹配"<<endl;</p><p>  stream.close();</p><p><b>  }else</b></p><

119、p><b>  {</b></p><p>  cout<<"["<<ary3[i]<<"]與"<<"["<<ary2[j][1]<<"]最差相匹配"<<endl;</p><p>  stream.

120、open("worst_fit.txt", ios::app);</p><p>  stream<<"["<<ary3[i]<<"]與"<<"["<<ary2[j][1]<<"]最差相匹配"<<endl;</p>&

121、lt;p>  stream.close();</p><p>  if(ary2[j][1]==ary3[i])</p><p><b>  {</b></p><p>  k=ary2[j][0];</p><p>  ary1[k-1][3]=2;</p><p>  for(l=k;l

122、<n;l++)</p><p><b>  {</b></p><p>  ary2[l-1][0]=ary2[l][0];</p><p>  ary2[l-1][1]=ary2[l][1];</p><p>  ary2[l-1][2]=ary2[l][2];</p><p><b

123、>  }</b></p><p><b>  n--;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  //

124、把對(duì)應(yīng)的內(nèi)存分配進(jìn)行更改</p><p>  k=ary2[j][0];</p><p>  d=ary1[k-1][1];</p><p>  ary1[k-1][1]=ary3[i];</p><p>  ary1[k-1][3]=2;</p><p><b>  m++;</b></p

125、><p>  for(l=m;l>ary2[j][0]+1;l--)</p><p><b>  {</b></p><p>  ary1[l-1][0]=ary1[l-2][0]+1;</p><p>  ary1[l-1][1]=ary1[l-2][1];</p><p>  ary1[l-

126、1][2]=ary1[l-2][2];</p><p>  ary1[l-1][3]=ary1[l-2][3];</p><p><b>  }</b></p><p>  k=ary2[j][0];</p><p>  ary1[k][0]=k+1;</p><p>  ary1[k][1]=d

127、-ary1[k-1][1];</p><p>  ary1[k][2]=ary1[k-1][1]+ary1[k-1][2];</p><p>  ary1[k][3]=0;</p><p><b>  k=0;</b></p><p>  for(id2=0;id2<m;id2++)</p><

128、p><b>  {</b></p><p>  if(ary1[id2][3]!=2)</p><p><b>  {</b></p><p>  ary2[k][0]=ary1[id2][0];</p><p>  ary2[k][1]=ary1[id2][1];</p>&l

129、t;p>  ary2[k][2]=ary1[id2][2];</p><p><b>  k++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  n=k;</b></p>

130、;<p>  for(k=j+1;k<n;k++)</p><p><b>  {</b></p><p>  ary2[k][0]++;</p><p><b>  }</b></p><p><b>  }</b></p><p>

131、;<b>  }</b></p><p><b>  vision();</b></p><p><b>  } </b></p><p><b>  }</b></p><p><b>  //回收內(nèi)存算法:</b></p&g

132、t;<p><b>  /* </b></p><p>  有共計(jì)八種情況,1.(1)回收區(qū)上鄰接著空閑盤(pán)塊,下連接著已分配盤(pán)塊</p><p>  (2)回收區(qū)下鄰接著空閑盤(pán)塊,上鄰接著已分配盤(pán)塊</p><p>  (3)回收區(qū)上下連接的都是空閑盤(pán)塊</p><p>  (4)空閑區(qū)上下鄰接的都是已分配

133、盤(pán)塊</p><p> ?。?)要回收的盤(pán)塊就是第一個(gè)盤(pán)塊,并且向下鄰接著空閑盤(pán)塊</p><p>  (6)要回收的盤(pán)塊就是第一個(gè)盤(pán)塊,但是向下鄰接著已分配盤(pán)塊</p><p>  (7)要回收的盤(pán)塊就是最后一個(gè)盤(pán)塊,并且向上鄰接的是空閑盤(pán)塊</p><p>  (8)要回收的盤(pán)塊就是最后一個(gè)盤(pán)塊,但是向上鄰接的是已分配盤(pán)塊</p&g

134、t;<p><b>  */</b></p><p>  void apply_recycle()</p><p><b>  {</b></p><p><b>  int i;</b></p><p><b>  int j;</b>&l

135、t;/p><p><b>  int k;</b></p><p><b>  if(m==1)</b></p><p><b>  {</b></p><p>  ary1[0][3]=0;</p><p><b>  n++;</b>

136、;</p><p>  ary2[0][0]=1;</p><p>  ary2[0][1]=ary1[0][1];</p><p>  ary2[0][2]=ary1[0][2];</p><p><b>  vision();</b></p><p><b>  }</b>

137、;</p><p><b>  else</b></p><p><b>  {</b></p><p>  if(recycle==1)</p><p>  { //cout<<ary1</p><p>  if(ary1[1][3]!=2)</p&g

138、t;<p><b>  {</b></p><p>  cout<<"要回收的盤(pán)塊就是第一個(gè)盤(pán)塊,并且向下鄰接著空閑盤(pán)塊"<<endl;</p><p>  stream.open("huishou.txt", ios::app);</p><p>  stream&

139、lt;<"要回收的盤(pán)塊就是第一個(gè)盤(pán)塊,并且向下鄰接著空閑盤(pán)塊"<<endl;</p><p>  stream.close();</p><p>  ary1[0][1]=ary1[0][1]+ary1[1][1];</p><p>  ary1[0][3]=0;</p><p>  for(i=1;i&

140、lt;m;i++)</p><p><b>  {</b></p><p>  ary1[i][0]=ary1[i+1][0]-1;</p><p>  ary1[i][1]=ary1[i+1][1];</p><p>  ary1[i][2]=ary1[i+1][2];</p><p>  ar

141、y1[i][3]=ary1[i+1][3];</p><p>  //cout<<"ary1[i][3]"<<ary1[i][3]<<endl;</p><p><b>  }</b></p><p><b>  m--;</b></p><p&g

142、t;  //cout<<""</p><p><b>  k=0;</b></p><p><b>  vision();</b></p><p>  //cout<<"ary1[0][3]"<<ary1[0][3]<<endl;&l

143、t;/p><p>  //cout<<"ary1[1][3]"<<ary1[1][3]<<endl;</p><p>  //cout<<"ary1[2][3]"<<ary1[2][3]<<endl;</p><p>  //cout<<"

144、;ary1[3][3]"<<ary1[3][3]<<endl;</p><p>  for(j=0;j<m;j++)</p><p><b>  {</b></p><p>  cout<<"ary1[j][3]"<<ary1[j][3]<<endl

145、;</p><p>  if(ary1[j][3]!=2)</p><p><b>  {</b></p><p>  ary2[k][0]=ary1[j][0];</p><p>  ary2[k][1]=ary1[j][1];</p><p>  ary2[k][2]=ary1[j][2];&

146、lt;/p><p><b>  k++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  n=k;</b></p><p><b>  vision();&l

147、t;/b></p><p><b>  }</b></p><p><b>  else{</b></p><p>  cout<<"要回收的盤(pán)塊就是第一個(gè)盤(pán)塊,但是向下鄰接著已分配盤(pán)塊"<<endl;</p><p>  stream.open(&

148、quot;huishou.txt", ios::app);</p><p>  stream<<"要回收的盤(pán)塊就是第一個(gè)盤(pán)塊,但是向下鄰接著已分配盤(pán)塊"<<endl;</p><p>  stream.close();</p><p>  ary1[0][3]=0;</p><p><

149、;b>  k=0;</b></p><p>  for(j=0;j<m;j++)</p><p><b>  {</b></p><p>  //cout<<"ary1[j][3]"<<ary1[j][3]<<endl;</p><p>  

150、if(ary1[j][3]!=2)</p><p><b>  {</b></p><p>  ary2[k][0]=ary1[j][0];</p><p>  ary2[k][1]=ary1[j][1];</p><p>  ary2[k][2]=ary1[j][2];</p><p><

151、b>  k++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  n=k;</b></p><p><b>  vision();</b></p><

152、p><b>  }</b></p><p><b>  }</b></p><p>  else if(recycle==m)</p><p><b>  {</b></p><p>  if(ary1[recycle-2][3]!=2)</p><p

153、><b>  {</b></p><p>  cout<<"要回收的盤(pán)塊就是最后一個(gè)盤(pán)塊,并且向上鄰接的是空閑盤(pán)塊"<<endl;</p><p>  stream.open("huishou.txt", ios::app);</p><p>  stream<<

154、"要回收的盤(pán)塊就是最后一個(gè)盤(pán)塊,并且向上鄰接的是空閑盤(pán)塊"<<endl;</p><p>  stream.close();</p><p>  ary1[recycle-2][3]=0;</p><p>  ary1[recycle-2][1]=ary1[recycle-2][1]+ary1[recycle-1][1];</p

155、><p><b>  m--;</b></p><p><b>  k=0;</b></p><p>  for(j=0;j<m;j++)</p><p><b>  {</b></p><p>  //cout<<"ary1[j

156、][3]"<<ary1[j][3]<<endl;</p><p>  if(ary1[j][3]!=2)</p><p><b>  {</b></p><p>  ary2[k][0]=ary1[j][0];</p><p>  ary2[k][1]=ary1[j][1];</p

157、><p>  ary2[k][2]=ary1[j][2];</p><p><b>  k++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  n=k;</b><

158、;/p><p><b>  vision();</b></p><p><b>  }</b></p><p><b>  else{</b></p><p>  cout<<"要回收的盤(pán)塊就是最后一個(gè)盤(pán)塊,但是向上鄰接的是已分配盤(pán)塊"<<

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫(kù)僅提供信息存儲(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)論