操作系統(tǒng)課程設(shè)計報告--磁盤調(diào)度算法_第1頁
已閱讀1頁,還剩18頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、<p><b>  課程設(shè)計報告</b></p><p>  題 目 磁盤調(diào)度算法 </p><p>  課 程 名 稱 操作系統(tǒng)課程設(shè)計 </p><p>  院 部 名 稱 信息技術(shù)學(xué)院 </p>

2、;<p>  專 業(yè) 計算機(jī)科學(xué)與技術(shù) </p><p>  班 級 09計算機(jī)科學(xué)與技術(shù)(1) </p><p>  學(xué) 生 姓 名 </p><p>  學(xué) 號 </

3、p><p>  課程設(shè)計地點(diǎn) </p><p>  課程設(shè)計學(xué)時 </p><p>  指 導(dǎo) 教 師 </p><p>  【注:根據(jù)課程設(shè)計大綱第四項具體要求撰寫課程設(shè)計報告】</p

4、><p>  程序設(shè)計的目的和要求</p><p>  磁盤是經(jīng)常使用的一個外設(shè),對磁盤數(shù)據(jù)的尋道時間的長短直接影響機(jī)器的整體運(yùn)行速度,本設(shè)計要求用C語言(或高級語言)編寫程序模擬實(shí)現(xiàn)磁盤調(diào)度的常用算法。以加深對磁盤調(diào)度常用算法的理解和實(shí)現(xiàn)技巧。</p><p><b>  課程設(shè)計環(huán)境要求</b></p><p><

5、b>  1、硬件環(huán)境</b></p><p>  Intel Croe 2 Duo CPU</p><p><b>  2、軟件環(huán)境</b></p><p>  Windows7 Turbo C 2.0</p><p>  設(shè)計任務(wù)介紹及系統(tǒng)需求分析</p><p><

6、b>  1、系統(tǒng)分析</b></p><p>  設(shè)備的動態(tài)分配算法與進(jìn)程調(diào)度相似,也是基于一定的分配策略的。常用的分配策略有先請求先分配、優(yōu)先級高者先分配等策略。在多道程序系統(tǒng)中,低效率通常是由于磁盤類旋轉(zhuǎn)設(shè)備使用不當(dāng)造成的。操作系統(tǒng)中,對磁盤的訪問要求來自多方面,常常需要排隊。這時,對眾多的訪問要求按一定的次序響應(yīng),會直接影響磁盤的工作效率,進(jìn)而影響系統(tǒng)的性能。訪問磁盤的時間因子由3部分構(gòu)成

7、,它們是查找(查找磁道)時間、等待(旋轉(zhuǎn)等待扇區(qū))時間和數(shù)據(jù)傳輸時間,其中查找時間是決定因素。因此,磁盤調(diào)度算法先考慮優(yōu)化查找策略,需要時再優(yōu)化旋轉(zhuǎn)等待策略。</p><p><b>  2、系統(tǒng)設(shè)計:</b></p><p>  (1) 先來先服務(wù).(First-Come,F(xiàn)irst-Served,F(xiàn)CFS):</p><p>  這是一種簡

8、單的磁盤調(diào)度算法。它根據(jù)進(jìn)程請求訪問磁盤的先后次序進(jìn)行調(diào)度。此算法的優(yōu)點(diǎn)是公平、簡單,且每個進(jìn)程的請求都能依次得到處理,不會出現(xiàn)某一進(jìn)程的請求長期得不到滿足的情況。但此算法由于未對尋道進(jìn)行優(yōu)化,致使平均尋道時間可能較長。</p><p>  (2) 最短尋道時間優(yōu)先(ShortestSeekTimeFirst,SSTF):</p><p>  該算法選擇這樣的進(jìn)程,其要求訪問的磁道與當(dāng)前磁

9、頭所在的磁道距離最近,以使每次的尋道時間最短,但這種調(diào)度算法卻不能保證平均尋道時間最短。</p><p>  (3) 掃描(SCAN)算法:</p><p>  SCAN算法不僅考慮到欲訪問的磁道與當(dāng)前磁道的距離,更優(yōu)先考慮的是磁頭的當(dāng)前移動方向。例如,當(dāng)磁頭正在自里向外移動時,SCAN算法所選擇的下一個訪問對象應(yīng)是其欲訪問的磁道既在當(dāng)前磁道之外,又是距離最近的。這樣自里向外地訪問,直到再

