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

下載本文檔

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

文檔簡(jiǎn)介

1、<p>  老化算法模擬分頁系統(tǒng)</p><p><b>  摘 要</b></p><p>  設(shè)計(jì)與編寫程序使用老化算法模擬一個(gè)分頁系統(tǒng)。頁面訪問序列從文件(文本文件)中讀取。對(duì)于一個(gè)給定的輸入文件,列出每1000個(gè)內(nèi)存訪問中發(fā)生缺頁中斷的數(shù)目。</p><p><b>  目 錄</b></p&g

2、t;<p>  摘要………………………………………………………………I</p><p>  1總體設(shè)計(jì)………………………………………………………1</p><p>  1.1概要設(shè)計(jì)………………………………………………………1</p><p>  2 詳細(xì)設(shè)計(jì)………………………………………………………2</p><p>  2.

3、1 模塊設(shè)計(jì)……………………………………………………2</p><p>  2.1.1 主函數(shù)模塊………………………………………………2</p><p>  2.1.2 修改R位模塊……………………………………………3</p><p>  2.1.3 讀取文件模塊……………………………………………3</p><p>  2.1.4 判定缺頁中

4、斷模塊………………………………………4</p><p>  2.1.5 讀取R位模塊……………………………………………6</p><p>  2.2 流程圖………………………………………………………7</p><p>  3 調(diào)試與測(cè)試……………………………………………………8</p><p>  3.1調(diào)試過程中的問題……………………………

5、…………………8</p><p>  3.2測(cè)試結(jié)果………………………………………………………9</p><p>  參考文獻(xiàn) ………………………………………………………10</p><p>  心得體會(huì) ………………………………………………………11</p><p>  教師評(píng)語 ………………………………………………………12</p&

6、gt;<p>  附 錄……………………………………………………………13</p><p><b>  1 總體設(shè)計(jì)</b></p><p><b>  1.1概要設(shè)計(jì)</b></p><p>  1.編寫一個(gè)程序,它使用老化算法模擬一個(gè)分頁系統(tǒng)。頁幀的數(shù)量是參數(shù)。頁面的訪問序列從文件中讀取。對(duì)于一個(gè)給定的

7、輸入文件。列出每1000個(gè)內(nèi)存訪問中發(fā)生缺頁中斷的數(shù)目,它是可用頁幀數(shù)的函數(shù)。(教材P141,41題);</p><p>  2.一個(gè)簡(jiǎn)單的典型測(cè)試數(shù)據(jù):</p><p><b>  分配的內(nèi)存幀數(shù):3</b></p><p>  進(jìn)程頁訪問序列:0、1、2、3、4、1、2、0、1、2、3、4、0、1、2、3;</p><p

8、>  3.程序中相對(duì)地址空間為10個(gè)頁。程序設(shè)計(jì)作為參數(shù)輸入,假設(shè)頁幀為3塊,初始均為空;程序設(shè)計(jì)時(shí)作為參數(shù)輸入,時(shí)鐘周期為10個(gè)數(shù);</p><p>  4.按要求設(shè)計(jì)測(cè)試比較更大數(shù)據(jù)量的頁面訪問。</p><p><b>  2 詳細(xì)設(shè)計(jì)</b></p><p><b>  2.1模塊設(shè)計(jì)</b></p&

