磁盤調度算法程序課程設計報告_第1頁
已閱讀1頁,還剩20頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、<p><b>  課程設計報告</b></p><p>  題 目 磁盤調度算法程序設計 </p><p>  課 程 名 稱 操作系統(tǒng)課程設計 </p><p>  院 部 名 稱 信息技術學院 </p><p>  專 業(yè) 計算機科

2、學與技術 </p><p>  班 級 M11計算機科學與技術Ⅱ </p><p>  學 生 姓 名 </p><p>  學 號 </p><p><b>  目錄</b></p>

3、<p>  一、課程設計的目的和要求2</p><p><b>  1、目的2</b></p><p><b>  2、要求2</b></p><p>  二、設計任務介紹及系統(tǒng)需求分析</p><p>  2.1 任務介紹2</p><p>  2.

4、2基本需求設計2</p><p><b>  三、概要設計3</b></p><p>  3.1程序主要流程3</p><p>  3.2 程序的函數調用關系5</p><p><b>  四、詳細設計5</b></p><p>  4.1數據結構描述5</

5、p><p>  4.2各功能模塊(或主要過程)分析5</p><p>  4.3各子程序流程分析7</p><p>  4.3.1 FCFS( )7</p><p>  4.3.2 SSTF()8</p><p>  4.3.3 SCAN( )9</p><p>  五、調試與測試10&

6、lt;/p><p>  5.1 程序運行初始界面10</p><p>  5.2 鍵盤輸入磁道10</p><p>  5.3 隨機產生磁道10</p><p>  5.4 先來先服務算法10</p><p>  5.5 最短尋道時間優(yōu)先算法………………………………………………………………10 </

7、p><p>  5.6 掃描算法………………………………………………………………………………12</p><p>  5.6.1先向外掃描11</p><p>  5.6.2先向里掃描11</p><p>  5.7 退出程序11</p><p>  六、結論與體會12</p><p>

8、<b>  參考文獻12</b></p><p>  附件:源程序清單13</p><p>  一、課程設計的目的和要求</p><p><b>  1.1目的</b></p><p>  磁盤是經常使用的一種重要的外設,對磁盤數據的尋道時間的長短直接影響機器的整體運行速度,本設計要求用C語言(

9、或高級語言)編寫程序模擬實現(xiàn)磁盤調度的常用算法。以加深對磁盤調度常用算法的理解和實現(xiàn)技巧。</p><p><b>  1.2 要求</b></p><p>  1)、設計一個函數完成先來先服務的磁盤調度功能。</p><p>  2)、設計一個函數完成最短尋道時間優(yōu)先的磁盤調度功能。</p><p>  3)、設計一個

10、函數完成電梯算法的磁盤調度功能。</p><p><b>  二、系統(tǒng)需求分析</b></p><p><b>  2.1 任務介紹</b></p><p>  1、可利用先來先服務算法(FCFS即first come first served)、最短尋道時間優(yōu)先算法(SSTF即shortest seek time fir

11、st)、掃描算法(SCAN),來實現(xiàn)磁盤的訪問順序。</p><p>  2、根據磁盤調度算法的不同的特性做好軟件實現(xiàn)的需求分析。</p><p>  3、可根據問題的實際需要,可模擬數據在磁道的存放位置。</p><p>  4、當系統(tǒng)運行時,能直觀地、動態(tài)地反映當前磁盤狀態(tài)及不同算法的平均尋道時間。</p><p>  5、要求在系統(tǒng)安全

12、狀態(tài)的前提下,用戶指定需要訪問的磁道,軟件自動模擬在不同算法情況下,磁盤尋道順序和平均尋道時間。</p><p>  2.2基本需求設計 </p><p>  系統(tǒng)主界面可以靈活選擇某種算法,算法包括:先來先服務算法(FCFS)、最短尋道時間優(yōu)先算法(SSTF)、掃描算法(SCAN)。</p><p>  1、先來先服務算法(FCFS)</p><

13、;p>  這是一種比較簡單的磁盤調度算法。它根據進程請求訪問磁盤的先后次序進行調度。此算法的優(yōu)點是公平、簡單,且每個進程的請求都能依次得到處理,不會出現(xiàn)某一進程的請求長期得不到滿足的情況。此算法由于未對尋道進行優(yōu)化,在對磁盤的訪問請求比較多的情況下,此算法將降低設備服務的吞吐量,致使平均尋道時間可能較長,但各進程得到服務的響應時間的變化幅度較小。</p><p>  2、最短尋道時間優(yōu)先算法(SSTF)&l

