2023年全國(guó)碩士研究生考試考研英語(yǔ)一試題真題(含答案詳解+作文范文)_第1頁(yè)
已閱讀1頁(yè),還剩25頁(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>  學(xué) 院: 信息科學(xué)與工程學(xué)院</p><p>  專 業(yè): 計(jì)算機(jī)科學(xué)與技術(shù)</p><p>  班 級(jí): </p><p><b>  學(xué) 號(hào): </b></p><p

2、><b>  學(xué)生姓名: </b></p><p><b>  指導(dǎo)教師: </b></p><p>  2014 年 3 月 10 日</p><p><b>  一、實(shí)驗(yàn)內(nèi)容</b></p><p>  磁盤調(diào)度算法(1人)</p><p>

3、;<b>  [問(wèn)題描述] </b></p><p>  了解磁盤管理的原理,掌握磁盤調(diào)度種算法。</p><p><b>  [基本要求]</b></p><p>  編程序?qū)崿F(xiàn)下述磁盤調(diào)度算法,并求出每種算法的平均尋道長(zhǎng)度:要求設(shè)計(jì)主界面可以靈活選擇算法,且以下算法為基本要求。</p><p>

4、;  先來(lái)先服務(wù)算法(FCFS)</p><p>  最短尋道時(shí)間優(yōu)先算法(SSTF)</p><p>  掃描算法(SCAN)</p><p>  循環(huán)掃描算法(CSCAN)</p><p><b>  二、數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)</b></p><p>  struct node</p>

5、<p><b>  {</b></p><p><b>  int data;</b></p><p>  struct node *next;</p><p><b>  };</b></p><p>  struct node1</p><p&

6、gt;<b>  {</b></p><p><b>  int data;</b></p><p>  struct node1 *next;</p><p>  struct node1 *pre;</p><p><b>  };</b></p><p

7、>  三、算法設(shè)計(jì)(總體設(shè)計(jì)及模塊設(shè)計(jì))</p><p><b>  1.總體設(shè)計(jì)</b></p><p><b>  2.模塊設(shè)計(jì)</b></p><p> ?。?).先來(lái)先服務(wù)算法(FCFS)</p><p><b>  ……</b></p><p

8、>  建立鏈表后順序訪問(wèn)并計(jì)算即可</p><p>  (2)..最短尋道時(shí)間優(yōu)先算法(SSTF)</p><p><b>  ……</b></p><p><b>  a. 首先建立鏈表</b></p><p><b>  ……</b></p><p

9、>  b.遍歷鏈表并找到距離當(dāng)前磁道最近的磁道 </p><p><b>  ……</b></p><p>  C.訪問(wèn)該磁道,計(jì)算并刪除</p><p> ?。?). 掃描算法(SCAN)</p><p><b>  ……</b></p><p><b>

10、  a. 首先建立鏈表</b></p><p><b>  ……</b></p><p>  b.遍歷鏈表并找到距離當(dāng)前磁道最近的磁道 </p><p><b>  ……</b></p><p><b>  ……</b></p><p> 

11、 C.將原鏈表分成兩個(gè)短鏈表</p><p><b>  ……</b></p><p><b>  ……</b></p><p>  d.使用雙向鏈表將前一鏈表逆序</p><p><b>  ……</b></p><p><b>  ……&l

12、t;/b></p><p>  e.分別順序訪問(wèn)兩個(gè)鏈表并計(jì)算即可</p><p> ?。?)循環(huán)掃描算法(CSCAN)</p><p><b>  ……</b></p><p><b>  a. 首先建立鏈表</b></p><p><b>  ……<

13、/b></p><p>  b.遍歷鏈表并找到距離當(dāng)前磁道最近的磁道 </p><p><b>  ……</b></p><p><b>  ……</b></p><p>  C.將原鏈表分成兩個(gè)短鏈表</p><p><b>  ……</b>&

14、lt;/p><p><b>  ……</b></p><p>  d. 分別順序訪問(wèn)兩個(gè)鏈表并計(jì)算即可</p><p><b>  2.具體函數(shù)設(shè)計(jì)</b></p><p> ?。?).先來(lái)先服務(wù)算法</p><p>  順序訪問(wèn)磁道,記錄訪問(wèn)時(shí)間,最終算出平均訪問(wèn)時(shí)間</

15、p><p>  void FCFS()//先來(lái)先服務(wù)</p><p><b>  {</b></p><p>  int m=100,n,i=0,s=0;//m:當(dāng)前道號(hào) n:間距 i:計(jì)數(shù) s:尋道時(shí)間和</p><p>  struct node *p;</p><p>&l

