2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩32頁(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>  《網(wǎng)絡(luò)操作系統(tǒng)》</b></p><p>  課 程 設(shè) 計(jì) 報(bào) 告 書(shū)</p><p>  題 目:請(qǐng)求調(diào)頁(yè)存儲(chǔ)管理方式的模擬 </p><p>  學(xué) 號(hào): </p><p>  學(xué)生姓名: </p>

2、<p>  指導(dǎo)教師: </p><p>  2010 年 12 月 10 日</p><p><b>  目錄</b></p><p>  課程設(shè)計(jì)一:請(qǐng)求調(diào)頁(yè)存儲(chǔ)管理方式的模擬</p><p><b>  一、實(shí)驗(yàn)?zāi)康?lt;/b></p>&

3、lt;p><b>  二、實(shí)驗(yàn)內(nèi)容</b></p><p><b>  三、設(shè)計(jì)思路</b></p><p>  四、文件系統(tǒng)結(jié)構(gòu)的說(shuō)明</p><p><b>  五、數(shù)據(jù)結(jié)構(gòu)的說(shuō)明</b></p><p><b>  六、程序流程圖</b><

4、;/p><p><b>  七、源代碼</b></p><p>  八、運(yùn)行結(jié)果以及分析</p><p><b>  九、使用說(shuō)明</b></p><p><b>  十、總結(jié)</b></p><p>  課程設(shè)計(jì)二:通過(guò)DNS協(xié)議,可實(shí)現(xiàn)IP地址和主機(jī)名之

5、間的轉(zhuǎn)換</p><p><b>  一、實(shí)驗(yàn)?zāi)康?lt;/b></p><p><b>  二、實(shí)驗(yàn)內(nèi)容</b></p><p><b>  三、設(shè)計(jì)思路</b></p><p>  四、文件系統(tǒng)結(jié)構(gòu)的說(shuō)明</p><p><b>  五、源代碼&

6、lt;/b></p><p>  六、運(yùn)行結(jié)果以及分析</p><p><b>  七、使用說(shuō)明</b></p><p><b>  八、總結(jié)</b></p><p><b>  課程設(shè)計(jì)一</b></p><p><b>  一:實(shí)驗(yàn)?zāi)?/p>

7、的</b></p><p>  1.通過(guò)模擬實(shí)現(xiàn)請(qǐng)求頁(yè)式存儲(chǔ)管理的幾種基本頁(yè)面置換算法,了解虛擬儲(chǔ)技術(shù)的特點(diǎn)。</p><p>  2.通過(guò)對(duì)頁(yè)面、頁(yè)表、地址轉(zhuǎn)換和頁(yè)面置換過(guò)程的模擬,加深對(duì)請(qǐng)求調(diào)頁(yè)系統(tǒng)的原理和實(shí)現(xiàn)過(guò)程的理解。</p><p>  3.掌握虛擬存儲(chǔ)請(qǐng)求頁(yè)式存儲(chǔ)管理中幾種基本頁(yè)面置換算法的基本思想和實(shí)現(xiàn)過(guò)程,并比較它們的效率。</p&

8、gt;<p><b>  二:實(shí)驗(yàn)內(nèi)容</b></p><p>  1.假設(shè)每個(gè)頁(yè)面中可存放10條指令,分配給一個(gè)作業(yè)的內(nèi)存塊數(shù)為4</p><p>  2.用C語(yǔ)言模擬一作業(yè)的執(zhí)行過(guò)程。該作業(yè)共有320條指令,即它的地址空間為32頁(yè),目前它的所有頁(yè)都還未調(diào)入內(nèi)存。在模擬過(guò)程中,如果訪問(wèn)的指令已在內(nèi)存,則顯示其物理地址,并轉(zhuǎn)下一條指令。如果所訪問(wèn)的指令還

9、未裝入內(nèi)存,則發(fā)生缺頁(yè),此時(shí)需記錄缺頁(yè)的次數(shù),并將相應(yīng)頁(yè)調(diào)入內(nèi)存。如果4個(gè)內(nèi)存塊中均已裝入該作業(yè),則需進(jìn)行頁(yè)面轉(zhuǎn)換。最后顯示其物理地址,并轉(zhuǎn)下一條指令。在所有320條指令執(zhí)行完畢后,請(qǐng)計(jì)算并顯示作業(yè)運(yùn)行過(guò)程中發(fā)生的缺頁(yè)率。</p><p>  3.置換算法:請(qǐng)分別考慮OPT、FIFO和LRU算法。</p><p>  4.作業(yè)中指令的訪問(wèn)次序按下述原則生成:</p><

10、p>  50%的指令是順序執(zhí)行的</p><p>  25%的指令是均勻分布在前地址部分</p><p>  25%的指令是均勻分布在后地址部分</p><p><b>  具體的實(shí)施辦法:</b></p><p> ?、僭赱0,319]之間隨機(jī)選取一條起始指令,其序號(hào)為m</p><p>