14、t;/p><p>  該算法選擇這樣的進程,其要求訪問的磁道與當前磁頭所在的磁道距離最近,以使每次的尋道時間最短,該算法可以得到比較好的吞吐量,但卻不能保證平均尋道時間最短。其缺點是對用戶的服務請求的響應機會不是均等的,因而導致響應時間的變化幅度很大。在服務請求很多的情況下,對內外邊緣磁道的請求將會無限期的被延遲,有些請求的響應時間將不可預期。</p><p>  3、掃描算法(SCAN)&

15、lt;/p><p>  掃描算法不僅考慮到欲訪問的磁道與當前磁道的距離,更優(yōu)先考慮的是磁頭的當前移動方向。例如,當磁頭正在自里向外移動時,掃描算法所選擇的下一個訪問對象應是其欲訪問的磁道既在當前磁道之外,又是距離最近的。這樣自里向外地訪問,直到再無更外的磁道需要訪問才將磁臂換向,自外向里移動。這時,同樣也是每次選擇這樣的進程來調度,即其要訪問的磁道,在當前磁道之內,從而避免了饑餓現(xiàn)象的出現(xiàn)。由于這種算法中磁頭移動的規(guī)

16、律頗似電梯的運行,故又稱為電梯調度算法。此算法基本上克服了最短尋道時間優(yōu)先算法的服務集中于中間磁道和響應時間變化比較大的缺點,而具有最短尋道時間優(yōu)先算法的優(yōu)點即吞吐量較大,平均響應時間較小,但由于是擺動式的掃描方法,兩側磁道被訪問的頻率仍低于中間磁道。</p><p><b>  三、概要設計</b></p><p><b>  3.1程序主要流程</

17、b></p><p>  下圖3-1為磁盤調度算法總流程圖,程序運行開始,進入選擇界面,輸入磁道數,然后依次調用decide()函數和trans()函數,再進入主循環(huán)界面,選擇調度算法,直到選擇4,程序執(zhí)行完畢退出。</p><p><b>  圖3-1</b></p><p>  3.2程序函數調用關系</p><p

18、>  下圖為磁盤調度算法的函數之間的調用關系,主函數調用子函數,子函數也可以調用子函數,進行進程的初始化,排序等等。</p><p>  函數調用關系圖,如圖3-2:</p><p><b>  圖3-2</b></p><p><b>  四、詳細設計</b></p><p>  4.1數據

19、結構描述 </p><p>  本系統(tǒng)劃分為三個模塊:先來先服務算法模塊void FCFS(int cidao[],int m)、最短尋道時間優(yōu)先算法模塊void SSTF(int cidao[],int m)、掃描算法模塊void SCAN(int cidao[],int m) 。</p><p>  1. 先來先服務算法模塊:void FCFS(int cidao[],int m)&l

20、t;/p><p>  輸入磁道號,按先來先服務的策略輸出磁盤請求序列,求平均尋道長度,輸出移動平均磁道數。</p><p>  2 .最短尋道時間優(yōu)先算法模塊:void SSTF(int cidao[],int m)</p><p>  將磁道號用冒泡法從小到大排序,輸出排好序的磁道序列,輸入當前磁道號,根據前磁道在已排的序列中的位置,選擇掃描的順序,求出平均尋道長度,

21、輸出移動的平均磁道數。</p><p>  3 .掃描算法模塊:void SCAN(int cidao[],int m)</p><p>  將磁道號用冒泡法從小到大排序,輸出排好序的序列,輸入當前磁道號,選擇移動臂的移動方向,根據當前磁道在已排的序列中的位置,選擇掃描的順序,求出平均尋道長度,輸出移動的平均磁道數。</p><p>  4.2各模塊函數功能分析&l

22、t;/p><p>  由于一開始我們要對鍵盤輸入的磁道數和要使用的算法進行一次有效性的判斷,我使用了int decide(char str[]),如果輸入的信息不是0~9之間的數都將被判定為不合法,合法后才能進行下一步。</p><p>  判斷完合法性后,要將我們輸入的字符轉化為數字,這里我用了int trans(char str[],int a)。當然系統(tǒng)自動生成的就不要使用以上兩個函數了