16、t;b>  float x;</b></p><p>  p=creat();</p><p>  printf("被訪問(wèn)的下一個(gè)磁道\t移動(dòng)距離\n"); </p><p>  if (p==NULL)</p><p>  printf("空鏈表!");</p><

17、;p><b>  else</b></p><p>  while(p!=NULL&&p->data!=0)</p><p>  { n=abs(m-p->data);</p><p>  printf ("\t%d\t%d\n",p->data,n);</p>&l

18、t;p><b>  i++;</b></p><p><b>  s=s+n;</b></p><p>  m=p->data;</p><p>  p=p->next;</p><p><b>  }</b></p><p>  x=

19、(float)(s*1.0)/i;</p><p>  printf("平均尋道時(shí)間:%.2f\n",x);</p><p><b>  }</b></p><p> ?。?)最短尋道時(shí)間優(yōu)先算法(SSTF)</p><p>  依次訪問(wèn)距離當(dāng)前磁道最近的磁道,記錄訪問(wèn)時(shí)間,最終算出平均訪問(wèn)時(shí)間<

20、;/p><p>  void SSTF()//最短尋道時(shí)間</p><p><b>  {</b></p><p>  struct node *p,*q,*x;</p><p>  int m=100,m1=100,n,s=0,i=0,j=0,min=1000;//m:當(dāng)前道號(hào) n:間距 i,j:計(jì)數(shù)

21、 s:尋道時(shí)間和</p><p><b>  float r;</b></p><p>  x=p=q=creat();</p><p>  printf("被訪問(wèn)的下一個(gè)磁道\t移動(dòng)距離\n"); </p><p>  while(q!=NULL&&q->data!=0)//計(jì)

22、算一共多少磁道</p><p><b>  {j++;</b></p><p>  q=q->next;}</p><p><b>  q=p;</b></p><p>  //while(x!=NULL&&x->data!=0)///////j次循環(huán)</p>

23、<p>  for (int y=1;y<=j;y++)</p><p>  { if (p==NULL)</p><p>  printf("空鏈表!");</p><p><b>  else</b></p><p><b>  {</b></p

24、><p>  while(p!=NULL&&p->data!=0)//找到尋道時(shí)間最短的磁道</p><p><b>  {</b></p><p>  n=abs(m1-(p->data));</p><p><b>  if(min>n)</b></p>

25、<p><b>  {</b></p><p><b>  min=n;</b></p><p>  m=p->data;</p><p><b>  }</b></p><p>  p=p->next;</p><p><

26、;b>  }</b></p><p>  printf ("\t\t%d\t%d\n",m,min);</p><p><b>  s=s+min;</b></p><p><b>  min=1000;</b></p><p><b>  m1=m;

27、 </b></p><p><b>  p=x;</b></p><p><b>  //刪除節(jié)點(diǎn)</b></p><p>  if (m==q->data)//刪除第一個(gè)節(jié)點(diǎn)</p><p><b>  {</b></p><p&g

28、t;  q=p->next;</p><p><b>  free(p);</b></p><p><b>  p=q;x=p;</b></p><p><b>  }</b></p><p>  else//刪除其他節(jié)點(diǎn)</p><p><

29、b>  {</b></p><p><b>  q=p=x;</b></p><p>  while((q->data!=m)&&(q->data!=0))</p><p><b>  {</b></p><p><b>  p=q;</

30、b></p><p>  q=q->next;</p><p><b>  }</b></p><p>  if(q->data==m)</p><p><b>  {</b></p><p>  p->next=q->next;</p&g

31、t;<p><b>  free(q);}</b></p><p><b>  p=q=x;</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b>

32、</p><p>  r=(float)(s*1.0)/j;</p><p>  printf("平均尋道時(shí)間:%.2f\n",r);</p><p><b>  }</b></p><p>  (3). 掃描算法(SCAN)</p><p>  void SCAN()//掃描

33、算法</p><p><b>  {</b></p><p>  struct node *p,*q,*head;</p><p>  struct node *m,*n,*first;</p><p>  struct node1 *d,*e,*de;</p><p>  d=e=de=NULL

34、;</p><p>  int min=1000,a=100,b=0,j=0,s=0;//j,x,y:計(jì)數(shù) a:當(dāng)前磁道號(hào) s:時(shí)間求和 b:?jiǎn)蝹€(gè)計(jì)差 x:平均尋道時(shí)間</p><p><b>  float x;</b></p><p>  p=q=head=creat();</p><p>

35、  m=n=first=NULL;</p><p>  while(q!=NULL&&q->data!=0)//計(jì)算一共多少磁道</p><p><b>  {</b></p><p><b>  j++;</b></p><p>  q=q->next;</p&g

36、t;<p><b>  }</b></p><p>  printf("總共的磁道數(shù):j=%d\n",j);</p><p>  if (p==NULL)</p><p>  printf("空鏈表");</p><p><b>  else</b&g

