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

下載本文檔

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

文檔簡介

1、<p><b>  操作系統(tǒng)課程設(shè)計(jì)</b></p><p>  磁盤調(diào)度算法的模擬實(shí)現(xiàn)</p><p>  學(xué) 院 計(jì)算機(jī)科學(xué)與技術(shù) </p><p>  專 業(yè) 計(jì)算機(jī)科學(xué)與技術(shù)(師范)</p><p>  學(xué) 號(hào) ************

2、</p><p>  學(xué) 生 姓 名 *** </p><p>  指導(dǎo)教師姓名 *** </p><p><b>  2015年7月1日</b></p><p><b>  目錄</b></p><p><b

3、>  一、引言2</b></p><p><b>  二、總體設(shè)計(jì)2</b></p><p><b>  1.功能實(shí)現(xiàn)2</b></p><p><b>  2.流程圖3</b></p><p><b>  3.具體內(nèi)容3<

4、/b></p><p><b>  三、實(shí)驗(yàn)驗(yàn)證5</b></p><p><b>  1.結(jié)果截圖7</b></p><p><b>  2.代碼分析6</b></p><p><b>  四、源代碼9</b></p>

5、<p><b>  五、總結(jié)13</b></p><p>  六、參考資料13</p><p><b>  引言</b></p><p>  1、課程設(shè)計(jì)的目的:</p><p>  操作系統(tǒng)課程設(shè)計(jì)是計(jì)算機(jī)專業(yè)重要的教學(xué)環(huán)節(jié),它為學(xué)生提供了一個(gè)既動(dòng)手又動(dòng)腦,將課本上的理論知識(shí)和

6、實(shí)際有機(jī)的結(jié)合起來,獨(dú)立分析和解決實(shí)際問題的機(jī)會(huì)。 </p><p>  進(jìn)一步鞏固和復(fù)習(xí)操作系統(tǒng)的基礎(chǔ)知識(shí)。 </p><p>  培養(yǎng)學(xué)生結(jié)構(gòu)化程序、模塊化程序設(shè)計(jì)的方法和能力。 </p><p>  提高學(xué)生調(diào)試程序的技巧和軟件設(shè)計(jì)的能力。 </p><p>  提高學(xué)生分析問題、解決問題以及綜合利用 C 語言進(jìn)行程序設(shè)計(jì)的能力。 &l

7、t;/p><p>  2、設(shè)計(jì)內(nèi)容:設(shè)計(jì)并實(shí)現(xiàn)一個(gè)本別利用下列磁盤調(diào)度算法進(jìn)行磁盤調(diào)度的模擬程序。</p><p>  1、先來先服務(wù)算法FCFS </p><p>  2、最短尋道時(shí)間優(yōu)先算法SSTF </p><p><b>  3、設(shè)計(jì)要求:</b></p><p>  磁頭初始磁道號(hào)

8、,序列長度,磁道號(hào)序列等數(shù)據(jù)可從鍵盤輸入,也可從文件讀入。 </p><p>  最好能實(shí)現(xiàn)磁道號(hào)序列中磁道號(hào)的動(dòng)態(tài)增加。</p><p>  磁道訪問序列以鏈表的形式存儲(chǔ)</p><p>  4. 給出各磁盤調(diào)度算法的調(diào)度順序和平均尋道長度</p><p><b>  總體設(shè)計(jì)</b></p>&l

9、t;p><b>  1、算法實(shí)現(xiàn)</b></p><p>  1.先來先服務(wù)算法(FCFS)</p><p>  先來先服務(wù)(FCFS)調(diào)度:按先來后到次序服務(wù),未作優(yōu)化。</p><p>  最簡單的移臂調(diào)度算法是“先來先服務(wù)”調(diào)度算法,這個(gè)算法實(shí)際上不考慮訪問者要求訪問的物理位置,而只是考慮訪問者提出訪問請求的先后次序。例如,如果現(xiàn)在