23、。</p><p>  一切都準備好后,開始選擇要調用哪個算法了,先來先服務調度算法我使用了void FCFS(int cidao[],int m),這個算法主要完成按原來鍵盤輸入的次序或系統(tǒng)自動生成的次序來尋到,然后輸出總的尋道長度和平均尋道長度。</p><p>  以下兩個算法都要用到排序算法,這里我使用了冒泡排序法int *sort(int cidao[],int m),將磁道數按

24、從小到大的序列排好。</p><p>  最短尋道時間優(yōu)先調度算法我使用了void SSTF(int cidao[],int m),在排好序列磁道中選擇離當前磁道最近的磁道開始尋道,然和再和相鄰的兩個磁道進行比較,看離哪個更近;如果當前磁道是最大值或是最小值,直接按倒敘或是正序尋道,最后輸出總的尋道長度和平均尋道長度。</p><p>  掃描調度算法我使用了void SCAN(int c

25、idao[],int m),在排好序的磁道序列中根據當前磁道數,選擇是向外尋道還是向內尋道,如果當前磁道數是最大值或是最小值,直接向內或向外尋道,最后也要輸出總的尋道長度和平均尋道長度。</p><p>  4.3各子函數流程分析</p><p>  4.3.1 FCFS()</p><p>  下圖4-1為FCFS函數的流程圖:</p><p&

26、gt;<b>  圖4-1</b></p><p>  4.3.2 SSTF()</p><p>  下圖4-1為FCFS函數的流程圖:</p><p><b>  圖4-2</b></p><p>  4.3.3 SCAN()</p><p>  下圖4-1為FCFS函數的

27、流程圖:</p><p><b>  圖4-3 </b></p><p><b>  五、調試過程</b></p><p>  5.1 運行程序初始界面</p><p>  運行程序,顯示初始界面如圖5-1所示,選擇產生磁道的方式。</p><p><b>  圖

28、5-1</b></p><p>  5.2 鍵盤輸入磁道</p><p>  輸入2進行鍵盤輸入,并附帶錯誤提醒功能,如圖5-2所示。</p><p><b>  圖5-2</b></p><p><b>  5.3隨機產生磁道</b></p><p>  輸入

29、1可隨機產生磁道數,如圖5-3所示。</p><p><b>  圖5-3</b></p><p>  5.4先來先服務算法</p><p>  輸入1,選擇先來先服務算法,如圖5-4所示。</p><p><b>  圖5-4</b></p><p>  5.5最短尋道時間

30、優(yōu)先算法</p><p>  輸入2,選擇最短尋道時間優(yōu)先算法,如圖5-5所示。</p><p><b>  圖5-5</b></p><p><b>  5.6掃描算法</b></p><p>  5.6.1先向外掃描:</p><p>  輸入3后,選擇掃描算法,再輸入1

31、選擇先向外掃描,如圖5-6所示。</p><p><b>  圖5-6</b></p><p>  5.6.2先向里掃描:</p><p>  輸入3后,選擇掃描算法,再輸入0選擇先向里掃描,如圖5-7所示。</p><p><b>  圖5-7</b></p><p>&l

32、t;b>  5.7退出程序</b></p><p>  輸入4退出,如圖5-8所示。</p><p><b>  圖5-8</b></p><p><b>  六、結論與體會</b></p><p>  通過本次課設,我對磁盤的調度算法有了更深的了解,但在本次課設過程也遇到了一些問

33、題,一開時的時候我雖然把整個每個算法都搞清楚了,并且能夠進行編譯,可是不管調用哪一個算法都無法顯示數據,最后通過各種嘗試,才發(fā)現(xiàn)需將字符轉化成數字,這算是一個不小的收獲吧。本來想在排序算法上提高點效率的,但又覺得這個不是重點就使用了冒泡排序法,雖然效率不是很高。</p><p>  在功能實現(xiàn)方面,我也進行了多次的改進和優(yōu)化。當每次輸入完磁道數時,還要再臨時輸入當前磁道數,所以就顯得比較麻煩,然后我就做了改進,把