11、 ?、陧樞驁?zhí)行下一條指令,即序號(hào)為m+1的指令</p><p> ?、弁ㄟ^(guò)隨機(jī)數(shù),跳轉(zhuǎn)到前地址部分[0,m-1]中的某條指令處,其序號(hào)為m1;</p><p>  ④順序執(zhí)行下一條指令,即序號(hào)為m1+1的指令</p><p> ?、萃ㄟ^(guò)隨機(jī)數(shù),跳轉(zhuǎn)到后地址部分[m1+2,319]中的某條指令處,其序號(hào)為m2;</p><p> ?、揄樞驁?zhí)行下

12、一條指令,即序號(hào)為m2+1的指令</p><p> ?、咧貜?fù)跳轉(zhuǎn)到前地址部分、順序執(zhí)行、跳轉(zhuǎn)到后地址部分、順序執(zhí)行的過(guò)程,直至執(zhí)行320條指令。</p><p><b>  三:設(shè)計(jì)思路</b></p><p>  因?yàn)樵诔绦蜻\(yùn)行的過(guò)程中,當(dāng)我們?cè)L問(wèn)一個(gè)頁(yè)面時(shí),倘若此頁(yè)面不在內(nèi)存當(dāng)中,我們就需要將其調(diào)入內(nèi)存。此時(shí)就產(chǎn)生了兩個(gè)問(wèn)題:內(nèi)存是否有空閑

13、和倘若內(nèi)存有空閑我們要將那個(gè)頁(yè)面調(diào)出的問(wèn)題。這樣的話就需要根據(jù)一定的算法來(lái)判斷決定。我們大家都知道,算法的好壞反映在程序執(zhí)行的效率上面,所以我們要根據(jù)不同的情況調(diào)用不同的算法。這里我們有三種置換算法:1最佳置換算法(Optimal) 2、先進(jìn)先出法(First In First Out) 3、最近最久未使用(Least Recently Used)。所謂最佳置換算法,就是其所選擇的被淘汰頁(yè)是將來(lái)不再被使用,或者是在最遠(yuǎn)的將來(lái)才被訪問(wèn)的頁(yè)

14、面。 采用這種頁(yè)面置換算法, 保證有最少的缺頁(yè)率。但由于目前還無(wú)法預(yù)知一個(gè)進(jìn)程在內(nèi)存的若干個(gè)頁(yè)面中,哪個(gè)在最長(zhǎng)的時(shí)間內(nèi)不會(huì)被訪問(wèn),因而,現(xiàn)實(shí)中該算法是無(wú)法實(shí)現(xiàn)的。因此在該算法的模擬過(guò)程中,頁(yè)面訪問(wèn)次序必須是給定的,具體實(shí)現(xiàn)為:對(duì)每一個(gè)物理塊設(shè)置一個(gè)整數(shù)型的訪問(wèn)標(biāo)志位,當(dāng)需要置換物理塊中的某一頁(yè)時(shí),將每一個(gè)物理塊中的頁(yè)面號(hào)與當(dāng)前需調(diào)入頁(yè)以后的每一頁(yè)面號(hào)進(jìn)行比較,若物理塊中的頁(yè)面號(hào)與所有的頁(yè)面號(hào)都不同,則該頁(yè)即為將來(lái)不再使用的頁(yè),</

15、p><p>  四:文件系統(tǒng)結(jié)構(gòu)的說(shuō)明</p><p>  #include <iostream.h></p><p>  #include<stdlib.h></p><p>  #include<conio.h></p><p>  #include<stdio.h>&l

16、t;/p><p>  #define Bsize 4</p><p>  typedef struct BLOCK//聲明一種新類型——物理塊類型</p><p><b>  { </b></p><p>  int pageNum;//頁(yè)號(hào)</p><p>  int accessed;//訪問(wèn)字

17、段,其值表示多久未被訪問(wèn)</p><p>  }BLOCK; </p><p>  int pc;//程序計(jì)數(shù)器,用來(lái)記錄指令的序號(hào)</p><p>  int m;//缺頁(yè)計(jì)數(shù)器,用來(lái)記錄缺頁(yè)的次數(shù) </p><p>  static int random[320];//用來(lái)存儲(chǔ)320條隨機(jī)數(shù)</p><p&

18、gt;  BLOCK block[Bsize]; //定義一大小為4的物理塊數(shù)組</p><p>  void init( ); //程序初始化函數(shù)</p><p>  int findExist(int curpage);//查找物理塊中是否有該頁(yè)面</p><p>  int findSpace( );//查找是否有空閑物理塊</p>&l

19、t;p>  int findReplace( );//查找應(yīng)予置換的頁(yè)面</p><p>  void display ( );//顯示</p><p>  void suijishu( );//產(chǎn)生320條隨機(jī)數(shù),顯示并存儲(chǔ)到random[320]</p><p>  void pagestring( );//顯示調(diào)用的頁(yè)面隊(duì)列</p><