37、t;</p><p><b>  {</b></p><p>  while(p!=NULL&&p->data!=0)//找最小的磁道號(hào)記為min,并刪除原節(jié)點(diǎn)</p><p><b>  {</b></p><p>  if (min>(p->data))<

38、/p><p><b>  {</b></p><p>  min=p->data;</p><p><b>  }</b></p><p><b>  else</b></p><p>  p=p->next;</p><p&

39、gt;<b>  }</b></p><p>  if (min==q->data)//刪除第一個(gè)節(jié)點(diǎn)</p><p><b>  {</b></p><p>  q=p->next;</p><p><b>  free(p);</b></p>&l

40、t;p>  p=q;head=p;</p><p><b>  }//x=p=q;</b></p><p>  else//刪除其他節(jié)點(diǎn)</p><p><b>  {</b></p><p><b>  q=p=head;</b></p><p>

41、;  while((q->data!=min)&&(q->data!=0))</p><p><b>  {</b></p><p><b>  p=q;</b></p><p>  q=q->next;</p><p><b>  }</b>

42、</p><p>  if(q->data==min)</p><p><b>  {</b></p><p>  p->next=q->next;</p><p><b>  free(q);</b></p><p><b>  }</b&

43、gt;</p><p><b>  p=q=head;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  n=m=first=(struct node *)malloc(sizeof(struct node)); //排

44、序鏈表</p><p>  m->data=min;</p><p>  n=first=m;</p><p><b>  min=1000;</b></p><p>  printf("排序后為:\n");///對(duì)了</p><p>  for (int i=2;i&l

45、t;=j;i++) //排序</p><p><b>  { </b></p><p>  while(p!=NULL&&p->data!=0)//找最小的磁道號(hào)記為min,并刪除原節(jié)點(diǎn)</p><p><b>  {</b></p><p>  if (min>(p

46、->data))</p><p><b>  {</b></p><p>  min=p->data;</p><p><b>  p=head;</b></p><p><b>  }</b></p><p><b>  else

47、</b></p><p>  p=p->next;</p><p><b>  }</b></p><p><b>  p=q=head;</b></p><p>  if (min==q->data)//刪除第一個(gè)節(jié)點(diǎn)</p><p><b&g

48、t;  {</b></p><p>  q=p->next;</p><p><b>  free(p);</b></p><p>  p=q;head=p;</p><p><b>  }</b></p><p>  else//刪除其他節(jié)點(diǎn)</p&

49、gt;<p><b>  {</b></p><p><b>  q=p=head;</b></p><p>  while((q->data!=min)&&(q->data!=0))</p><p><b>  {</b></p><p&

50、gt;<b>  p=q;</b></p><p>  q=q->next;</p><p><b>  }</b></p><p>  if(q->data==min)</p><p><b>  {</b></p><p>  p->

51、;next=q->next;</p><p><b>  free(q);</b></p><p><b>  }</b></p><p><b>  p=q=head;</b></p><p><b>  }</b></p><

52、p>  m=(struct node *)malloc(sizeof(struct node));</p><p>  n->next=m;</p><p>  m->data=min;</p><p><b>  n=m;</b></p><p>  m->next=NULL;</p>

53、;<p><b>  min=1000;</b></p><p><b>  }</b></p><p>  m=n=first;</p><p>  while(m!=NULL&&m->data!=0) </p><p><b>  { </b

54、></p><p>  printf("%d\n",m->data); </p><p>  m=m->next; </p><p>  } //排序(輸出)終于對(duì)了?。。。。?! </p><p>  p=q=head=m=n=first;</p><p>  printf

55、("被訪問(wèn)的下一個(gè)磁道\t移動(dòng)距離\n");</p><p>  while(m!=NULL&&m->data!=0)//找大于100的磁道</p><p><b>  {</b></p><p>  if ((m->data)>=a)// //將原鏈表分為兩個(gè)鏈表(大于100,小于100)