34、當前磁道數給定了下來,由于每個算法里面都要用到當前的磁道數,所以考慮代碼的重復,我想把now設置為全局變量,但是沒改成功。</p><p>  還有就是在老師的提醒下,我又增加了系統(tǒng)自動產生磁道數,可是在學C++的時候,我沒有學過這一塊,我通過上網學習找到了有關這一塊的知識,由于我想每次隨機產生的數據都不一樣,所以我就使用srand(time(0))來使用當前時間使隨機數發(fā)生器隨機化,這樣就可以保證每兩次運行時可

35、以得到不同的隨機數序列(只要兩次運行的間隔超過1秒),當然不能加上頭文件time.h。</p><p>  總體而言,本次課設讓我學會了很多,也讓我對以前學過的知識回顧了很多,本次課設涉及的算法并不難,都是些基本的算法,所以告訴我們要打好基礎,學好數據結果也是很重要的。還有就是讓我對操作系統(tǒng)的基礎知識了解得更透徹了,同時對磁盤調度的四種算法——先來先服務算法(FCFS)、最短尋道時間優(yōu)先算法(SSTF)、掃描算法

36、(SCAN)有了更深刻的理解和掌握,使我能夠為磁盤調度選擇適當的算法,提高CPU工作效率。我深刻認識到算法的邏輯性對程序的重要影響,算法的準確度對程序運行結果的重要影響,這對我以后在操作系統(tǒng)的學習中有極大幫助。</p><p><b>  七、參考文獻</b></p><p>  [1]湯小丹、湯子贏等.計算機操作系統(tǒng).西安:西安電子科技大學出版社,2007.<

37、/p><p>  [2]張麗芬. 操作系統(tǒng)實驗教程[M].北京:清華大學出版社,2006.附件:源程序清單</p><p>  磁盤調度算法源程序清單</p><p>  #include<stdio.h></p><p>  #include<stdlib.h></p><p>  #includ

38、e<iostream.h></p><p>  #include<math.h></p><p>  #include <ctime></p><p>  #define maxsize 100</p><p>  /*********************判斷輸入數據是否有效**************

39、************/</p><p>  int decide(char str[]) //判斷輸入數據是否有效</p><p><b>  {</b></p><p><b>  int i=0;</b></p><p>  while(str[i]!='\0')</p

40、><p><b>  {</b></p><p>  if(str[i]<'0'||str[i]>'9')</p><p><b>  {</b></p><p><b>  return 0;</b></p><p&

41、gt;<b>  break;</b></p><p><b>  }</b></p><p><b>  i++;</b></p><p><b>  }</b></p><p><b>  return i;</b></p&

42、gt;<p><b>  }</b></p><p>  /******************將字符串轉換成數字***********************/</p><p>  int trans(char str[],int a) //將字符串轉換成數字</p><p><b>  {</b><

43、/p><p><b>  int i;</b></p><p>  int sum=0;</p><p>  for(i=0;i<a;i++)</p><p><b>  {</b></p><p>  sum=sum+(int)((str[i]-'0')*

44、pow(10,a-i-1));</p><p><b>  }</b></p><p>  return sum;</p><p><b>  }</b></p><p>  /*********************冒泡排序算法**************************/</p&

45、gt;<p>  int *sort(int cidao[],int m)</p><p><b>  { </b></p><p><b>  int i,j;</b></p><p><b>  int temp;</b></p><p>  for(i=0;

46、i<m;i++) //使用冒泡法按從小到大順序排列</p><p>  for(j=i+1;j<m;j++)</p><p><b>  {</b></p><p>  if(cidao[i]>cidao[j])</p><p><b>  { </b></p>&l

47、t;p>  temp=cidao[i];</p><p>  cidao[i]=cidao[j];</p><p>  cidao[j]=temp;</p><p><b>  }</b></p><p><b>  }</b></p><p>  return cid

48、ao;</p><p><b>  } </b></p><p>  /*********************先來先服務調度算法**************************/</p><p>  void FCFS(int cidao[],int m) //磁道號數組,個數為m</p><p><b&g