20、;p>  void OPT( );//OPT算法——最佳置換算法</p><p>  void LRU( );// LRU算法——最近最久未使用算法</p><p>  void FIFO( );//FIFO算法</p><p><b>  五:數(shù)據(jù)結(jié)構(gòu)的說(shuō)明</b></p><p>  在本程序中,對(duì)于物理塊使用

21、了結(jié)構(gòu)體。最后主函數(shù)通過(guò)依次調(diào)用三種算法函數(shù)來(lái)實(shí)現(xiàn)功能。</p><p>  頭文件:#include <iostream.h></p><p>  #include<stdlib.h></p><p>  #include<conio.h></p><p>  #include<stdio.h>

22、;</p><p>  #define Bsize 4</p><p><b>  物理塊:</b></p><p>  typedef struct BLOCK//聲明一種新類型——物理塊類型</p><p><b>  { </b></p><p>  int page

23、Num;//頁(yè)號(hào)</p><p>  int accessed;//訪問(wèn)字段,其值表示多久未被訪問(wèn)</p><p>  }BLOCK; </p><p>  六:程序流程圖——整體</p><p>  六:程序流程圖——LRU</p><p><b>  七:源代碼</b></p

24、><p>  #include <iostream.h></p><p>  #include<stdlib.h></p><p>  #include<conio.h></p><p>  #include<stdio.h></p><p>  #define Bsize

25、4</p><p>  typedef struct BLOCK//聲明一種新類型——物理塊類型</p><p><b>  { </b></p><p>  int pageNum;//頁(yè)號(hào)</p><p>  int accessed;//訪問(wèn)字段,其值表示多久未被訪問(wèn)</p><p>  

26、}BLOCK; </p><p>  int pc;//程序計(jì)數(shù)器,用來(lái)記錄指令的序號(hào)</p><p>  int m;//缺頁(yè)計(jì)數(shù)器,用來(lái)記錄缺頁(yè)的次數(shù) </p><p>  static int random[320];//用來(lái)存儲(chǔ)320條隨機(jī)數(shù)</p><p>  BLOCK block[Bsize]; //定義一大小為4的

27、物理塊數(shù)組</p><p>  void init( ); //程序初始化函數(shù)</p><p>  int findExist(int curpage);//查找物理塊中是否有該頁(yè)面</p><p>  int findSpace( );//查找是否有空閑物理塊</p><p>  int findReplace( );//查找應(yīng)予置

28、換的頁(yè)面</p><p>  void display ( );//顯示</p><p>  void suijishu( );//產(chǎn)生320條隨機(jī)數(shù),顯示并存儲(chǔ)到random[320]</p><p>  void pagestring( );//顯示調(diào)用的頁(yè)面隊(duì)列</p><p>  void OPT( );//OPT算法——最佳置換算法

29、</p><p>  void LRU( );// LRU算法——最近最久未使用算法</p><p>  void FIFO( );//FIFO算法</p><p>  void init( ) //程序初始化函數(shù)</p><p><b>  { </b></p><p>  for(int i

30、=0;i<Bsize;i++) </p><p><b>  {</b></p><p>  block[i].pageNum=-1;</p><p>  block[i].accessed=0;</p><p><b>  pc=m=0;</b></p><p>&l

31、t;b>  }</b></p><p><b>  }</b></p><p>  int findExist(int curpage)//查找物理塊中是否有該頁(yè)面</p><p><b>  {</b></p><p>  for(int i=0; i<Bsize; i++

32、)</p><p><b>  {</b></p><p>  if(block[i].pageNum == curpage )</p><p>  return i;//檢測(cè)到內(nèi)存中有該頁(yè)面,返回block中的位置</p><p><b>  }</b></p><p> 

33、 return -1;</p><p><b>  }</b></p><p>  int findSpace( )//查找是否有空閑物理塊</p><p><b>  { </b></p><p>  for(int i=0; i<Bsize; i++)</p><p

34、><b>  {</b></p><p>  if(block[i].pageNum == -1)</p><p>  return i;//找到空閑的block,返回block中的位置</p><p><b>  } </b></p><p>  return -1;</p>

35、<p><b>  }</b></p><p>  int findReplace( )//查找應(yīng)予置換的頁(yè)面</p><p><b>  {</b></p><p>  int pos = 0;</p><p>  for(int i=0; i<Bsize; i++)</p&