10、讀寫磁頭正在50號(hào)柱面上執(zhí)行輸出操作,而等待訪問者依次要訪問的柱面為130、199、32、159、15、148、61、99,那么,當(dāng)50號(hào)柱面上的操作結(jié)束后,移動(dòng)臂將按請求的先后次序先移到130號(hào)柱面,最后到達(dá)99號(hào)柱面。</p><p>  采用先來先服務(wù)算法決定等待訪問者執(zhí)行輸入輸出操作的次序時(shí),移動(dòng)臂來回地移動(dòng)。先來先服務(wù)算法花費(fèi)的尋找時(shí)間較長,所以執(zhí)行輸入輸出操作的總時(shí)間也很長。</p>&

11、lt;p>  2.短尋道時(shí)間優(yōu)先算法(SSTF)</p><p>  最短尋找時(shí)間優(yōu)先調(diào)度算法總是從等待訪問者中挑選尋找時(shí)間最短的那個(gè)請求先執(zhí)行的,而不管訪問者到來的先后次序?,F(xiàn)在仍利用同一個(gè)例子來討論,現(xiàn)在當(dāng)50號(hào)柱面的操作結(jié)束后,應(yīng)該先處理61號(hào)柱面的請求,然后到達(dá)32號(hào)柱面執(zhí)行操作,隨后處理15號(hào)柱面請求,后繼操作的次序應(yīng)該是99、130、148、159、199。</p><p&g

12、t;  采用最短尋找時(shí)間優(yōu)先算法決定等待訪問者執(zhí)行操作的次序時(shí),讀寫磁頭總共移動(dòng)了200多個(gè)柱面的距離,與先來先服務(wù)、算法比較,大幅度地減少了尋找時(shí)間,因而縮短了為各訪問者請求服務(wù)的平均時(shí)間,也就提高了系統(tǒng)效率。</p><p>  但最短查找時(shí)間優(yōu)先(SSTF)調(diào)度,F(xiàn)CFS會(huì)引起讀寫頭在盤面上的大范圍移動(dòng),SSTF查找距離磁頭最短(也就是查找時(shí)間最短)的請求作為下一次服務(wù)的對象。SSTF查找模式有高度局部化的

13、傾向,會(huì)推遲一些請求的服務(wù),甚至引起無限拖延(又稱饑餓)。</p><p> ?、傧葋硐确?wù)算法(FCFS)流程圖:</p><p> ?、谧疃虒さ罆r(shí)間優(yōu)先算法(SSTF)流程圖:</p><p><b>  三、總體驗(yàn)證</b></p><p>  1、數(shù)據(jù)結(jié)構(gòu)及信號(hào)量定義的說明;</p><p&g

14、t;  本系統(tǒng)劃分為四個(gè)模塊:先來先服務(wù)算法模塊void FCFS(int array[],int m)、最短尋道時(shí)間優(yōu)先算法模塊void SSTF(int array[],int m)、掃描算法模塊void SCAN(int array[],int m) 和循環(huán)掃描算法模塊:void CSCAN(int array[],int m) 。</p><p>  2. 先來先服務(wù)算法模塊:void FCFS(int

15、array[],int m)</p><p>  輸入磁道號(hào),按先來先服務(wù)的策略輸出磁盤請求序列,求平均尋道長度,輸出移動(dòng)平均磁道數(shù)。</p><p>  3、 最短尋道時(shí)間優(yōu)先算法模塊:void SSTF(int array[],int m)</p><p>  將磁道號(hào)用冒泡法從小到大排序,輸出排好序的磁道序列,輸入當(dāng)前磁道號(hào),根據(jù)前磁道在已排的序列中的位置,選

16、擇掃描的順序,求出平均尋道長度,輸出移動(dòng)的平均磁道數(shù)。</p><p><b>  4、代碼分析</b></p><p>  1、先來先服務(wù)算法模塊:void FCFS(int array[],int m)</p><p><b>  主要代碼:</b></p><p>  for(i=0,j=1;

17、j<m;i++,j++) </p><p><b>  {</b></p><p>  sum+=abs(array[j]-array[i]);</p><p>  ave=(float)(sum)/(float)(m);</p><p><b>  }</b></p><