49、t;  {</b></p><p>  int now=20;//當前磁道號</p><p>  int sum=0; //總尋道長度</p><p><b>  int j,i;</b></p><p>  float ave; //平均尋道長度</p><p>  cout<

50、<"磁盤請求序列為:";</p><p>  for( i=0;i<m;i++) //按先來先服務的策略輸出磁盤請求序列</p><p><b>  {</b></p><p>  cout<<cidao[i]<<" ";</p><p><

51、;b>  }</b></p><p>  cout<<endl;</p><p>  sum+=abs(cidao[0]-now);</p><p>  cout<<"磁盤掃描序列為:";</p><p>  for( i=0;i<m;i++) //輸出磁盤掃描序列</

52、p><p><b>  {</b></p><p>  cout<<cidao[i]<<" ";</p><p><b>  }</b></p><p>  for(i=0,j=1;j<m;i++,j++) //求平均尋道長度</p>&l

53、t;p><b>  {</b></p><p>  sum+=abs(cidao[j]-cidao[i]);</p><p>  ave=(float)(sum)/(float)(m);</p><p><b>  }</b></p><p>  cout<<endl;</p

54、><p>  cout<<"總的尋道長度:"<<sum<<endl;</p><p>  cout<<"平均尋道長度:"<<ave<<endl;</p><p><b>  }</b></p><p>  /***

55、*******************最短尋道時間優(yōu)先調度算法********************/</p><p>  void SSTF(int cidao[],int m)</p><p><b>  {</b></p><p><b>  int k=1;</b></p><p>  i

56、nt now=20;</p><p><b>  int l,r;</b></p><p>  int i,j,sum=0;</p><p>  float ave;</p><p>  cidao=sort(cidao,m); //調用冒泡排序算法排序</p><p>  if(cidao[m-

57、1]<=now) //若當前磁道號大于請求序列中最大者,則直接由外向內依次給予各請求服務</p><p><b>  {</b></p><p>  cout<<"磁盤掃描序列為:";</p><p>  for(i=m-1;i>=0;i--)</p><p>  cout&l

58、t;<cidao[i]<<" ";</p><p>  sum=now-cidao[0];</p><p><b>  }</b></p><p>  if(cidao[0]>=now) //若當前磁道號小于請求序列中最小者,則直接由內向外依次給予各請求服務</p><p>&

59、lt;b>  {</b></p><p>  cout<<"磁盤掃描序列為:";</p><p>  for(i=0;i<m;i++)</p><p>  cout<<cidao[i]<<" ";</p><p>  sum=cidao[m-1

60、]-now;</p><p><b>  }</b></p><p>  if(now>cidao[0]&&now<cidao[m-1]) //若當前磁道號大于請求序列中最小者且小于最大者</p><p><b>  {</b></p><p>  cout<<

61、;"磁盤掃描序列為:";</p><p>  while(cidao[k]<now) //確定當前磁道在已排的序列中的位置,后面的算法都用到了,可以直接復制后少量修改,節(jié)省時間。</p><p><b>  {</b></p><p><b>  k++;</b></p><p

62、><b>  }</b></p><p><b>  l=k-1;</b></p><p><b>  r=k;</b></p><p>  while((l>=0)&&(r<m)) //當前磁道在請求序列范圍內</p><p><b&g

63、t;  {</b></p><p>  if((now-cidao[l])<=(cidao[r]-now)) //選擇與當前磁道最近的請求給予服務</p><p><b>  {</b></p><p>  cout<<cidao[l]<<" ";</p><p&

64、gt;  sum+=now-cidao[l];</p><p>  now=cidao[l];</p><p><b>  l=l-1;</b></p><p><b>  }</b></p><p><b>  else</b></p><p><

65、;b>  {</b></p><p>  cout<<cidao[r]<<" ";</p><p>  sum+=cidao[r]-now;</p><p>  now=cidao[r];</p><p><b>  r=r+1;</b></p>

66、<p><b>  }</b></p><p><b>  }</b></p><p>  if(l==-1) //磁頭移動到序列的最小號,返回外側掃描仍未掃描的磁道</p><p><b>  {</b></p><p>  for(j=r;j<m;j++)

67、</p><p><b>  {</b></p><p>  cout<<cidao[j]<<" ";</p><p><b>  }</b></p><p>  sum+=cidao[m-1]-cidao[0];</p><p>

68、<b>  }</b></p><p>  else //磁頭移動到序列的最大號,返回內側掃描仍未掃描的磁道</p><p><b>  {</b></p><p>  for(j=l;j>=0;j--)</p><p><b>  {</b></p>&l