56、</p><p><b>  {</b></p><p><b>  first=m;</b></p><p><b>  p=n;</b></p><p>  p->next=NULL;</p><p><b>  n=first;&l

57、t;/b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  n=m;</b></p><p>  m=n->next;</p><p>  }

58、 ///哈哈哈!分成兩個(gè)鏈表了?。。。?lt;/p><p>  //將小號(hào)磁道鏈表逆序(表頭添加法)</p><p><b>  p=head;</b></p><p>  d=e=de=(struct node1 *)malloc(sizeof(struct node1));</p><p>  d->

59、;data=p->data;</p><p>  de->next=NULL;</p><p>  while(p!=NULL&&p->data!=0)</p><p><b>  {</b></p><p><b>  e=d;</b></p>&l

60、t;p>  d=(struct node1 *)malloc(sizeof(struct node1));</p><p>  d->data=p->data;</p><p><b>  e->pre=d;</b></p><p>  d->next=e;</p><p>  p=p-&g

61、t;next;</p><p><b>  }</b></p><p>  d->pre=NULL;</p><p><b>  de=e=d;</b></p><p>  m=n=first;</p><p>  while(m!=NULL&&m-&g

62、t;data!=0)</p><p><b>  {</b></p><p>  b=abs(a-(m->data));</p><p>  a=m->data;</p><p>  m=m->next;</p><p>  printf("\t\t%d\t%d\n&q

63、uot;,a,b);</p><p><b>  s=s+b;</b></p><p><b>  } </b></p><p><b>  de=e=d;</b></p><p>  while(d!=NULL&&d->data!=0)</p&g

64、t;<p><b>  {</b></p><p>  b=abs(a-(d->data));</p><p>  a=d->data;</p><p>  d=d->next;</p><p>  printf("\t\t%d\t%d\n",a,b);</p&g

65、t;<p><b>  s=s+b;</b></p><p><b>  } </b></p><p>  x=(float)(s*1.0)/j;</p><p>  printf("平均尋道時(shí)間:%.2f\n",x);</p><p><b>  }&

66、lt;/b></p><p>  (4).循環(huán)掃描算法(CSCAN)</p><p>  void CSCAN()//循環(huán)掃描算法</p><p><b>  {</b></p><p>  struct node *p,*q,*head;</p><p>  struct node *m,

67、*n,*first;</p><p>  int min=1000,a=100,b=0,j=0,s=0;//j,x,y:計(jì)數(shù) a:當(dāng)前磁道號(hào) s:時(shí)間求和 b:?jiǎn)蝹€(gè)計(jì)差 x:平均尋道時(shí)間</p><p><b>  float x;</b></p><p>  p=q=head=creat();</p>

68、<p>  m=n=first=NULL;</p><p>  while(q!=NULL&&q->data!=0)//計(jì)算一共多少磁道</p><p><b>  {</b></p><p><b>  j++;</b></p><p>  q=q->next

69、;</p><p><b>  }</b></p><p>  printf("總共的磁道數(shù):j=%d\n",j);</p><p>  if (p==NULL)</p><p>  printf("空鏈表");</p><p><b>  els

70、e</b></p><p><b>  {</b></p><p>  while(p!=NULL&&p->data!=0)//找最小的磁道號(hào)記為min,并刪除原節(jié)點(diǎn)</p><p><b>  {</b></p><p>  if (min>(p->d

71、ata))</p><p><b>  {</b></p><p>  min=p->data;</p><p><b>  }</b></p><p><b>  else</b></p><p>  p=p->next;</p>

72、;<p><b>  }</b></p><p>  if (min==q->data)//刪除第一個(gè)節(jié)點(diǎn)</p><p><b>  {</b></p><p>  q=p->next;</p><p><b>  free(p);</b></

73、p><p>  p=q;head=p;</p><p><b>  }//x=p=q;</b></p><p>  else//刪除其他節(jié)點(diǎn)</p><p><b>  {</b></p><p><b>  q=p=head;</b></p>

74、<p>  while((q->data!=min)&&(q->data!=0))</p><p><b>  {</b></p><p><b>  p=q;</b></p><p>  q=q->next;</p><p><b>  }&

75、lt;/b></p><p>  if(q->data==min)</p><p><b>  {</b></p><p>  p->next=q->next;</p><p><b>  free(q);</b></p><p><b> 

76、 }</b></p><p><b>  p=q=head;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  n=m=first=(struct node *)malloc(sizeof(struct no

77、de)); //排序鏈表</p><p>  m->data=min;</p><p>  n=first=m;</p><p><b>  min=1000;</b></p><p>  printf("排序后為:\n");///對(duì)了</p><p>  for (in