10、無更外的磁道需要訪問才將磁臂換向,自外向里移動。這時,同樣也是每次選擇這樣的進(jìn)程來調(diào)度,即其要訪問的磁道,在當(dāng)前磁道之內(nèi),從而避免了饑餓現(xiàn)象的出現(xiàn)。由于這種算法中磁頭移動的規(guī)律頗似電梯的運(yùn)行,故又稱為電梯調(diào)度算法。</p><p><b>  四、概要設(shè)計</b></p><p>  本系統(tǒng)劃分為三個模塊:先來先服務(wù)算法模塊void FCFS(int array[],

11、int m)、最短尋道時間優(yōu)先算法模塊void SSTF(int array[],int m)、掃描算法模塊void SCAN(int array[],int m)。</p><p><b>  系統(tǒng)模塊圖</b></p><p><b>  五、詳細(xì)設(shè)計</b></p><p>  1、先來先服務(wù)(FCFS)</p

12、><p>  這是一種簡單的磁盤調(diào)度算法。它根據(jù)進(jìn)程請求訪問磁盤的先后次序進(jìn)行調(diào)度。此算法的優(yōu)點(diǎn)是公平、簡單,且每個進(jìn)程的請求都能依次得到處理,不會出現(xiàn)某一進(jìn)程的請求長期得不到滿足的情況。但此算法由于未對尋道進(jìn)行優(yōu)化,致使平均尋道時間可能較長。</p><p>  先來先服務(wù)算法(FCFS)流程圖:</p><p>  2、最短尋道時間優(yōu)先(SSTF)</p>

13、;<p>  該算法選擇這樣的進(jìn)程,其要求訪問的磁道與當(dāng)前磁頭所在的磁道距離最近,以使每次的尋道時間最短,但這種調(diào)度算法卻不能保證平均尋道時間最短。</p><p>  最短尋道時間優(yōu)先流程圖:</p><p>  3、掃描算法(SCAN)</p><p>  SCAN算法不僅考慮到欲訪問的磁道與當(dāng)前磁道的距離,更優(yōu)先考慮的是磁頭的當(dāng)前移動方向。例如,

14、當(dāng)磁頭正在自里向外移動時,SCAN算法所選擇的下一個訪問對象應(yīng)是其欲訪問的磁道既在當(dāng)前磁道之外,又是距離最近的。這樣自里向外地訪問,直到再無更外的磁道需要訪問才將磁臂換向,自外向里移動。這時,同樣也是每次選擇這樣的進(jìn)程來調(diào)度,即其要訪問的磁道,在當(dāng)前磁道之內(nèi),從而避免了饑餓現(xiàn)象的出現(xiàn)。由于這種算法中磁頭移動的規(guī)律頗似電梯的運(yùn)行,故又稱為電梯調(diào)度算法。</p><p><b>  六、測試數(shù)據(jù)和結(jié)果<

15、;/b></p><p>  1、先來先服務(wù)調(diào)度(FCFS)輸入起始磁道(你可以輸入50),點(diǎn)確定,進(jìn)入第二個界面,再輸入你要輸入的最大磁道(你可以輸入100),然后點(diǎn)確定。選擇磁盤調(diào)度算法1 2 3 中的任意一個,若選擇1后確認(rèn),則隨機(jī)輸出10個小于100的磁道數(shù)(41 67 34 0 69 24 78 58 62 64),則先來先服務(wù)調(diào)度(FCFS)輸出:(41 67 34 0 69 24 78 58

16、 62 64),在選擇1或者0,選著1則繼續(xù)其它算法的磁盤調(diào)度,選著0則結(jié)束磁盤調(diào)度</p><p><b>  運(yùn)行結(jié)果圖:</b></p><p>  2、最短尋道時間優(yōu)先調(diào)度(SSTF) 輸入起始磁道(你可以輸入50),點(diǎn)確定,進(jìn)入第二個界面,再輸入你要輸入的最大磁道(你可以輸入100),然后點(diǎn)確定。選擇磁盤調(diào)度算法1 2 3 中的任意一個,若選擇2后確認(rèn)