69、t;p>  cout<<cidao[j]<<" ";</p><p><b>  }</b></p><p>  sum+=cidao[m-1]-cidao[0];</p><p><b>  }</b></p><p><b>  }&l

70、t;/b></p><p>  ave=(float)(sum)/(float)(m);</p><p>  cout<<endl;</p><p>  cout<<"總的尋道長度: "<<sum<<endl;</p><p>  cout<<"平

71、均尋道長度: "<<ave<<endl;</p><p><b>  }</b></p><p>  /*****************************掃描調度算法*******************************/</p><p>  void SCAN(int cidao[],int

72、m) //先要給出當前磁道號和移動臂的移動方向</p><p><b>  {</b></p><p><b>  int k=1;</b></p><p>  int now=20;</p><p>  int l,r,d;</p><p>  int i,j,sum=0;

73、</p><p>  float ave;</p><p>  cidao=sort(cidao,m); //調用冒泡排序算法排序</p><p>  if(cidao[m-1]<=now) //若當前磁道號大于請求序列中最大者,則直接由外向內依次給予各請求服務,此情況同最短尋道優(yōu)先</p><p><b>  { </

74、b></p><p>  cout<<"磁盤掃描序列為:";</p><p>  for(i=m-1;i>=0;i--)</p><p>  cout<<cidao[i]<<" ";</p><p>  sum=now-cidao[0];</p>

75、;<p><b>  }</b></p><p>  if(cidao[0]>=now) //若當前磁道號小于請求序列中最小者,則直接由內向外依次給予各請求服務,此情況同最短尋道優(yōu)先</p><p><b>  { </b></p><p>  cout<<"磁盤掃描序列為:&qu

76、ot;; </p><p>  for(i=0;i<m;i++)</p><p>  cout<<cidao[i]<<" ";</p><p>  sum=cidao[m-1]-now;</p><p><b>  }</b></p><p>  

77、if(now>cidao[0]&&now<cidao[m-1]) //若當前磁道號大于請求序列中最小者且小于最大者</p><p><b>  {</b></p><p>  while(cidao[k]<now)</p><p><b>  {</b></p><p&

78、gt;<b>  k++;</b></p><p><b>  }</b></p><p><b>  l=k-1;</b></p><p><b>  r=k;</b></p><p>  cout<<"請輸入當前移動臂的移動的方向

79、 (1 表示向外 ,0表示向內) : ";</p><p><b>  cin>>d;</b></p><p>  if(d==0) //選擇移動臂方向向內,則先向內掃描</p><p><b>  {</b></p><p>  cout<<"磁盤掃描序

80、列為:";</p><p>  for(j=l;j>=0;j--)</p><p><b>  {</b></p><p>  cout<<cidao[j]<<" "; //輸出向內掃描的序列</p><p><b>  }</b><

81、/p><p>  for(j=r;j<m;j++) //磁頭移動到最小號,則改變方向向外掃描未掃描的磁道</p><p><b>  {</b></p><p>  cout<<cidao[j]<<" "; //輸出向外掃描的序列</p><p><b>  }&l

82、t;/b></p><p>  sum=now-2*cidao[0]+cidao[m-1];</p><p><b>  }</b></p><p>  else //選擇移動臂方向向外,則先向外掃描</p><p><b>  {</b></p><p>  cout

83、<<"磁盤掃描序列為:";</p><p>  for(j=r;j<m;j++)</p><p><b>  {</b></p><p>  cout<<cidao[j]<<" "; //輸出向外掃描的序列</p><p><b>

84、;  }</b></p><p>  for(j=l;j>=0;j--) //磁頭移動到最大號,則改變方向向內掃描未掃描的磁道</p><p><b>  {</b></p><p>  cout<<cidao[j]<<" ";</p><p><b&g

85、t;  }</b></p><p>  sum=-now-cidao[0]+2*cidao[m-1];</p><p><b>  }</b></p><p><b>  }</b></p><p>  ave=(float)(sum)/(float)(m);</p>&

86、lt;p>  cout<<endl;</p><p>  cout<<"總的尋道長度: "<<sum<<endl;</p><p>  cout<<"平均尋道長度: "<<ave<<endl;</p><p><b>  }&l