78、t i=2;i<=j;i++) //排序</p><p><b>  { </b></p><p>  while(p!=NULL&&p->data!=0)//找最小的磁道號(hào)記為min,并刪除原節(jié)點(diǎn)</p><p><b>  {</b></p><p>  if (

79、min>(p->data))</p><p><b>  {</b></p><p>  min=p->data;</p><p><b>  p=head;</b></p><p><b>  }</b></p><p><b&

80、gt;  else</b></p><p>  p=p->next;</p><p><b>  }</b></p><p><b>  p=q=head;</b></p><p>  if (min==q->data)//刪除第一個(gè)節(jié)點(diǎn)</p><p&g

81、t;<b>  {</b></p><p>  q=p->next;</p><p><b>  free(p);</b></p><p>  p=q;head=p;</p><p><b>  }//x=p=q;</b></p><p>  el

82、se//刪除其他節(jié)點(diǎn)</p><p><b>  {</b></p><p><b>  q=p=head;</b></p><p>  while((q->data!=min)&&(q->data!=0))</p><p><b>  {</b>&

83、lt;/p><p><b>  p=q;</b></p><p>  q=q->next;</p><p><b>  }</b></p><p>  if(q->data==min)</p><p><b>  {</b></p>

84、<p>  p->next=q->next;</p><p><b>  free(q);</b></p><p><b>  }</b></p><p><b>  p=q=head;</b></p><p><b>  }</b>

85、;</p><p>  m=(struct node *)malloc(sizeof(struct node));</p><p>  n->next=m;</p><p>  m->data=min;</p><p><b>  n=m;</b></p><p>  m->ne

86、xt=NULL;</p><p><b>  min=1000;</b></p><p><b>  }</b></p><p>  m=n=first;</p><p>  while(m!=NULL&&m->data!=0) </p><p><

87、;b>  { </b></p><p>  printf("%d\n",m->data); </p><p>  m=m->next; </p><p>  } //排序(輸出)終于對(duì)了!?。。。。?</p><p>  p=q=head=m=n=first;</p>

88、<p>  printf("被訪問(wèn)的下一個(gè)磁道\t移動(dòng)距離\n");</p><p>  while(m!=NULL&&m->data!=0)//找大于100的磁道</p><p><b>  {</b></p><p>  if ((m->data)>=a)// //將原鏈表分為

89、兩個(gè)鏈表(大于100,小于100)</p><p><b>  {</b></p><p><b>  first=m;</b></p><p><b>  p=n;</b></p><p>  p->next=NULL;</p><p><

90、b>  n=first;</b></p><p><b>  break;</b></p><p><b>  }</b></p><p><b>  n=m;</b></p><p>  m=n->next;</p><p> 

91、 } ///哈哈哈!分成兩個(gè)鏈表了?。。?!</p><p>  m=n=first;</p><p>  while(m!=NULL&&m->data!=0)</p><p><b>  {</b></p><p>  b=abs(a-(m->data));<

92、/p><p>  a=m->data;</p><p>  m=m->next;</p><p>  printf("\t\t%d\t%d\n",a,b);</p><p><b>  s=s+b;</b></p><p><b>  } </b&

93、gt;</p><p>  while(q!=NULL&&p->data!=0)</p><p><b>  {</b></p><p>  b=abs(a-(q->data));</p><p>  a=q->data;</p><p>  q=q->ne

94、xt;</p><p>  printf("\t\t%d\t%d\n",a,b);</p><p><b>  s=s+b;</b></p><p><b>  }</b></p><p>  x=(float)(s*1.0)/j;</p><p>  p

95、rintf("平均尋道時(shí)間:%.2f\n",x);</p><p><b>  }</b></p><p>  四、測(cè)試數(shù)據(jù)及程序運(yùn)行情況</p><p>  1.先來(lái)先服務(wù)(FCFS)</p><p>  2.最短尋道時(shí)間(SSTF)</p><p>  3.掃描算法(SCA

96、N)</p><p>  4.循環(huán)掃描算法(CSCAN)</p><p>  五、實(shí)驗(yàn)過(guò)程中出現(xiàn)的問(wèn)題及解決方法</p><p>  實(shí)驗(yàn)過(guò)程中完全采用鏈表進(jìn)行,因此代碼較多,遇到的問(wèn)題也不少,主要有以下幾點(diǎn):</p><p><b>  六、參考文獻(xiàn)</b></p><p>  《計(jì)算機(jī)操作系統(tǒng)

溫馨提示

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