17、,則隨機(jī)輸出10個小于100的磁道數(shù) (41 67 34 0 69 24 78 58 62 64) ,則最短尋道時間優(yōu)先調(diào)度(SSTF):(58 62 64 67 69 78 41 34 24 0) 。在選擇1或者0,選著1則繼續(xù)其它算法的磁盤調(diào)度,選著0則結(jié)束磁盤調(diào)度</p><p><b>  運(yùn)行結(jié)果圖:</b></p><p>  3、掃描調(diào)度算法(

18、SCAN) 輸入起始磁道(你可以輸入50),點(diǎn)確定,進(jìn)入第二個界面,再輸入你要輸入的最大磁道(你可以輸入100),然后點(diǎn)確定。選擇磁盤調(diào)度算法1 2 3 中的任意一個,若選擇3后確認(rèn),則隨機(jī)輸出10個小于100的磁道數(shù) :(41 67 34 0 69 24 78 58 62 64),則掃描調(diào)度算法(SCAN):(58 62 64 67 69 78 41 34 24 0) 。</p><p><

19、;b>  七、結(jié)論與體會</b></p><p>  至此,計算機(jī)操作系統(tǒng)課程設(shè)計算法已經(jīng)完成。此次設(shè)計基本完成了所規(guī)定的功能,但由于這次設(shè)計的時間比較倉促,其中不免會有些紕漏,比如在程序的實(shí)現(xiàn)上還不夠嚴(yán)謹(jǐn),出錯處理不夠完善等多方面問題,這些都有進(jìn)一步改善。由于平時上課不是很認(rèn)真許多概念沒有理解清楚,導(dǎo)致在做設(shè)計時有點(diǎn)無從下手的感覺,只好邊實(shí)驗(yàn)邊看書直到弄懂概念后才開始做,最終在同學(xué)和老師的指導(dǎo)

20、下我完成了設(shè)計。</p><p>  此設(shè)計基本能夠?qū)崿F(xiàn)規(guī)定的要求但是還是不夠完善,很多東西做的不夠好,程序不夠完善和嚴(yán)謹(jǐn)。此次課程設(shè)計中我學(xué)到了很多東西,無論在理論上還是實(shí)踐中,都得到不少的提高,這對于我以后的工作和學(xué)習(xí)都有一種巨大的幫助。</p><p><b>  八、參考文獻(xiàn)</b></p><p>  胡志剛,譚長庚等. 《計算機(jī)操作

21、系統(tǒng)》.中南大學(xué)出版社. 2005</p><p>  湯子瀛、哲鳳屏、湯小丹. 《計算機(jī)操作系統(tǒng)》.西安電子科技大學(xué)出版社, 2001,8.</p><p>  陳向群 楊芙清.《操作系統(tǒng)教程》. 北京大學(xué)出版社,2004,7.</p><p>  張堯?qū)W 史美林.《計算機(jī)操作系統(tǒng)教程》. 清華大學(xué)出版社, 2000.</p><p>  

22、龐麗萍.《操作系統(tǒng)原理》(第三版). 華中理工大學(xué)出版社,2000.</p><p>  羅宇,鄒鵬等.《操作系統(tǒng)》(第2版). 電子工業(yè)出版社. 2007.4</p><p><b>  附件:源程序清單</b></p><p>  #include "stdio.h"</p><p>  #inc

23、lude "stdlib.h"</p><p>  void CopyL(int Sour[],int Dist[] ,int x); //數(shù)組Sour復(fù)制到數(shù)組Dist,復(fù)制到x個數(shù)</p><p>  void SetDI(int DiscL[]); //隨機(jī)生成磁道數(shù) </p><p>  void Print(int Pri[],in

24、t x); //打印輸出數(shù)組Pri</p><p>  void DelInq(int Sour[],int x,int y); //數(shù)組Sour把x位置的數(shù)刪除,并把y前面的數(shù)向前移動,y后的數(shù)保持不變(即會出現(xiàn)2個y) </p><p>  void FCFS(int Han,int DiscL[]); //先來先服務(wù)算法(FCFS)</p><p>  