36、gt;<p><b>  {</b></p><p>  if(block[i].accessed >block[pos].accessed)</p><p>  pos = i;//找到應(yīng)予置換頁(yè)面,返回BLOCK中位置</p><p><b>  }</b></p><p>

37、  return pos;</p><p><b>  }</b></p><p>  void display( )</p><p><b>  {</b></p><p>  for(int i=0; i<Bsize; i++)</p><p><b> 

38、 {</b></p><p>  if(block[i].pageNum != -1)</p><p>  { printf(" %02d",block[i].pageNum);}</p><p><b>  }</b></p><p>  cout<<endl;&

39、lt;/p><p><b>  }</b></p><p>  void suijishu( )</p><p>  { int flag=0;</p><p>  printf("請(qǐng)輸入一個(gè)0~320之間的隨機(jī)數(shù):\n");</p><p>  scanf("%d&

40、quot;,&pc);</p><p>  printf("-------按照要求產(chǎn)生的320個(gè)隨機(jī)數(shù):-------\n");</p><p>  for(int i=0;i<320;i++)</p><p><b>  { </b></p><p>  random[i]=pc

41、;</p><p>  if(flag%2==0) pc=++pc%320;//順序執(zhí)行下一條指令,即序號(hào)為m+1的指令</p><p>  if(flag==1) pc=rand( )% (pc-1);//通過(guò)隨機(jī)數(shù),跳轉(zhuǎn)到前地址部分[0,m-1]中的某條指令處,其序號(hào)為m1</p><p>  if(flag==3) pc=pc+1+(rand( )%(320-

42、(pc+1)));//通過(guò)隨機(jī)數(shù),跳轉(zhuǎn)到后地址部分[m1+2,319]中的某條指令處,其序號(hào)為m2</p><p>  flag=++flag%4;//如果4個(gè)內(nèi)存塊中均已裝入該作業(yè),則需進(jìn)行頁(yè)面轉(zhuǎn)換</p><p>  printf(" %03d",random[i]);</p><p>  if((i+1)%10==0) cout<&l

43、t;endl;//每個(gè)頁(yè)面中可存放10條指令</p><p><b>  } </b></p><p><b>  }</b></p><p>  void pagestring( )</p><p><b>  { </b></p><p>  f

44、or(int i=0;i<320;i++)</p><p><b>  {</b></p><p>  printf(" %02d",random[i]/10);//顯示該頁(yè)面</p><p>  if((i+1)%10==0) printf("\n");//每個(gè)頁(yè)面中可存放10條指令</p&

45、gt;<p><b>  }</b></p><p><b>  }</b></p><p>  void OPT( )/*OPT算法——最佳置換算法.最佳置換算法是Blady在理論上提出的一種算法。其所選擇的被淘汰頁(yè)是將來(lái)不再被使用,或者是在最遠(yuǎn)的將</p><p>  來(lái)才被訪問(wèn)的頁(yè)面.采用這種頁(yè)面置換算

46、法, 保證有最少的缺頁(yè)率。但由于目前還無(wú)法預(yù)知一個(gè)進(jìn)程在內(nèi)存的若干個(gè)頁(yè)面中,哪個(gè)在最長(zhǎng)的</p><p>  時(shí)間內(nèi)不會(huì)被訪問(wèn),因而,現(xiàn)實(shí)中該算法是無(wú)法實(shí)現(xiàn)的。因此在該算法的模擬過(guò)程中,頁(yè)面訪問(wèn)次序必須是給定的,具體實(shí)現(xiàn)為:對(duì)每一</p><p>  物理塊設(shè)置一個(gè)整數(shù)型的訪問(wèn)標(biāo)志位,當(dāng)需要置換物理塊中的某一頁(yè)時(shí),將每一個(gè)物理塊中的頁(yè)面號(hào)與當(dāng)前需調(diào)入頁(yè)以后的每一頁(yè)面號(hào)進(jìn)行</p>

47、;<p>  比較,若物理塊中的頁(yè)面號(hào)與所有的頁(yè)面號(hào)都不同,則該頁(yè)即為將來(lái)不再使用的頁(yè),將訪問(wèn)標(biāo)記設(shè)置為1000,表示將來(lái)不會(huì)用,設(shè)置為一個(gè)</p><p>  很大數(shù);若找到頁(yè)號(hào)相同的則將其訪問(wèn)次序記入訪問(wèn)標(biāo)記,比較訪問(wèn)標(biāo)記,最大的即為最久不會(huì)被訪問(wèn)的,將其換出。</p><p><b>  */</b></p><p><