9、gt;<p>  整個(gè)程序運(yùn)用老化算法并使用Visual Studio2008開發(fā)平臺(tái)。整個(gè)程序中分為讀取文件,修改R位,讀取R位,判斷缺頁中斷和主函數(shù)。</p><p>  2.1.1主函數(shù)模塊</p><p>  main()程序流程控制和控制時(shí)鐘周期以及最終的結(jié)果打印。</p><p>  void main(){</p><

10、p>  char ch[Size];</p><p><b>  read(ch);</b></p><p><b>  int i=0;</b></p><p>  while('0'<=ch[i] && ch[i]<='9'){</p>&

11、lt;p>  printf("%c",ch[i]);</p><p>  //寫入幀并判斷缺頁中斷</p><p>  dauflt(ch[i]);</p><p><b>  //修改R位</b></p><p>  change(ch[i]);</p><p><

12、;b>  i++;</b></p><p>  //時(shí)鐘周期為10個(gè)數(shù)</p><p>  if(i%10 == 0){</p><p>  printf("灬灬灬灬灬灬灬灬灬灬灬灬灬灬\n");</p><p>  printf("\n");</p><p>

13、<b>  //寫入計(jì)數(shù)器</b></p><p><b>  readch();</b></p><p><b>  //清空R位</b></p><p>  for(int i=0;i<10;i++)</p><p><b>  R[i] = 0;</

14、b></p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("\n計(jì)數(shù)器最終情況:\n");</p><p>  for(int j=0;j<row;j++)</p><p><

15、b>  {</b></p><p>  printf("\t\t");</p><p>  for(int k=0;k<5;k++)</p><p>  printf("%d",count[k][j]);</p><p>  printf("\n");<

16、/p><p><b>  }</b></p><p>  printf("缺頁中斷數(shù):\t%d\n",fault_num);</p><p><b>  }</b></p><p>  2.1.2修改R位模塊</p><p>  change(char c)將

17、讀入的字符逐一進(jìn)行判斷并修改其對(duì)應(yīng)的R位上的值,當(dāng)R位上為0則改為1,1則無需做任何修改。</p><p><b>  //讀取R位</b></p><p>  void readch(){</p><p><b>  char ch;</b></p><p>  for(int i=0;i<

18、;5;i++){</p><p>  ch = frame[i];</p><p>  //獲取幀對(duì)應(yīng)的R位,并寫入計(jì)數(shù)器</p><p>  count[i][row] = R[ch-48];</p><p><b>  }</b></p><p><b>  row++;</b

19、></p><p><b>  }</b></p><p>  2.1.3讀取文件模塊</p><p>  read(char ch[])判斷文件是否存在,并將data.txt的內(nèi)容讀取到字符數(shù)組ch[]中。</p><p><b>  //讀取文件內(nèi)容</b></p><

20、p>  void read(char ch[])</p><p><b>  {</b></p><p><b>  int i=0;</b></p><p>  file=fopen("date.txt","rb");</p><p>  if(fi

21、le==NULL)</p><p>  printf("can not open the date.txt file");</p><p>  while(!(feof(file)))</p><p>  {ch[i]=getc(file);</p><p><b>  i++; </b></

22、p><p><b>  }</b></p><p>  fclose(file);</p><p><b>  }</b></p><p>  2.1.4判定缺頁中斷模塊</p><p>  dauflt(char c)每當(dāng)讀入一個(gè)文件首先在frame[4]判斷是否有空位,有則直

23、接補(bǔ)到空位處并引發(fā)缺頁中斷;無則查看計(jì)數(shù)器,選擇最小計(jì)數(shù)器對(duì)應(yīng)的幀來存放,并同樣引發(fā)缺頁中斷;另外,當(dāng)此數(shù)在幀內(nèi)存在時(shí),無需做任何操作。</p><p><b>  //判斷缺頁中斷</b></p><p>  void dauflt(char c){</p><p>  int h = 0;</p><p>  int

24、 min = 0;</p><p>  int counts[3] = {0};</p><p><b>  //判斷是否有空位</b></p><p>  for(h=0;h<3;h++){</p><p>  if(frame[h] == c)</p><p><b>  br

25、eak;</b></p><p>  if(0>frame[h] || frame[h]<9){</p><p>  frame[h] = c;</p><p>  fault_num ++;</p><p>  printf("丨");</p><p><b> 

26、 break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //無空位的情況</b></p><p>  if(h == 3){</p><p>  //判斷幀內(nèi)是否有

27、這個(gè)數(shù)</p><p>  for(int p=0;p<3;p++){</p><p>  if(frame[p] == c)</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  //幀內(nèi)無這個(gè)

28、數(shù)</b></p><p>  if(p == 3){</p><p><b>  //發(fā)生缺頁中斷</b></p><p>  fault_num ++;</p><p>  printf("丨");</p><p><b>  //統(tǒng)計(jì)計(jì)數(shù)器</

29、b></p><p>  for(int k=0;k<3;k++){</p><p>  for(int j=0;j<row;j++){</p><p>  counts[k] += count[k][j];</p><p><b>  }</b></p><p><b&g

30、t;  }</b></p><p>  //比較計(jì)數(shù)器,選擇最小器</p><p>  int minlin = counts[0];</p><p>  for(int j=1;j<3;j++){</p><p>  if(minlin > counts[j]){</p><p><b

31、>  min = j;</b></p><p>  minlin = counts[j];</p><p><b>  }</b></p><p><b>  }</b></p><p>  frame[min] = c;</p><p><b>

32、;  }</b></p><p><b>  }</b></p><p>  //輸出當(dāng)前幀內(nèi)情況</p><p>  printf("\t幀內(nèi)情況:");</p><p>  for(int z=0;z<3;z++){</p><p>  printf(&q