25、void SSTF(int Han,int DiscL[]); //最短尋道時間優(yōu)先算法(SSTF)</p><p>  int SCAN(int Han,int DiscL[],int x,int y); //掃描算法(SCAN)</p><p>  void CSCAN(int Han,int DiscL[]); //循環(huán)掃描算法(CSCAN)</p><p&

26、gt;  void PaiXu(); //尋道長度由低到高排序</p><p>  void Pri();</p><p>  int NAll=0;</p><p>  int Best[5][2]; //用作尋道長度由低到高排序時存放的數(shù)組 </p><p>  int Limit=0; //輸入尋找的范圍磁道數(shù)i</p>

27、<p><b>  int Jage;</b></p><p>  float Aver=0;</p><p>  int main()</p><p><b>  {</b></p><p><b>  int i;</b></p><p>

28、;  int DiscLine[10]; //聲明準(zhǔn)備要生成的隨機(jī)磁道號的數(shù)組</p><p>  int Hand; //磁道數(shù)</p><p>  int Con=1;</p><p><b>  int n;</b></p><p>  while(Con==1)</p><p><

29、;b>  {</b></p><p><b>  Jage=0;</b></p><p>  printf("\n 請輸入初始的磁道數(shù):");</p><p>  scanf("%d",&Hand);</p><p>  printf("\n+

30、輸入尋找的范圍:");</p><p>  scanf("%d",&Limit);</p><p>  if(Limit>65536){</p><p>  printf("超出磁道范圍!");</p><p><b>  } </b></p>

31、<p><b>  else{</b></p><p>  printf("1.先來先服務(wù)算法(FCFS )\n");</p><p>  printf("2.最短尋道時間優(yōu)先算法(SSTF)\n");</p><p>  printf("3.掃描算法(SCAN) \n&qu

32、ot;);</p><p>  scanf("%d",&n);</p><p>  if(n==0) exit(0);</p><p>  printf("\n");</p><p><b>  switch(n)</b></p><p><b

33、>  {</b></p><p><b>  case 1:</b></p><p>  SetDI(DiscLine); //隨機(jī)生成磁道數(shù)</p><p>  FCFS(Hand,DiscLine); //先來先服務(wù)算法(FCFS)</p><p><b>  break;</b&

34、gt;</p><p><b>  case 2:</b></p><p>  SetDI(DiscLine); //隨機(jī)生成磁道數(shù)</p><p>  SSTF(Hand,DiscLine); //最短尋道時間優(yōu)先算法(SSTF)</p><p><b>  break;</b></p&g

35、t;<p><b>  case 3:</b></p><p>  SetDI(DiscLine); //隨機(jī)生成磁道數(shù)</p><p>  SCAN(Hand,DiscLine,0,9); //掃描算法(SCAN)</p><p><b>  break;</b></p><p>

36、;  SetDI(DiscLine); //隨機(jī)生成磁道數(shù)</p><p>  FCFS(Hand,DiscLine); //先來先服務(wù)算法(FCFS)</p><p>  SSTF(Hand,DiscLine); //最短尋道時間優(yōu)先算法(SSTF)</p><p>  SCAN(Hand,DiscLine,0,9); //掃描算法(SCAN)</p>

37、;<p><b>  }</b></p><p>  printf("\n\n+ 是否繼續(xù)(按0結(jié)束,按1繼續(xù))?");</p><p>  scanf("%5d",&Con);</p><p><b>  }</b></p><p>&

38、lt;b>  }</b></p><p><b>  }</b></p><p>  //數(shù)組Sour復(fù)制到數(shù)組Dist,復(fù)制到x個數(shù)</p><p>  void CopyL(int Sour[],int Dist[] ,int x)</p><p><b>  {</b><

39、;/p><p><b>  int i;</b></p><p>  for(i=0;i<=x;i++)</p><p><b>  {</b></p><p>  Dist[i]=Sour[i];</p><p><b>  }</b></p&

40、gt;<p><b>  }</b></p><p>  //打印輸出數(shù)組Pri</p><p>  void Print(int Pri[],int x)</p><p><b>  {</b></p><p><b>  int i;</b></p>