48、;b>  {</b></p><p>  int exist,space,position ;</p><p>  int curpage;</p><p>  for(int i=0;i<320;i++)</p><p><b>  { </b></p><p> 

49、 if(i%100==0) getch( );</p><p>  pc=random[i]; </p><p>  curpage=pc/10;</p><p>  exist = findExist(curpage);</p><p>  if(exist==-1)</p><p><b>  {<

50、/b></p><p>  space = findSpace ( );</p><p>  if(space != -1)</p><p><b>  {</b></p><p>  block[space].pageNum = curpage; </p><p>  display(

51、);</p><p><b>  m=m+1;</b></p><p><b>  }</b></p><p><b>  else {</b></p><p>  for(int k=0;k<Bsize;k++)</p><p><b>

52、;  {</b></p><p>  for(int j=i;j<320;j++)</p><p><b>  {</b></p><p>  if(block[k].pageNum!= random[j]/10)//物理塊中的頁(yè)面號(hào)與所有的頁(yè)面號(hào)都不同 { </p><p>  block[k].

53、accessed = 1000; </p><p>  }//將來(lái)不會(huì)用,設(shè)置為一個(gè)很大數(shù)</p><p>  else//找到頁(yè)號(hào)相同的則將其訪問(wèn)次序記入訪問(wèn)標(biāo)記</p><p><b>  {</b></p><p>  block[k].accessed = j;</p><p>  bre

54、ak; </p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  position = findReplace( ); </p><p>  block[po

55、sition].pageNum = curpage; </p><p>  display( );</p><p>  m++; </p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }<

56、/b></p><p>  printf("缺頁(yè)次數(shù):%d\n",m);</p><p>  cout<<"缺頁(yè)率:"<<(m/320.0)*100<<"%"<<endl;</p><p><b>  }</b></p>

57、<p>  void LRU( )/*LRU算法——最近最久未使用算法.該算法以最近的過(guò)去作為不久將來(lái)的近似, 將過(guò)去最長(zhǎng)一段時(shí)間里不曾被使用的頁(yè)面置換掉。</p><p>  在該算法的模擬過(guò)程中,每當(dāng)物理塊中的頁(yè)面被訪問(wèn)時(shí),便將其訪問(wèn)標(biāo)記置為-1</p><p>  以后每執(zhí)行一條指令,便將物理塊中各頁(yè)面的訪問(wèn)標(biāo)記加一,需置換時(shí)訪問(wèn)標(biāo)記最大的便是將要被置換的。</p

58、><p><b>  */</b></p><p><b>  {</b></p><p>  int exist,space,position ;</p><p>  int curpage;</p><p>  for(int i=0;i<320;i++)</p&

59、gt;<p><b>  { </b></p><p>  if(i%100==0) getch( );</p><p>  pc=random[i]; </p><p>  curpage=pc/10;//每頁(yè)十個(gè)指令</p><p>  exist = findExist(curpage);<

60、/p><p>  if(exist==-1)</p><p><b>  {</b></p><p>  space = findSpace( );</p><p>  if(space != -1)</p><p><b>  {</b></p><p>

61、;  block[space].pageNum = curpage; </p><p>  display( );</p><p><b>  m=m+1;</b></p><p><b>  }</b></p><p><b>  else</b></p>&

62、lt;p><b>  {</b></p><p>  position = findReplace( ); </p><p>  block[position].pageNum = curpage; </p><p>  display( );</p><p>  m++; </p>

63、<p><b>  }</b></p><p><b>  }</b></p><p>  else block[exist].accessed = -1;//恢復(fù)存在的并剛訪問(wèn)過(guò)的BLOCK中頁(yè)面accessed為-1</p><p>  for(int j=0; j<4; j++)</p>

64、;<p>  {block[j].accessed++;}//每執(zhí)行一條指令,便將物理塊中各頁(yè)面的訪問(wèn)標(biāo)記加一</p><p><b>  }</b></p><p>  printf("缺頁(yè)次數(shù):%d\n",m);</p><p>  cout<<"缺頁(yè)率:"<<(

65、m/320.0)*100<<"%"<<endl;</p><p><b>  }</b></p><p>  void FIFO( )/*該算法總是淘汰最先進(jìn)入內(nèi)存的頁(yè)面,既選擇在內(nèi)存中駐留時(shí)間最久的頁(yè)面予以淘汰。</p><p>  在該算法的模擬過(guò)程中,每當(dāng)某一頁(yè)面進(jìn)入內(nèi)存時(shí)(包括頁(yè)面置換時(shí)頁(yè)面的

66、置入),物理塊中各頁(yè)面訪問(wèn)標(biāo)記自動(dòng)加一,置換后,將置換頁(yè)面</p><p>  所在的物理塊中訪問(wèn)標(biāo)記減一;這樣能防止當(dāng)物理塊訪問(wèn)標(biāo)記出現(xiàn)兩個(gè)以上相同的值的錯(cuò)誤執(zhí)行,更好地模擬了先進(jìn)先出法;</p><p><b>  */</b></p><p><b>  {</b></p><p>  int

67、 exist,space,position ;</p><p>  int curpage;</p><p>  for(int i=0;i<320;i++)</p><p><b>  { </b></p><p>  if(i%100==0) getch( );</p><p>  

68、pc=random[i]; </p><p>  curpage=pc/10;</p><p>  exist = findExist(curpage);</p><p>  if(exist==-1)</p><p><b>  {</b></p><p>  space = findSpace

69、( );</p><p>  if(space != -1)</p><p><b>  {</b></p><p>  block[space].pageNum = curpage; </p><p>  display( );</p><p><b>  m=m+1;</b&

70、gt;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  position = findReplace( ); </p><p>  block[posi

71、tion].pageNum = curpage; </p><p>  display( );</p><p><b>  m++;</b></p><p>  block[position].accessed--;</p><p><b>  }</b></p><p>

72、;<b>  }</b></p><p>  for(int j=0; j<Bsize; j++)</p><p>  block[j].accessed++;//每當(dāng)某一頁(yè)面進(jìn)入內(nèi)存時(shí)(包括頁(yè)面置換時(shí)頁(yè)面的置入),物理塊中各頁(yè)面訪問(wèn)標(biāo)記自動(dòng)加一</p><p><b>  }</b></p><

73、p>  printf("缺頁(yè)次數(shù):%d\n",m);</p><p>  cout<<"缺頁(yè)率:"<<(m/320.0)*100<<"%"<<endl;</p><p><b>  }</b></p><p>  void main

74、( )</p><p><b>  { </b></p><p>  int select;</p><p>  cout<<"請(qǐng)輸入第一條指令號(hào)(0~320):";</p><p>  suijishu( );</p><p>  cout<<&qu

75、ot;-------對(duì)應(yīng)的調(diào)用頁(yè)面隊(duì)列-------"<<endl;</p><p>  pagestring( );</p><p><b>  do</b></p><p><b>  { </b></p><p>  cout<<"---------

76、-------------------------------"<<endl;</p><p>  cout<<"****************************************"<<endl;</p><p>  cout<<"------1:OPT 2:LRU 3:FIFO

77、4:退出------"<<endl;</p><p>  cout<<"****************************************"<<endl;</p><p>  cout<<"----------------------------------------"<

78、<endl;</p><p>  cout<<" 請(qǐng)選擇一種頁(yè)面置換算法:\n"; </p><p>  cin>>select;</p><p>  cout<<"----------------------------------------"<<endl

79、;</p><p><b>  init( );</b></p><p>  switch(select)</p><p><b>  {</b></p><p>  case 1:printf("您選擇的是最佳置換算法OPT:\n");</p><p>

80、  printf("----------------------------------------\n");</p><p>  OPT( );//輸出結(jié)果</p><p><b>  break;</b></p><p>  case 2:printf("您選擇的是最近最久未使用置換算法LRU:\n"

81、);</p><p>  printf("----------------------------------------\n");</p><p>  LRU( );//輸出結(jié)果</p><p><b>  break;</b></p><p>  case 3:printf("您選擇的是

82、先進(jìn)先出置換算法FIFO:\n");</p><p>  printf("----------------------------------------\n");</p><p>  FIFO( );//輸出結(jié)果</p><p><b>  break; </b></p><p>  de

83、fault: ;</p><p><b>  } </b></p><p>  }while(select!=4);//每頁(yè)分配4個(gè)內(nèi)存塊</p><p><b>  }</b></p><p><b>  }</b></p><p><b>

84、  八:運(yùn)行結(jié)果及分析</b></p><p><b>  九:使用說(shuō)明</b></p><p>  1、首先進(jìn)入程序,在0~320之間隨意挑選一個(gè)數(shù)輸入,按回車鍵。</p><p>  2、程序產(chǎn)生320個(gè)隨機(jī)數(shù)。</p><p>  3、開(kāi)始選擇一種置換算法進(jìn)行頁(yè)面的置換。輸入置換算法前面的數(shù)字,回車。&

85、lt;/p><p>  4、回車,得到置換算法的結(jié)果。</p><p>  5、換做其他的算法,依然回車,得到置換算法的結(jié)果。</p><p>  6、完成后選擇退出。。</p><p><b>  十:總結(jié)</b></p><p>  1、通過(guò)這次操作系統(tǒng)課程設(shè)計(jì)的編寫(xiě),我學(xué)到了很多。剛開(kāi)始見(jiàn)到設(shè)計(jì)

86、要求時(shí),我有點(diǎn)沒(méi)有思路。通過(guò)從網(wǎng)上參考了一些資料以后,我開(kāi)始慢慢的了解了程序設(shè)計(jì)中的一些問(wèn)題。首先:我對(duì)OPT、FIFO和LRU算法三種算法有了一定的了解。其次,在分析題目要求的時(shí)候,對(duì)于如何將作業(yè)中指令的訪問(wèn)次序按一定原則生成的問(wèn)題我沒(méi)有一點(diǎn)思路。最后,在仔細(xì)的看了一些類似的題目代碼以后,我終于有了一定的理解。原來(lái)在實(shí)現(xiàn)的時(shí)候,通過(guò)先順序執(zhí)行一條隨機(jī)指令,譬如該指令為M0,然后開(kāi)始順序執(zhí)行下一條指令M0+1,緊接著通過(guò)跳轉(zhuǎn)函數(shù)跳轉(zhuǎn)到地

87、址部分[0,M-1]中的某條指令處,其序號(hào)記為M1,然后再次順序執(zhí)行下一條指令,即序號(hào)為M1+1的指令,最后通過(guò)跳轉(zhuǎn)函數(shù)跳轉(zhuǎn)到地址部分[M1+2,319]中的某條指令處,其序號(hào)為M2,,然后通過(guò)重復(fù)執(zhí)行跳轉(zhuǎn)到前址,順序執(zhí)行,跳轉(zhuǎn)到后址,順序執(zhí)行的方法實(shí)現(xiàn)了50%的指令是順序執(zhí)行的;25%的指令是均勻分布在前地址部分;25%的指令是均勻分布在后地址部分的目的。其中跳轉(zhuǎn)函數(shù)上我復(fù)習(xí)了以前的rand函數(shù)。</p><p&g

88、t;  2、其次,在實(shí)現(xiàn)設(shè)計(jì)要求功能的時(shí)候,對(duì)于那些頁(yè)面跳轉(zhuǎn),頁(yè)面置換的細(xì)節(jié)內(nèi)容通過(guò)使用</p><p>  if((i+1)%10==0) cout<<endl;</p><p>  flag=++flag%4;</p><p>  來(lái)實(shí)現(xiàn)。期間的參數(shù)值的返回問(wèn)題也需要考慮,以免弄錯(cuò)了。</p><p>  3、關(guān)于這次程序設(shè)計(jì)

89、,我學(xué)到的還有很多,譬如說(shuō)在先進(jìn)先出(FIFO)算法中,如何通過(guò)“當(dāng)某一頁(yè)面進(jìn)入內(nèi)存時(shí)(包括頁(yè)面置換時(shí)頁(yè)面的置入),物理塊中各頁(yè)面訪問(wèn)標(biāo)記自動(dòng)加一,置換后,將置換頁(yè)面所在的物理塊中訪問(wèn)標(biāo)記減一”的方法來(lái)防止當(dāng)物理塊訪問(wèn)標(biāo)記出現(xiàn)兩個(gè)以上相同的值的錯(cuò)誤執(zhí)行問(wèn)題。還有在最佳置換算法中對(duì)于不將來(lái)不再使用的頁(yè)面,將其訪問(wèn)標(biāo)記設(shè)置為1000的方法。以及一些計(jì)算比如缺頁(yè)率計(jì)算問(wèn)題我也學(xué)習(xí)到了很多。</p><p>  4、由于

90、時(shí)間關(guān)系,對(duì)于一些細(xì)節(jié)問(wèn)題我沒(méi)有能夠考慮好,比如說(shuō)輸入控制,以后一定做好。</p><p>  5、通過(guò)本次的課程設(shè)計(jì),我意識(shí)到了自己的編程能力還很差,以后必須通過(guò)練習(xí)來(lái)提高自己的能力。另外,對(duì)于自己的思路老是打不開(kāi)的問(wèn)題,我認(rèn)識(shí)到,這也是專業(yè)知識(shí)掌握的不夠扎實(shí),缺乏實(shí)際操作的問(wèn)題。以后我一定努力改正。同時(shí),我認(rèn)識(shí)到了,程序設(shè)計(jì),不僅僅要的是編程能力,對(duì)于設(shè)計(jì)全局的把握,整體的思考,以及算法的深入理解分析也是必不

91、可少的,這也是我以后個(gè)人需要特別注意學(xué)習(xí)的地方??傊ㄟ^(guò)這次的設(shè)計(jì)作業(yè),我學(xué)習(xí)到了很多很多。</p><p><b>  課程設(shè)計(jì)二</b></p><p><b>  一:實(shí)驗(yàn)?zāi)康?lt;/b></p><p>  通過(guò)DNS協(xié)議,可實(shí)現(xiàn)IP地址和主機(jī)名之間的轉(zhuǎn)換。通過(guò)該程序可以得到:</p><p>

92、;  (1)獲取本機(jī)名(gethostname()函數(shù))//</p><p>  (2)獲得給定主機(jī)名的IP地址(gethostbyname()函數(shù))</p><p>  (3)獲得給定IP地址的主機(jī)名(gethostbyaddr()函數(shù))</p><p><b>  二:實(shí)驗(yàn)內(nèi)容</b></p><p>  設(shè)計(jì)一個(gè)簡(jiǎn)

93、單的Winsock網(wǎng)絡(luò)程序,模擬UDP數(shù)據(jù)報(bào),加深對(duì)DNS作用的理解。</p><p><b>  三:設(shè)計(jì)思路</b></p><p>  1、啟動(dòng) Visual C++,進(jìn)入集成開(kāi)發(fā)環(huán)境;</p><p>  2、建立一個(gè)“Win32 Console Application"類型的工程,工程名自擬;</p><

94、p>  3、在該工程下,新建一個(gè)源程序文件,即選擇“C++ SourceFile",文件名自擬;</p><p>  4、輸入以下源程序(注釋部分可不必輸入);</p><p>  四:文件系統(tǒng)結(jié)構(gòu)的說(shuō)明</p><p>  #include<winsock.h></p><p>  #include<std

95、io.h></p><p>  #include<string.h> </p><p>  #pragma comment(lib,"ws2_32.lib")</p><p><b>  五:源代碼</b></p><p>  #include<winsock.h><

96、;/p><p>  #include<stdio.h></p><p>  #include<string.h> </p><p>  #pragma comment(lib,"ws2_32.lib")</p><p><b>  //主文件//</b></p>&l

97、t;p>  int main()</p><p><b>  {</b></p><p>  WORD wVersionRequested=MAKEWORD(1,1);</p><p>  WSADATA wsaData;//初始化 windows sockets API//</p><p>  if(WSASta

98、rtup(wVersionRequested,&wsaData)){</p><p>  printf("WSAStartup failed%s\n",WSAGetLastError());</p><p>  return -1;</p><p><b>  }</b></p><p>  

99、char hostname[256];//獲得本主機(jī)名//</p><p>  int res=gethostname(hostname,sizeof(hostname));</p><p>  if(res!=0){//錯(cuò)誤處理//</p><p>  printf("Error:%u\n",WSAGetLastError());</p&

100、gt;<p>  return -1;</p><p><b>  }</b></p><p>  printf("本主機(jī)名為:%s\n",hostname); //打印本主機(jī)名字//</p><p>  printf("請(qǐng)輸入一個(gè)主機(jī)域名:"); //輸入一個(gè)主機(jī)的域名//</p

101、><p>  scanf("%s",hostname);//利用主機(jī)名獲得主機(jī)的地址//</p><p>  hostent* pHostent=gethostbyname(hostname);</p><p>  if(pHostent==NULL){//錯(cuò)誤處理//</p><p>  printf("Error

102、:%u\n",WSAGetLastError());</p><p>  return -1;</p><p><b>  }</b></p><p>  //解析返回的主機(jī)地址信息:別名、地址類型、地址長(zhǎng)度,并打印//</p><p>  hostent& he=*pHostent;</p>

103、;<p>  printf("name=%s\naliase=%s\naddrtype=%d\nlength=%d\n",he.h_name,he.h_aliases,he.h_addrtype,he.h_length);</p><p>  sockaddr_in sa;//打印主機(jī)每一個(gè)網(wǎng)卡的 IP地址//</p><p>  for (int nA

104、dapter=0; he.h_addr_list[nAdapter]; nAdapter++) {</p><p>  memcpy(&sa.sin_addr.s_addr,he.h_addr_list[nAdapter],he.h_length);</p><p>  printf("Address:%s\n",inet_ntoa(sa.sin_addr));

105、</p><p>  }//顯示 lP地址//</p><p>  printf("\n");</p><p>  unsigned long addr;</p><p>  char hostaddr[50];</p><p>  printf("請(qǐng)輸人服務(wù)器IP地址:");