18、;p>  2 最短尋道時(shí)間優(yōu)先算法模塊:void SSTF(int array[],int m)</p><p><b>  主要代碼:</b></p><p>  for(i=0;i<m;i++) /*使用冒泡法按從小到大順序排列*/</p><p>  for(j=i+1;j<m;j++)</p>&l

19、t;p><b>  {</b></p><p>  if(array[i]>array[j])</p><p><b>  {</b></p><p>  temp=array[i];</p><p>  array[i]=array[j];</p><p>  

20、array[j]=temp;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(array[m-1]<=now) /*若當(dāng)前磁道號(hào)大于請求序列中最大者,則直接由外向內(nèi)依次給予各請求服務(wù)*/</p><p><b>  {&

21、lt;/b></p><p>  for(i=m-1;i>=0;i--)</p><p>  cout<<array[i]<<" ";</p><p>  sum=now-array[0];</p><p><b>  }</b></p><p&

22、gt;  else if(array[0]>=now) /*若當(dāng)前磁道號(hào)小于請求序列中最小者,則直接由內(nèi)向外依次給予各請求服務(wù)*/</p><p>  while((l>=0)&&(r<m)) /*當(dāng)前磁道在請求序列范圍內(nèi)*/</p><p><b>  {</b></p><p>  if((now-

23、array[l])<=(array[r]-now)) /*選擇與當(dāng)前磁道最近的請求給予服務(wù)*/</p><p><b>  {</b></p><p>  cout<<array[l]<<" ";</p><p>  sum+=now-array[l];</p><p>

24、  now=array[l];</p><p><b>  l=l-1;</b></p><p><b>  }</b></p><p><b>  3、實(shí)驗(yàn)的步驟;</b></p><p>  1 先來先服務(wù)算法 </p><p>

25、  輸入磁道序列:55 58 39 18 90 160 150 38 184 當(dāng)前磁道號(hào):100 </p><p>  2 最短尋道時(shí)間優(yōu)先算法 </p><p>  當(dāng)前磁道號(hào)大于磁道序列中的最大的磁道號(hào)時(shí)    </p&g

26、t;<p>  輸入磁道序列:55 58 39 18 90 160 150 38 184 </p><p>  當(dāng)前磁道號(hào):100 </p><p><b>  四、源代碼:</b></p><p>  #include<io

27、stream></p><p>  #include<cmath></p><p>  #include<stdio.h></p><p>  using namespace std;</p><p>  typedef struct node</p><p><b>  {&l

28、t;/b></p><p><b>  int data;</b></p><p>  struct node *next;</p><p>  }Node,*Linklist;</p><p>  void main()</p><p><b>  {</b><

29、/p><p>  void Create_Linklist(Node *);</p><p>  void fcfs();//聲明先來先服務(wù)函數(shù)FCFS</p><p>  void sstf();//聲明最短尋道時(shí)間優(yōu)先函數(shù)sstf</p><p>  void print(Node *);</p><p><b&

30、gt;  int s;</b></p><p>  printf("**************磁盤調(diào)度算法***************\n");</p><p>  printf("\t***1,先來先服務(wù)算法FCFS\n");</p><p>  printf("\t***2,最短尋道時(shí)間優(yōu)先算法S

31、STF\n");</p><p>  printf("\t***0,退出\n");</p><p>  printf("\t***請選擇:");</p><p>  scanf("%d",&s);</p><p>  while(s!=0)</p>&

32、lt;p><b>  {</b></p><p><b>  switch(s)</b></p><p><b>  {</b></p><p>  case 1:printf("\t\t********你選擇了:先來先服務(wù)算法FCFS\n");fcfs();break;&l

33、t;/p><p>  case 2:printf("\t\t******你選擇了:最短尋道時(shí)間優(yōu)先算法SSTF\n");sstf();break;</p><p><b>  }</b></p><p>  printf("\t\t*******退出請選0,繼續(xù)請選1,2,\n");scanf("%

34、d",&s);</p><p><b>  }</b></p><p><b>  }</b></p><p>  /******************************************************************/</p><p>  void

35、 fcfs()//先來先服務(wù)算法</p><p><b>  { </b></p><p>  void Create_Linklist(Node *);</p><p>  void print(Node*);</p><p>  int Length_Linklist(Node *);</p><

36、p>  Node *l,*head;//*m,*n;*/</p><p>  float num=0;//num為平均尋道長度 </p><p><b>  int c,f;</b></p><p>  head=(Node *)malloc(sizeof(Node));</p><p>  head->n

37、ext=NULL;</p><p>  printf("**************新建一個(gè)單鏈表,以0作為結(jié)束標(biāo)志:********\n");</p><p>  Create_Linklist(head);</p><p>  c=Length_Linklist(head);</p><p>  printf(&quo

38、t;\t\t******從幾號(hào)磁道開始:********");</p><p>  scanf("%d",&f);//f為磁道號(hào) </p><p>  print(head);</p><p>  printf("\t***鏈表長度為:%d\n",c); </p><p>  l=h

39、ead->next; </p><p>  for(int i=0;i<c;i++) </p><p><b>  {</b></p><p>  num+=abs(l->data-f);f=l->data;l=l->next;</p><p><b>  }</b

40、></p><p>  num=num/c;</p><p>  printf("\t\t*****先來先服務(wù)的尋道順序是:\n");</p><p>  print(head);</p><p>  printf("\t\t******平均尋道長度:%f\n",num);</p>

41、<p><b>  }</b></p><p>  /*****************************************************************/ </p><p>  void sstf()//最短尋道時(shí)間優(yōu)先算法</p><p><b>  {</b></p>

42、;<p>  void Create_Linklist(Node *);</p><p>  void print(Node *);</p><p>  int Length_Linklist(Node *);</p><p>  Node *p,*q,*r,*s,*l,*m,*head;</p><p><b>  

43、int c,f;</b></p><p>  head=(Node *)malloc(sizeof(Node));head->next=NULL;</p><p>  printf("**************新建一個(gè)單鏈表,以0作為結(jié)束標(biāo)志:********\n"); </p><p>  Create_Linklist(

44、head); c=Length_Linklist(head); </p><p>  printf("\t\t******從幾號(hào)磁道開始:********"); </p><p>  scanf("%d",&f); //f為磁

45、道號(hào)</p><p>  print(head); </p><p>  printf("\t***鏈表長度為:%d\n",c); </p><p>  l=(Node *)malloc(sizeof(Node)); </p><p>  l->next=NULL; m=l; </p><

46、p>  q=head; p=head->next; </p><p>  s=head; r=head->next; </p><p>  float num=0; </p><p>  for(int i=0;i<c;i++) </p><p><b>  { </b></p&

47、gt;<p>  int min=abs(f-r->data); </p><p>  for(int j=0;j<c-i-1;j++) </p><p><b>  { </b></p><p>  p=p->next; </p><p>  q=q->next; &

48、lt;/p><p>  if(abs(f-p->data)<min) </p><p><b>  { </b></p><p>  min=abs(f-p->data); </p><p><b>  r=p; </b></p><p>

49、<b>  s=q; </b></p><p><b>  } </b></p><p><b>  } </b></p><p>  num+=abs(f-r->data); </p><p>  f=r->data; </p><

50、p>  s->next=r->next; </p><p>  r->next=NULL; </p><p>  m->next=r; </p><p><b>  m=r; </b></p><p>  q=head; </p><p&g

51、t;  p=head->next; </p><p>  s=head; </p><p>  r=head->next; </p><p><b>  } </b></p><p>  num=num/c; </p><p>  printf("\t\t*****

52、*最短尋道時(shí)間優(yōu)先順序是:\n"); </p><p>  print(l); </p><p>  printf("\t\t*********平均尋道長度:%f\n",num); </p><p><b>  } </b></p><p>  /*********************

53、************************************/ </p><p>  void print(Node *head) //輸出鏈表 </p><p><b>  {</b></p><p><b>  Node *p;</b></p><p>  p=head

54、->next; </p><p>  cout<<"單鏈表顯示:"; </p><p>  if(p==NULL) </p><p><b>  { </b></p><p>  printf("單鏈表為空:\n"); </p><p&

55、gt;<b>  } </b></p><p>  else if(p->next==NULL) </p><p>  { </p><p>  printf("%d\t",p->data); </p><p>  pri

56、ntf("\n"); </p><p><b>  } </b></p><p><b>  else </b></p><p><b>  { </b></p><p>  while(p->next!=NULL) </p>&

57、lt;p><b>  { </b></p><p>  printf("%d\t",p->data); </p><p>  p=p->next; </p><p><b>  } </b></p><p>  printf("%d\t&qu

58、ot;,p->data); </p><p>  printf("\n"); </p><p><b>  } </b></p><p><b>  } </b></p><p>  /*****************************************

59、****************/ void Create_Linklist(Node *head)//創(chuàng)建鏈表</p><p><b>  { </b></p><p>  Node *p,*q; </p><p><b>  int i; </b></p><p>  scanf(&quo

60、t;%d",&i); </p><p><b>  q=head; </b></p><p>  while(i!=0) </p><p><b>  { </b></p><p>  p=(Node *)malloc(sizeof(Node)); </p>

61、;<p>  p->next=NULL; </p><p>  p->data=i; </p><p>  q->next=p; </p><p><b>  q=p; </b></p><p><b>  cin>>i; </b><

62、;/p><p>  } /* c++;*/ </p><p><b>  } </b></p><p>  /**************************************************/ </p><p>  int Length_Linklist(Node *head)//計(jì)算鏈表長</p

63、><p><b>  {</b></p><p><b>  int l;</b></p><p><b>  Node *p; </b></p><p>  p= head->next; </p><p><b>  l=1; </

64、b></p><p>  while(p->next) </p><p><b>  { </b></p><p>  p=p->next; </p><p><b>  l++; </b></p><p><b>  } </b>

65、;</p><p>  return l; </p><p><b>  }</b></p><p><b>  五、總結(jié)</b></p><p>  通過此次課程設(shè)計(jì),我對操作系統(tǒng)的基礎(chǔ)知識(shí)了解得更透徹了,同時(shí)對磁盤調(diào)度的四種算法——先來先服務(wù)算法(FCFS)、最短尋道時(shí)間優(yōu)先算法(SSTF)、有

66、了更深刻的理解和掌握,使我能夠?yàn)榇疟P調(diào)度選擇適當(dāng)?shù)乃惴?,提高CPU工作效率。設(shè)計(jì)過程中遇到的困難在老師和同學(xué)的幫助下順利解決并通過了驗(yàn)收,我深刻認(rèn)識(shí)到算法的邏輯性對程序的重要影響,算法的準(zhǔn)確度對程序運(yùn)行結(jié)果的重要影響,這對我以后在操作系統(tǒng)的學(xué)習(xí)中有極大幫助。</p><p><b>  六、 參考資料</b></p><p>  黃維通等. Visual C++ 面向

67、對象與可視化程序設(shè)計(jì). 北京:清華大學(xué)出版社,2011.</p><p>  鄭宗漢等. 算法設(shè)計(jì)與分析. 北京:清華大學(xué)出版社,2005.</p><p>  趙劍云等譯, [美]George Shepherd等著. 深入解析MFC. 北京:中國電力出版社,2003.</p><p>  Microsoft Platform SDK, August 2001 Ed

溫馨提示

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

評(píng)論

0/150

提交評(píng)論