33、uot;%c\t",frame[z]);</p><p><b>  }</b></p><p>  printf("\n");</p><p><b>  }</b></p><p>  2.1.5讀取R位模塊</p><p>  readch

34、()每當(dāng)時(shí)鐘周期到時(shí),調(diào)用此函數(shù)將幀frame[4]內(nèi)的值寫入計(jì)數(shù)器count[4][row]中,row表示當(dāng)前處于第幾個(gè)時(shí)鐘周期。</p><p><b>  //讀取R位</b></p><p>  void readch(){</p><p><b>  char ch;</b></p><p&

35、gt;  for(int i=0;i<3;i++){</p><p>  ch = frame[i];</p><p>  //獲取幀對(duì)應(yīng)的R位,并寫入計(jì)數(shù)器</p><p>  count[i][row] = R[ch-48];</p><p><b>  }</b></p><p>&l

36、t;b>  row++;</b></p><p><b>  }2.2流程圖</b></p><p><b>  不成功</b></p><p><b>  成</b></p><p><b>  功</b></p><

37、;p><b>  3 調(diào)試與測(cè)試</b></p><p>  3.1調(diào)試過程中的問題</p><p>  讀取文件時(shí)候訪問不了數(shù)據(jù),頁面訪問序列存放到文件data.txt中,該文件放入工程目錄下,然后將文件中的序列讀入一個(gè)數(shù)組中。</p><p>  修改R位,每個(gè)頁設(shè)置一個(gè)R位(訪問位),取值為0(表示未訪問),取值為1,當(dāng)在一個(gè)時(shí)鐘

38、滴答內(nèi)訪問該頁時(shí),置為1。每個(gè)時(shí)鐘滴答開始時(shí)置所有頁的R位為0。</p><p><b>  3.2測(cè)試結(jié)果</b></p><p>  data.txt中的數(shù)據(jù):</p><p><b>  結(jié)果:</b></p><p><b>  參考文獻(xiàn)</b></p>

39、<p>  [1]塔嫰鮑姆:《現(xiàn)代操作系統(tǒng)》[M],機(jī)械工業(yè)出版社2009.7,第99頁。</p><p>  心 得 體 會(huì)</p><p>  每一次課程設(shè)計(jì)度讓我學(xué)到了在平時(shí)課堂不可能學(xué)到的東西。所以我對(duì)每一次課程設(shè)計(jì)的機(jī)會(huì)都非常珍惜。不一定我的課程設(shè)計(jì)能夠完成得有多么完美,但是我總是很投入的去研究去學(xué)習(xí)。一個(gè)多月的實(shí)驗(yàn)就這樣到了尾聲,我想我還學(xué)到了一些東西。學(xué)習(xí)這門

40、課之前不知道上這門課的真正用途在哪里,現(xiàn)在才知道操作系統(tǒng)是那么有用,電腦中一重之重的基礎(chǔ)軟件,當(dāng)然非常復(fù)雜,這次的實(shí)驗(yàn)我是做第三個(gè)題目,而這個(gè)程序題目要求也并非真正的分頁系統(tǒng),而是模擬老化算法的分頁系統(tǒng),所以做起來難度并非很高。</p><p>  教 師 評(píng) 語</p><p>  #include <stdio.h></p><p>  #in

41、clude <stdlib.h></p><p>  #include <string.h></p><p>  FILE *file;</p><p>  #define Size 1000</p><p>  #define Num 10//缺頁中斷數(shù)</p><p>  static i

42、nt fault_num = 0;//幀</p><p>  staticchar frame[3];//訪問位</p><p>  staticint R[10]={0};//計(jì)數(shù)器</p><p>  staticint count[3][1000]={0};//計(jì)數(shù)器的列數(shù)</p><p>  staticint row

43、=0;</p><p><b>  //讀取文件內(nèi)容</b></p><p>  void read(char ch[])</p><p><b>  {</b></p><p><b>  int i=0;</b></p><p>  file=fo