41、;<p>  for(i=0;i<=x;i++)</p><p><b>  {</b></p><p>  printf("%5d",Pri[i]);</p><p><b>  }</b></p><p><b>  }</b><

42、;/p><p><b>  //隨機(jī)生成磁道數(shù)</b></p><p>  void SetDI(int DiscL[])</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  for(i=0;i<

43、;=9;i++)</p><p><b>  {</b></p><p>  DiscL[i]=rand()%Limit;//隨機(jī)生成10個磁道號</p><p><b>  }</b></p><p>  printf("+ 需要尋找的磁道號:");</p>&l

44、t;p>  Print(DiscL,9); //輸出隨機(jī)生成的磁道號</p><p>  printf("\n");</p><p><b>  }</b></p><p>  //數(shù)組Sour把x位置的數(shù)刪除,并把y前面的數(shù)向前移動,y后的數(shù)保持不變(即會出現(xiàn)2個y) </p><p>  

45、void DelInq(int Sour[],int x,int y)</p><p><b>  {</b></p><p><b>  int i;</b></p><p>  for(i=x;i<y;i++)</p><p><b>  { </b></p&g

46、t;<p>  Sour[i]=Sour[i+1];</p><p><b>  x++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  //先來先服務(wù)算法(FCFS)</p><p

47、>  void FCFS(int Han,int DiscL[])</p><p><b>  {</b></p><p>  int RLine[10]; //將隨機(jī)生成的磁道數(shù)數(shù)組Discl[]復(fù)制給數(shù)組RLine[]</p><p>  int i,k,All,Temp; //Temp是計算移動的磁道距離的臨時變量</p&

48、gt;<p>  All=0; //統(tǒng)計全部的磁道數(shù)變量</p><p>  k=9; //限定10個的磁道數(shù)</p><p>  CopyL(DiscL,RLine,9); //復(fù)制磁道號到臨時數(shù)組RLine</p><p>  printf("\n+ FCFS訪問順序?yàn)?");</p><p>  

49、All=Han-RLine[0];</p><p>  for(i=0;i<=9;i++)</p><p><b>  {</b></p><p>  Temp=RLine[0]-RLine[1];//求出移動磁道數(shù),前一個磁道數(shù)減去后一個磁道數(shù)得出臨時的移動距離</p><p>  if(Temp<0) &

50、lt;/p><p>  Temp=(-Temp);//移動磁道數(shù)為負(fù)數(shù)時,算出相反數(shù)作為移動磁道數(shù)</p><p>  printf("%5d",RLine[0]);</p><p>  All=Temp+All;//求全部磁道數(shù)的總和 </p><p>  DelInq(RLine,0,k);//每個磁道數(shù)向前移動一位<

51、;/p><p><b>  k--;</b></p><p><b>  }</b></p><p>  Best[Jage][1]=All;//Best[][1]存放移動磁道數(shù) </p><p>  Best[Jage][0]=1; //Best[][0]存放算法的序號為:1 </p>

52、<p>  Jage++;//排序的序號加1</p><p>  Aver=((float) All)/10;//求平均尋道次數(shù) </p><p>  printf("\n+ 移動磁道數(shù):<%5d> ",All);</p><p>  printf("\n+ 平均尋道長度:*%0.2f* ",Aver);

53、</p><p><b>  }</b></p><p>  //最短尋道時間優(yōu)先算法(SSTF)</p><p>  void SSTF(int Han,int DiscL[])</p><p><b>  {</b></p><p>  int i,j,k,h,All;&

54、lt;/p><p>  int Temp; //Temp是計算移動的磁道距離的臨時變量</p><p>  int RLine[10]; //將隨機(jī)生成的磁道數(shù)數(shù)組Discl[]復(fù)制給數(shù)組RLine[]</p><p><b>  int Min;</b></p><p>  All=0; //統(tǒng)計全部的磁道數(shù)變量&

55、lt;/p><p>  k=9; //限定10個的磁道數(shù)</p><p>  CopyL(DiscL,RLine,9); //復(fù)制磁道號到臨時數(shù)組RLine</p><p>  printf("\n+ SSTF訪問順序?yàn)?");</p><p>  for(i=0;i<=9;i++)</p><p

56、><b>  {</b></p><p>  Min=64000;</p><p>  for(j=0;j<=k;j++) //內(nèi)循環(huán)尋找與當(dāng)前磁道號最短尋道的時間的磁道號 </p><p><b>  {</b></p><p>  if(RLine[j]>Han) //如果第

57、一個隨機(jī)生成的磁道號大于當(dāng)前的磁道號,執(zhí)行下一句</p><p>  Temp=RLine[j]-Han; //求出臨時的移動距離</p><p><b>  else</b></p><p>  Temp=Han-RLine[j]; //求出臨時的移動距離</p><p>  if(Temp<Min) //

58、如果每求出一次的移動距離小于Min,執(zhí)行下一句</p><p><b>  {</b></p><p>  Min=Temp; //Temp臨時值賦予Min</p><p>  h=j; //把最近當(dāng)前磁道號的數(shù)組下標(biāo)賦予h</p><p><b>  }</b></p><

59、p><b>  }</b></p><p>  All=All+Min; //統(tǒng)計一共移動的距離</p><p>  printf("%5d",RLine[h]);</p><p>  Han=RLine[h]; </p><p>  DelInq(RLine,h,k); //每個磁道數(shù)向

60、前移動一位</p><p><b>  k--;</b></p><p><b>  }</b></p><p>  Best[Jage][1]=All;//Best[][1]存放移動磁道數(shù) </p><p>  Best[Jage][0]=2;//Best[][0]存放算法的序號為:2</p

61、><p>  Jage++;//排序序號加1</p><p>  Aver=((float)All)/10;//求平均尋道次數(shù) </p><p>  printf("\n+ 移動磁道數(shù):<%5d> ",All);</p><p>  printf("\n+ 平均尋道長度:*%0.2f* ",Av

62、er);</p><p><b>  }</b></p><p>  //掃描算法(SCAN)</p><p>  int SCAN(int Han,int DiscL[],int x,int y)</p><p><b>  {</b></p><p>  int j,n,

63、k,h,m,All;</p><p><b>  int t=0;</b></p><p><b>  int Temp;</b></p><p><b>  int Min;</b></p><p>  int RLine[10]; //將隨機(jī)生成的磁道數(shù)數(shù)組Discl[]復(fù)

64、制給數(shù)組RLine[] </p><p>  int Order;</p><p><b>  Order=1;</b></p><p><b>  k=y;</b></p><p>  m=2; //控制while語句的執(zhí)行,即是一定要使當(dāng)前磁道向內(nèi)向外都要掃描到</p><

65、p>  All=0; //統(tǒng)計全部的磁道數(shù)變量</p><p>  CopyL(DiscL,RLine,9); //復(fù)制磁道號到臨時數(shù)組RLine</p><p>  printf("\n+ SCAN訪問順序?yàn)?");</p><p>  Min=64000;</p><p>  for(j=x;j<=y;

66、j++) //尋找與當(dāng)前磁道號最短尋道的時間的磁道號</p><p><b>  {</b></p><p>  if(RLine[j]>Han) //如果第一個隨機(jī)生成的磁道號大于當(dāng)前的磁道號,執(zhí)行下一句</p><p>  Temp=RLine[j]-Han; //求出臨時的移動距離</p><p>&l