87、t;/b></p><p>  /*****************************主函數*******************************/</p><p>  void main()</p><p><b>  {</b></p><p><b>  int a,b;</b

88、></p><p>  int c; //菜單項</p><p>  int cidao[maxsize];</p><p>  int i=0,count;</p><p>  char str[100];</p><p>  cout<<"*1. 隨機產生 *2. 鍵盤輸入 *"

89、;<<endl;</p><p><b>  cin>>b;</b></p><p><b>  if(b==1)</b></p><p><b>  {</b></p><p>  srand((unsigned)time(0));</p>

90、<p>  for( i=0;i<10;i++){ </p><p>  cidao[i]=rand() % maxsize;</p><p><b>  }</b></p><p>  count=i; //要訪問的磁道數</p><p>  cout<<"隨機產生的磁道序列為

91、:";</p><p>  for(i=0;i<count;i++) </p><p><b>  {</b></p><p>  cout<<cidao[i]<<" "; //輸出磁道序列</p><p><b>  }</b></

92、p><p>  cout<<endl;</p><p><b>  }</b></p><p><b>  if(b==2)</b></p><p><b>  {</b></p><p>  cout<<"請輸入磁道序列(

93、0結束):"<<endl;</p><p>  A:cin>>str; //對輸入數據進行有效性判斷</p><p>  a=decide(str);</p><p><b>  if(a==0)</b></p><p><b>  {</b></p>

94、<p>  cout<<"輸入數據的類型錯誤,請重新輸入!"<<endl;</p><p>  goto A;//輸入錯誤,跳轉到A,重新輸入</p><p><b>  }</b></p><p><b>  else</b></p><p&g

95、t;  cidao[i]=trans(str,a);</p><p><b>  i++;</b></p><p>  while(cidao[i-1]!=0)</p><p><b>  {</b></p><p>  cin>>str; //對輸入數據進行有效性判斷</p>

96、;<p>  a=decide(str);</p><p><b>  if(a==0)</b></p><p>  cout<<"輸入數據的類型錯誤,請重新輸入!"<<endl;</p><p><b>  else</b></p><p>

97、;<b>  { </b></p><p>  cidao[i]=trans(str,a);</p><p><b>  i++;</b></p><p><b>  }</b></p><p><b>  }</b></p><p&g

98、t;  count=i-1; //要訪問的磁道數</p><p>  cout<<"你輸入的磁道序列為:";</p><p>  for(i=0;i<count;i++) </p><p><b>  {</b></p><p>  cout<<cidao[i]<&

99、lt;" "; //輸出磁道序列</p><p><b>  }</b></p><p>  cout<<endl;</p><p><b>  }</b></p><p><b>  while(1)</b></p><p&

100、gt;<b>  {</b></p><p>  cout<<endl;</p><p>  cout<<"***********************************************************"<<endl;</p><p>  cout<<&

101、quot;*1. 先來先服務 *2. 最短尋道時間優(yōu)先 *3. 掃描調度 *4. 退出 *"<<endl;</p><p>  cout<<"***********************************************************"<<endl;</p><p>  G:cout<<

102、"請選擇算法:";</p><p>  F:cin>>str; //對輸入數據進行有效性判斷</p><p>  a=decide(str);</p><p><b>  if(a==0)</b></p><p><b>  {</b></p><

103、p>  cout<<"輸入數據的類型錯誤,請重新輸入!"<<endl;</p><p>  goto F;//輸入錯誤,跳轉到F,重新輸入</p><p><b>  }</b></p><p><b>  else</b></p><p>  c

104、=trans(str,a);</p><p><b>  if(c==4)</b></p><p><b>  break;</b></p><p><b>  if(c>4)</b></p><p><b>  {</b></p>&

105、lt;p>  cout<<"數據輸入錯誤!請重新輸入"<<endl;</p><p><b>  goto G;</b></p><p><b>  }</b></p><p><b>  switch(c)</b></p><p&

106、gt;<b>  {</b></p><p>  case 1: //使用FCFS算法</p><p>  FCFS(cidao,count);</p><p><b>  break;</b></p><p>  case 2: //使用SSTF算法</p><p>  S

107、STF(cidao,count);</p><p><b>  break;</b></p><p>  case 3: //使用SCAN算法</p><p>  SCAN(cidao,count);</p><p><b>  break;</b></p><p><

溫馨提示

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

評論

0/150

提交評論