106、//輸入一個(gè)服務(wù)器的IP地址//</p><p>  scanf("%s",hostaddr);</p><p>  addr=inet_addr(hostaddr); //將 lP地址轉(zhuǎn)化為網(wǎng)絡(luò)字節(jié)序//</p><p>  pHostent=gethostbyaddr((char *)&addr,4,AF_INET);</p&

107、gt;<p>  //利用IP地址獲得主機(jī)名人//</p><p>  if(pHostent=NULL){//錯(cuò)誤處理//</p><p>  printf("Error:%u\n",WSAGetLastError());</p><p>  return -1;</p><p><b>  }&

108、lt;/b></p><p>  hostent& hel=*pHostent;</p><p>  printf("主機(jī)名為;%s\naliases=%s\naddrtype=%d\nlength=%d\n",he.h_name,he.h_aliases,he.h_addrtype,he.h_length); //打印返回的主機(jī)信息//</p>

109、;<p>  WSACleanup(); //結(jié)束windows sockets API//</p><p><b>  return 0;</b></p><p><b>  }</b></p><p><b>  六:運(yùn)行結(jié)果及分析</b></p><p>

110、<b>  七:使用說(shuō)明</b></p><p>  打開(kāi)程序,輸入一個(gè)主機(jī)域名,回車,得到主機(jī)IP;然后輸入服務(wù)器IP地址,回車,得到主機(jī)名,完成。</p><p><b>  八:總結(jié)</b></p><p>  通過(guò)這次課程設(shè)計(jì),我對(duì)于DNS協(xié)議有了一定了解,對(duì)于主機(jī)名與IP地址之間的轉(zhuǎn)換有了一定的認(rèn)識(shí)。</p

溫馨提示

  • 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)論