67、t;b>  else</b></p><p>  Temp=Han-RLine[j]; //求出臨時的移動距離</p><p>  if(Temp<Min)</p><p><b>  {</b></p><p>  Min=Temp; //Temp臨時值賦予Min</p>&l

68、t;p>  h=j; //把最近當(dāng)前磁道號的數(shù)組下標(biāo)賦予h</p><p><b>  }</b></p><p><b>  }</b></p><p>  All=All+Min; </p><p>  printf("%5d",RLine[h]);</p&

69、gt;<p>  if(RLine[h]>=Han){ //判動方向,即是由里向外還是由外向里斷磁道的移</p><p><b>  Order=0;</b></p><p><b>  t=1;</b></p><p><b>  }</b></p><p&

70、gt;  Han=RLine[h];</p><p>  DelInq(RLine,h,k); //每個磁道數(shù)向前移動一位</p><p><b>  k--;</b></p><p>  while(m>0) </p><p><b>  {</b></p><p&g

71、t;  if(Order==1) //order是判斷磁盤掃描的方向標(biāo)簽,order是1的話,磁道向內(nèi)移動</p><p><b>  {</b></p><p>  for(j=x;j<=y;j++) </p><p><b>  {</b></p><p><b>  h=-

72、1;</b></p><p>  Min=64000;</p><p>  for(n=x;n<=k;n++) //判斷離當(dāng)前磁道最近的磁道號</p><p><b>  {</b></p><p>  if(RLine[n]<=Han)</p><p><b>

73、;  {</b></p><p>  Temp=Han-RLine[n];</p><p>  if(Temp<Min)</p><p><b>  {</b></p><p>  Min=Temp; //Temp臨時值賦予Min</p><p>  h=n; //把最近當(dāng)前

74、磁道號的數(shù)組下標(biāo)賦予h</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  if(h!=-1)</b></p><p><b>

75、;  {</b></p><p>  All=All+Min; //疊加移動距離</p><p>  printf("%5d",RLine[h]);</p><p>  Han=RLine[h]; //最近的磁道號作為當(dāng)前磁道</p><p>  DelInq(RLine,h,k);</p>&

76、lt;p><b>  k--;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  Order=0; //當(dāng)完成向內(nèi)的移動,order賦予0,執(zhí)行else語句,使磁道向外移動</p><p>  m--; //向

77、內(nèi)完成一次,m減一次,保證while循環(huán)執(zhí)行兩次</p><p><b>  }</b></p><p>  else //order是0的話,磁道向外移動</p><p><b>  {</b></p><p>  for(j=x;j<=y;j++)</p><p>

78、;<b>  {</b></p><p><b>  h=-1;</b></p><p>  Min=64000;</p><p>  for(n=x;n<=k;n++) //判斷離當(dāng)前磁道最近的磁道號</p><p><b>  {</b></p>&l

79、t;p>  if(RLine[n]>=Han)</p><p><b>  {</b></p><p>  Temp=RLine[n]-Han;</p><p>  if(Temp<Min)</p><p><b>  {</b></p><p>  Min

80、=Temp; //Temp臨時值賦予Min</p><p>  h=n; //把最近當(dāng)前磁道號的數(shù)組下標(biāo)賦予h</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>

81、<b>  if(h!=-1)</b></p><p><b>  {</b></p><p>  All=All+Min; //疊加移動距離</p><p>  printf("%5d",RLine[h]);</p><p>  Han=RLine[h]; //最近的磁道號

82、作為當(dāng)前磁道</p><p>  DelInq(RLine,h,k);</p><p><b>  k--;</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  Order=1; //當(dāng)完成向內(nèi)的

83、移動,order賦予0,執(zhí)行else語句,使磁道向外移動</p><p>  m--; //向內(nèi)完成一次,m減一次,保證while循環(huán)執(zhí)行兩次</p><p><b>  }</b></p><p><b>  }</b></p><p>  NAll=NAll+All;</p>

84、<p>  if((y-x)>5)</p><p><b>  {</b></p><p>  Best[Jage][1]=All;//Best[][1]存放移動磁道數(shù) </p><p>  Best[Jage][0]=3;//Best[][0]存放算法的序號為:3</p><p>  Jage++;//

85、排序序號加1</p><p>  Aver=((float)All)/10;//求平均尋道次數(shù) </p><p>  printf("\n+ 移動磁道數(shù):<%5d> ",All);</p><p>  printf("\n+ 平均尋道長度:*%0.2f* ",Aver);</p><p>&

86、lt;b>  }</b></p><p>  if(t==1) printf("\n+ 磁道由內(nèi)向外移動");</p><p>  else printf("\n+ 磁道由外向內(nèi)移動");</p><p>  return(Han);</p><p><b>  }</

溫馨提示

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

評論

0/150

提交評論