44、pen("date.txt","rb");</p><p>  if(file==NULL)</p><p>  printf("can not open the date.txt file");</p><p>  while(!(feof(file)))</p><p>  {

45、ch[i]=getc(file);</p><p><b>  i++; </b></p><p><b>  }</b></p><p>  fclose(file);</p><p><b>  }</b></p><p><b>  //

46、修改R位</b></p><p>  void change(char c){</p><p>  for(int i=0;i<10;i++){</p><p><b>  i+= 48;</b></p><p>  if(c == i)</p><p>  R[i-48] =

47、1;</p><p><b>  i-=48;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //讀取R位</b></p><p>  void readch()

48、{</p><p><b>  char ch;</b></p><p>  for(int i=0;i<3;i++){</p><p>  ch = frame[i];</p><p>  //獲取幀對(duì)應(yīng)的R位,并寫入計(jì)數(shù)器</p><p>  count[i][row] = R[ch-

49、48];</p><p><b>  }</b></p><p><b>  row++;</b></p><p><b>  }</b></p><p><b>  //判斷缺頁中斷</b></p><p>  void dauf

50、lt(char c){</p><p>  int h = 0;</p><p>  int min = 0;</p><p>  int counts[3] = {0};</p><p><b>  //判斷是否有空位</b></p><p>  for(h=0;h<3;h++){<

51、/p><p>  if(frame[h] == c)</p><p><b>  break;</b></p><p>  if(0>frame[h] || frame[h]<9){</p><p>  frame[h] = c;</p><p>  fault_num ++;</p

52、><p>  printf("丨");</p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  //無空位的情況</b

53、></p><p>  if(h == 3){</p><p>  //判斷幀內(nèi)是否有這個(gè)數(shù)</p><p>  for(int p=0;p<3;p++){</p><p>  if(frame[p] == c)</p><p><b>  break;</b></p>

54、<p><b>  }</b></p><p><b>  //幀內(nèi)無這個(gè)數(shù)</b></p><p>  if(p == 3){</p><p><b>  //發(fā)生缺頁中斷</b></p><p>  fault_num ++;</p><p&g

55、t;  printf("丨");</p><p><b>  //統(tǒng)計(jì)計(jì)數(shù)器</b></p><p>  for(int k=0;k<3;k++){</p><p>  for(int j=0;j<row;j++){</p><p>  counts[k] += count[k][j];&

56、lt;/p><p><b>  }</b></p><p><b>  }</b></p><p>  //比較計(jì)數(shù)器,選擇最小器</p><p>  int minlin = counts[0];</p><p>  for(int j=1;j<3;j++){</

57、p><p>  if(minlin > counts[j]){</p><p><b>  min = j;</b></p><p>  minlin = counts[j];</p><p><b>  }</b></p><p><b>  }</b&

58、gt;</p><p>  frame[min] = c;</p><p><b>  }</b></p><p><b>  }</b></p><p>  //輸出當(dāng)前幀內(nèi)情況</p><p>  printf("\t幀內(nèi)情況:");</p>

59、;<p>  for(int z=0;z<3;z++){</p><p>  printf("%c\t",frame[z]);</p><p><b>  }</b></p><p>  printf("\n");</p><p><b>  }<

60、;/b></p><p>  void main(){</p><p>  char ch[Size];</p><p><b>  read(ch);</b></p><p><b>  int i=0;</b></p><p>  while('0'

61、<=ch[i] && ch[i]<='9'){</p><p>  printf("%c",ch[i]);</p><p>  //寫入幀并判斷缺頁中斷</p><p>  dauflt(ch[i]);</p><p><b>  //修改R位</b><

62、;/p><p>  change(ch[i]);</p><p><b>  i++;</b></p><p>  //時(shí)鐘周期為10個(gè)數(shù)</p><p>  if(i%10 == 0){</p><p>  printf("灬灬灬灬灬灬灬灬灬灬灬灬灬灬灬灬灬\n");</p

63、><p>  printf("\n");</p><p><b>  //寫入計(jì)數(shù)器</b></p><p><b>  readch();</b></p><p><b>  //清空R位</b></p><p>  for(int i

64、=0;i<10;i++)</p><p><b>  R[i] = 0;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  printf("\n計(jì)數(shù)器最終情況:");</p>&l

65、t;p>  for(int j=0;j<row;j++)</p><p><b>  {</b></p><p>  for(int k=0;k<3;k++)</p><p>  printf("%d",count[k][j]);</p><p>  printf("\n&

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 眾賞文庫僅提供信息存儲(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)論