操作系統(tǒng)課程設(shè)計報告--驅(qū)動調(diào)度_第1頁
已閱讀1頁,還剩28頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、<p>  操作系統(tǒng)課程設(shè)計報告</p><p><b>  設(shè)計題目:驅(qū)動調(diào)度</b></p><p>  系 別:計算機科學系</p><p>  專 業(yè):計算機科學與技術(shù)(師范)</p><p><b>  班 級: </b></p><p>

2、;<b>  姓 名: </b></p><p><b>  學 號: </b></p><p><b>  指導教師: </b></p><p>  2012年11月26日</p><p><b>  目錄</b></p>&l

3、t;p>  一、程序設(shè)計內(nèi)容原理及目的·······························</p>

4、<p>  1、設(shè)計內(nèi)容··································

5、;··············`</p><p>  2、設(shè)計原理·················

6、83;·······························</p><p>  3、設(shè)計目的&#

7、183;····································

8、············</p><p>  二、程序設(shè)計過程···················

9、83;·····················</p><p>  1、驅(qū)動調(diào)度中的數(shù)據(jù)結(jié)構(gòu)設(shè)計·········

10、························</p><p>  2、程序算法設(shè)計·······

11、83;····································&

12、#183;·</p><p>  三、用戶手冊······························

13、················</p><p>  1、運行壞境················

14、;··································</p><

15、;p>  2、執(zhí)行文件··································&#

16、183;···············</p><p>  四、程序?qū)崿F(xiàn)及運行結(jié)果···············&#

17、183;····················</p><p>  1、源代碼···········&#

18、183;····································

19、····</p><p>  2、代碼····························&

20、#183;·························</p><p>  3、 運行結(jié)果······

21、;····································

22、83;······</p><p>  五、心得總結(jié)·························&#

23、183;·····················</p><p>  六、參考文獻··········&

24、#183;····································

25、;</p><p>  二、程序設(shè)計內(nèi)容原理及目的</p><p><b>  設(shè)計內(nèi)容</b></p><p>  模擬電梯調(diào)度算法,實現(xiàn)對磁盤的驅(qū)動調(diào)度。</p><p><b>  設(shè)計原理</b></p><p>  作為操作系統(tǒng)的輔助存儲器,用來存放文件的磁盤是一類

26、高速大容量旋轉(zhuǎn)型存儲設(shè)備,在繁重的I/O負載下,同時會有若干傳輸請求來到并等待處理,系統(tǒng)必須采用一種調(diào)度策略,按照最佳次序執(zhí)行要求訪問的諸多請求,減少為若干I/O請求服務(wù)所需消耗的總時間。</p><p>  磁盤驅(qū)動調(diào)度對磁盤的效率有重要影響。磁盤驅(qū)動調(diào)度算法的好壞直接影響輔助存儲器的效率,從而影響計算機系統(tǒng)的整體效率。</p><p>  電梯調(diào)動算法總是將一個方向上的請求全部處理完后

27、,才改變方向繼續(xù)處理其他請求。</p><p><b>  設(shè)計目的</b></p><p>  磁盤是一種高速、大容量、旋轉(zhuǎn)型、可直接存取的存儲設(shè)備。它作為計算機系統(tǒng)的輔助存儲器,擔負著繁重的輸入輸出任務(wù)、在多道程序設(shè)計系統(tǒng)中,往往同時會有若干個要求訪問磁盤的輸入輸出請求等待處理。系統(tǒng)可采用一種策略,盡可能按最佳次序執(zhí)行要求訪問磁盤的諸輸入輸出請求。這就叫驅(qū)動調(diào)度,

28、使用的算法稱為驅(qū)動調(diào)度算法。驅(qū)動調(diào)度能降低為若干個輸入輸出請求服務(wù)所需的總時間,從而提高系統(tǒng)效率。本實驗要求模擬設(shè)計一個驅(qū)動調(diào)度程序,觀察驅(qū)動調(diào)度程序的動態(tài)運行過程。通過實驗使學生理解和掌握驅(qū)動調(diào)度的職能。</p><p>  一、程序設(shè)計過程 </p><p>  驅(qū)動調(diào)度中的數(shù)據(jù)結(jié)構(gòu)設(shè)計</p><p>  typedef struct Process

29、 //描述進程信息</p><p><b>  {</b></p><p>  char name[N]; //進程名</p><p>  int cyl_num; //柱面號</p><p>  int tra_num; //磁道號</p><p

30、>  int rec_num; //物理記錄號</p><p>  int signal; //標記,用以判斷結(jié)構(gòu)體數(shù)組中該元素是否有效</p><p><b> ?。齪rocess;</b></p><p><b>  2、算法設(shè)計</b></p><p&

31、gt;<b>  函數(shù)模塊</b></p><p>  各函數(shù)調(diào)用關(guān)系如圖1所示,箭頭指向被調(diào)用的函數(shù)</p><p>  圖1 函數(shù)調(diào)用關(guān)系流程圖</p><p>  各函數(shù)功能及流程圖如下:</p><p>  1)主函數(shù):void main()</p><p>  函數(shù)功能:顯示提示信息,初

32、始化進程數(shù)組,根據(jù)隨機數(shù)的值選擇調(diào)用驅(qū)動調(diào)度和接</p><p>  收請求或者選擇繼續(xù)和退出程序。</p><p><b>  入口參數(shù):無</b></p><p><b>  出口參數(shù):無</b></p><p><b>  流程圖:如圖2所示</b></p>

33、<p><b>  圖2 主函數(shù)流程圖</b></p><p>  2)隨機數(shù)函數(shù):float Ran_Num()</p><p>  函數(shù)功能:接收隨機數(shù)</p><p><b>  入口參數(shù) :無</b></p><p>  出口參數(shù):接收進來的隨機數(shù)</p><

34、p><b>  流程圖:無</b></p><p>  接收請求函數(shù):void list(int pro_count,int pro_num,process pro[M]) </p><p>  函數(shù)功能:存放輸入的進程信息,創(chuàng)建等待進程列表</p><p>  入口參數(shù):初始化后的進程數(shù)組</p><p><

35、;b>  出口參數(shù):無</b></p><p><b>  流程圖:如圖3所示</b></p><p>  圖3 接收請求流程圖</p><p>  4)旋轉(zhuǎn)調(diào)度函數(shù):void cir_sec(process pro[M])</p><p>  函數(shù)功能:如果有請求與當前柱面號相同,進行旋轉(zhuǎn)調(diào)度,選擇旋

36、轉(zhuǎn)距離最小的進程</p><p>  入口參數(shù):部分全局變量及進程數(shù)組</p><p>  出口參數(shù):選擇的數(shù)組元素編號</p><p><b>  流程圖:如圖4所示</b></p><p>  圖4 旋轉(zhuǎn)調(diào)度流程圖</p><p>  5) 移臂調(diào)度函數(shù):void mov_sec(proces

37、s pro[M])</p><p>  函數(shù)功能:沒有與當前柱面號相同的訪問請求時,進行移臂調(diào)度</p><p><b>  入口參數(shù):進程數(shù)組</b></p><p>  出口參數(shù):選擇的數(shù)組元素編號</p><p><b>  流程圖:如圖5所示</b></p><p>

38、  圖5 移臂調(diào)度流程圖</p><p>  6 ) 驅(qū)動調(diào)度函數(shù):void dri_sch(int pro_count,process pro[M] )</p><p>  函數(shù)功能:進行進程調(diào)度,按照電梯調(diào)度算法選擇進程 </p><p>  入口參數(shù):當前有效進程數(shù)、進程數(shù)組</p><p><b>  出口參數(shù):無</

39、b></p><p><b>  流程圖:如圖6所示</b></p><p>  圖6 驅(qū)動調(diào)度流程圖</p><p><b>  三、用戶手冊</b></p><p><b>  運行壞境</b></p><p>  Microsoft Visu

40、al C++6.0</p><p><b>  執(zhí)行文件</b></p><p>  文件夾中 .cpp文件或 .dsw</p><p>  四、程序?qū)崿F(xiàn)及運行結(jié)果</p><p><b>  源代碼</b></p><p>  qddr.cpp 主函數(shù)</p>

41、<p>  pro_struct.h 結(jié)構(gòu)體定義</p><p>  pro_list.h 創(chuàng)建進程請求表</p><p>  ran_num.h 接收隨機數(shù)</p><p>  Driver_Scheduling.h 驅(qū)動調(diào)度</p><p><b>  代碼</b></p><p>

42、;  pro_struct.h</p><p>  #ifndef PRO_STRUCT_H</p><p>  #define PRO_STRUCT_H</p><p>  #define N 10</p><p>  typedef struct Process</p><p><b>  {</b

43、></p><p>  char name[N];//進程名</p><p>  int cyl_num;//請求的柱面號</p><p>  int tra_num;//請求的磁道號</p><p>  int rec_num;//請求的物理記錄號</p><p>  int signal;//標記位&

44、lt;/p><p><b>  }process;</b></p><p><b>  #endif</b></p><p>  pro_list.h</p><p>  #ifndef PRO_LIST_H</p><p>  #define PRO_LIST_H</p&

45、gt;<p>  #include<iostream></p><p>  #include<string.h></p><p>  #include"pro_struct.h"</p><p>  using namespace std;</p><p>  #define M 10

46、0</p><p>  void list(int pro_count,int pro_num,process pro[M])//創(chuàng)建等待進程表</p><p><b>  {</b></p><p>  cout<<"等待的進程數(shù):";</p><p>  cin>>pro_

47、num;</p><p>  if(pro_num>0&&(pro_num+pro_count)<=M)//判斷要輸入的進程數(shù)是否合法,輸入后是否超出進程等待表所允許的最大值</p><p><b>  {</b></p><p>  cout<<"開始輸入"<<endl;

48、</p><p>  int i,j=0,h;</p><p>  for(i=0;i<M;i++)</p><p><b>  {</b></p><p>  for(;pro[i].signal==0&&j<pro_num;j++)</p><p><b&g

49、t;  {</b></p><p>  cin>>pro[i].name>>pro[i].cyl_num>>pro[i].tra_num>>pro[i].rec_num;</p><p>  for(h=0;h<M;h++)</p><p><b>  {</b></p&g

50、t;<p>  if(pro[h].signal==1)</p><p><b>  {</b></p><p>  while(strcmp(pro[h].name,pro[i].name)==0||strlen(pro[i].name)>10)</p><p><b>  {</b></p&g

51、t;<p>  cout<<"進程名不合規(guī)定,超出指定長度或已存在,請重新輸入進程名:"<<endl;</p><p>  cin>>pro[i].name;</p><p><b>  }</b></p><p><b>  }</b></p&g

52、t;<p><b>  }</b></p><p>  while(pro[i].cyl_num<0||pro[i].cyl_num>199)//判斷柱面號是否越界</p><p><b>  {</b></p><p>  cout<<"柱面號不合規(guī)定,請重新輸入柱面號:&

53、quot;<<endl;</p><p>  cin>>pro[i].cyl_num;</p><p><b>  }</b></p><p>  while(pro[i].tra_num<0||pro[i].tra_num>19)//判斷磁道號是否越界</p><p><

54、b>  {</b></p><p>  cout<<"磁道號不合規(guī)定,請重新輸入磁道號:"<<endl;</p><p>  cin>>pro[i].tra_num;</p><p><b>  }</b></p><p>  while(p

55、ro[i].rec_num<0||pro[i].rec_num>7)//判斷物理記錄號是否越界</p><p><b>  {</b></p><p>  cout<<"物理記錄號不合規(guī)定,請重新輸入物理記錄號:"<<endl;</p><p>  cin>>pro[i].re

56、c_num;</p><p><b>  }</b></p><p>  pro[i].signal=1;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b><

57、;/p><p><b>  else</b></p><p><b>  {</b></p><p>  if(pro_num<=0)</p><p><b>  {</b></p><p>  cout<<"要輸入的進程個數(shù)必須

58、為正整數(shù)"<<endl;</p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"進程數(shù)超出進程等待表所允許的最大量"&

59、lt;<endl;</p><p>  cout<<"當前最多允許輸入"<<(M-pro_count)<<"個進程"<<endl;</p><p><b>  }</b></p><p><b>  }</b></p>

60、<p><b>  }</b></p><p><b>  #endif</b></p><p>  3Driver_Scheduling.h</p><p>  #include<iostream></p><p>  #include<iomanip><

61、;/p><p>  #include"pro_list.h"</p><p>  #include"pro_struct.h"</p><p>  int dir=0; //0,up向里;1,down向外</p><p>  int cylinder=0;</p><p>

62、  int record=0;</p><p>  int min_rec=0;//移動到當前進程扇區(qū)所要移動的距離</p><p>  int min_r=8;//旋轉(zhuǎn)調(diào)度中最小移動距離</p><p>  int max_min_cyl=200;//大于當前柱面號的訪問請求中的最小者</p><p>  int min_min_cyl=2

63、00;//小于當前柱面號的訪問請求中的最小者</p><p><b>  int x;</b></p><p>  int choosen=0;//被選中的進程</p><p>  void cir_sec(process pro[M]) //旋轉(zhuǎn)調(diào)度</p><p><b>  {</b><

64、/p><p>  if(pro[x].rec_num<record)</p><p>  min_rec=8-(record-pro[x].rec_num);</p><p><b>  else</b></p><p>  min_rec=pro[x].rec_num-record;</p><p

65、>  if(min_rec<=min_r)//首選移動距離最小,再選磁盤號最小</p><p><b>  {</b></p><p>  min_r=min_rec;//選擇移動距離最小的請求</p><p>  choosen=x;</p><p><b>  }</b></p

66、><p><b>  }</b></p><p>  void mov_sec(process pro[M])//移臂調(diào)度</p><p><b>  {</b></p><p>  int count_abo=0;</p><p>  int count_low=0;</

67、p><p>  if(dir==0)//如果方向向里up</p><p><b>  {</b></p><p>  for(x=0;x<M;x++)</p><p><b>  {</b></p><p>  if(pro[x].signal==1)</p>

68、<p><b>  {</b></p><p>  if(pro[x].cyl_num>cylinder)</p><p>  count_abo++;</p><p><b>  }</b></p><p><b>  }</b></p>&l

69、t;p>  if(count_abo>0)//有進程柱面號大于當前柱面號</p><p><b>  {</b></p><p>  for(x=0;x<M;x++)</p><p><b>  {</b></p><p>  if(pro[x].signal==1)</p&

70、gt;<p><b>  {</b></p><p>  if(pro[x].cyl_num>cylinder&&pro[x].cyl_num<max_min_cyl)//從大于當前柱面號的訪問請求中選擇一個最小者</p><p><b>  {</b></p><p>  max

71、_min_cyl=pro[x].cyl_num;</p><p>  choosen=x;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  for(x=0;x&l

72、t;M;x++)</p><p><b>  {</b></p><p>  if(pro[x].signal==1)</p><p><b>  {</b></p><p>  if(pro[x].cyl_num==max_min_cyl)//從大于當前柱面號的訪問請求中選擇一個最小者</p

73、><p><b>  {</b></p><p>  cir_sec(pro);//旋轉(zhuǎn)調(diào)度</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p>

74、<p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  dir=1;//改方向為向外,down</p><p>  for(x=0;x<M;x++)</p><

75、p><b>  {</b></p><p>  if(pro[x].signal==1)</p><p><b>  {</b></p><p>  if(pro[x].cyl_num<cylinder&&pro[x].cyl_num<min_min_cyl)//從小于當前柱面號的訪問請求

76、中選擇一個最小者</p><p><b>  {</b></p><p>  min_min_cyl=pro[x].cyl_num;</p><p>  choosen=x;</p><p><b>  }</b></p><p><b>  }</b>

77、</p><p><b>  }</b></p><p>  for(x=0;x<M;x++)</p><p><b>  {</b></p><p>  if(pro[x].signal==1)</p><p><b>  {</b></p

78、><p>  if(pro[x].cyl_num==min_min_cyl)</p><p><b>  {</b></p><p>  cir_sec(pro);//旋轉(zhuǎn)調(diào)度</p><p><b>  }</b></p><p><b>  }</b>&

79、lt;/p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b><

80、;/p><p>  for(x=0;x<M;x++)</p><p><b>  {</b></p><p>  if(pro[x].signal==1)</p><p><b>  {</b></p><p>  if(pro[x].cyl_num<cylinder

81、)</p><p>  count_low++;</p><p><b>  }</b></p><p><b>  }</b></p><p>  if(count_low>0)//有進程柱面號大于當前柱面號</p><p><b>  {</b>

82、;</p><p>  for(x=0;x<M;x++)</p><p><b>  {</b></p><p>  if(pro[x].signal==1)</p><p><b>  {</b></p><p>  if(pro[x].cyl_num<cyli

83、nder&&pro[x].cyl_num<min_min_cyl)//從小于當前柱面號的訪問請求中選擇一個最小者</p><p><b>  {</b></p><p>  min_min_cyl=pro[x].cyl_num;</p><p>  choosen=x;</p><p><b&

84、gt;  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  for(x=0;x<M;x++)</p><p><b>  {</b></p><p>  if(pro[x].

85、signal==1)</p><p><b>  {</b></p><p>  if(pro[x].cyl_num=min_min_cyl)</p><p><b>  {</b></p><p>  cir_sec(pro);//旋轉(zhuǎn)調(diào)度</p><p><b>

86、;  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b> 

87、 {</b></p><p>  dir=0;//改方向為向里up</p><p>  for(x=0;x<M;x++)</p><p><b>  {</b></p><p>  if(pro[x].signal==1)</p><p><b>  {</b&g

88、t;</p><p>  if(pro[x].cyl_num>cylinder&&pro[x].cyl_num<max_min_cyl)//從大于當前柱面號的訪問請求中選擇一個最小者</p><p><b>  {</b></p><p>  max_min_cyl=pro[x].cyl_num;</p>

89、<p>  choosen=x;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p>  for(x=0;x<M;x++)</p><p><b

90、>  {</b></p><p>  if(pro[x].signal==1)</p><p><b>  {</b></p><p>  if(pro[x].cyl_num==max_min_cyl)//從大于當前柱面號的訪問請求中選擇一個最小者</p><p><b>  {</b&

91、gt;</p><p>  cir_sec(pro);//旋轉(zhuǎn)調(diào)度</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b><

92、;/p><p><b>  }</b></p><p><b>  }</b></p><p>  void dri_sch(int pro_count,process pro[M] )//電梯調(diào)度</p><p><b>  {</b></p><p> 

93、 max_min_cyl=200;//大于當前柱面號的訪問請求中的最小者</p><p>  min_min_cyl=200;//小于當前柱面號的訪問請求中的最小者</p><p><b>  min_r=8;</b></p><p>  choosen=0;</p><p>  int count_equ=0;<

94、/p><p>  if(pro_count!=0)//有等待訪問的進程</p><p><b>  {</b></p><p>  cout<<"當前請求I/O表為:"<<endl;</p><p>  cout<<"┌─────────────────┐&q

95、uot;<<endl;</p><p>  cout<<"│進程名│柱面號│磁道號│物理記錄號│"<<endl;</p><p>  cout<<"└─────────────────┙"<<endl;</p><p>  cout.setf(ios::left);&

96、lt;/p><p>  for(x=0;x<M;x++)</p><p><b>  {</b></p><p>  if(pro[x].signal==1)</p><p><b>  {</b></p><p><b>  cout<<"

97、 </b></p><p>  "<<setw(10)<<pro[x].name<<setw(8)<<pro[x].cyl_num<<setw(8)<<pro[x].tra_num<<setw(8)<<pro[x].rec_num<<endl;</p><p>

98、<b>  }</b></p><p><b>  }</b></p><p>  cout.unsetf(ios::left);</p><p>  for(x=0;x<M;x++)</p><p><b>  {</b></p><p>  i

99、f(pro[x].signal==1)</p><p>  if(pro[x].cyl_num==cylinder)//有進程柱面號等于當前柱面號</p><p>  count_equ++;</p><p><b>  }</b></p><p>  if(count_equ>0)</p><

100、p><b>  {</b></p><p>  for(x=0;x<M;x++)</p><p><b>  {</b></p><p>  if(pro[x].signal==1)</p><p><b>  {</b></p><p> 

101、 if(pro[x].cyl_num==cylinder)</p><p><b>  {</b></p><p>  cir_sec(pro);//旋轉(zhuǎn)調(diào)度</p><p><b>  }</b></p><p><b>  }</b></p><p>

102、;<b>  }</b></p><p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  mov_sec(pro);//移臂調(diào)度</p><p>&l

103、t;b>  }</b></p><p>  cylinder=pro[choosen].cyl_num;</p><p>  record=pro[choosen].rec_num;</p><p>  pro[choosen].signal=0;</p><p>  if(dir==0)</p><p&

104、gt;<b>  {</b></p><p>  cout<<"選擇的進程為:"<<endl;</p><p>  cout<<"┌────────────────┐"<<endl;</p><p>  cout<<"│進程名│柱面號│

105、物理記錄號│方向│"<<endl; </p><p>  cout<<"└────────────────┙"<<endl;</p><p>  cout.setf(ios::left);</p><p>  cout<<" "<<setw(10)<&

106、lt;pro[choosen].name<<setw(8)<<pro[choosen].cyl_num<<setw(10)<<pro[choosen].rec_num<<setw(8)<<"up"<<endl;</p><p>  cout.unsetf(ios::left);</p>&l

107、t;p><b>  }</b></p><p><b>  else</b></p><p><b>  {</b></p><p>  cout<<"選擇的進程為:"<<endl;</p><p>  cout<<

108、"┌────────────────┐"<<endl;</p><p>  cout<<"│進程名│柱面號│物理記錄號│方向│" <<endl; </p><p>  cout<<"└────────────────┙"<<endl;</p><p

109、>  cout.setf(ios::left);</p><p><b>  cout<<" </b></p><p>  "<<setw(10)<<pro[choosen].name<<setw(8)<<pro[choosen].cyl_num<<setw(10)&l

110、t;<pro[choosen].rec_num<<setw(8)<<"down"<<endl;</p><p>  cout.unsetf(ios::left);</p><p><b>  }</b></p><p><b>  }</b><

111、/p><p><b>  else </b></p><p>  cout<<"請求I/O表為空"<<endl;</p><p><b>  }</b></p><p><b>  ran_num.h</b></p><

112、;p>  #include<stdlib.h></p><p>  float Ran_Num()</p><p><b>  {</b></p><p>  float ran_num;</p><p>  /*float i;</p><p>  i=float(rand(

113、));</p><p>  if(i==0||1)</p><p>  ran_num=i;</p><p><b>  else</b></p><p>  ran_num=1/i; */</p><p>  cout<<"輸入隨機數(shù)[0,1]:"&l

114、t;<endl;</p><p>  cout<<"隨機數(shù)>0.5時轉(zhuǎn)入電梯調(diào)度"<<endl;</p><p>  cout<<"隨機數(shù)<=0.5時轉(zhuǎn)入接收請求"<<endl;</p><p>  cin>>ran_num;</p>

115、<p>  return(ran_num);</p><p><b>  }</b></p><p><b>  qddd.cpp</b></p><p>  #include<iostream></p><p>  #include"Driver_Schedulin

116、g.h"</p><p>  #include"pro_list.h"</p><p>  #include"pro_struct.h"</p><p>  #include"ran_num.h"</p><p>  using namespace std;</p&g

117、t;<p>  void main()</p><p><b>  {</b></p><p>  cout<<"***************************************************************************"<<endl;</p><

118、p>  cout<<"請按照如下順序輸入各進程信息,以空格分開,每條進程信息輸入完成后按回車鍵結(jié)束:"<<endl;</p><p>  cout<<"進程名 柱面號 磁道號 物理記錄號"<<endl;</p><p>  cout<<"注:進程名不超過10個字符,柱面號為0

119、-199,磁道號為0-19,物理記錄號為0-7"<<endl;</p><p>  cout<<"***************************************************************************"<<endl;</p><p><b>  int i;<

120、/b></p><p>  process pro[M];//創(chuàng)建進程數(shù)組</p><p>  for(i=0;i<M;i++)//初始化進程數(shù)組中所有項的標記位為0,即該項未存入進程信息</p><p><b>  {</b></p><p>  pro[i].signal=0;</p>&l

121、t;p><b>  }</b></p><p>  int pro_num=0;</p><p>  char signal='Y';</p><p>  int pro_count;//進程等待表中進程數(shù)</p><p>  while(signal=='Y'||signal==

122、'y')</p><p><b>  {</b></p><p>  if(Ran_Num()>0.5)//如果隨即數(shù)大于0.5,轉(zhuǎn)到調(diào)度模塊</p><p><b>  {</b></p><p>  pro_count=0;</p><p>  f

123、or(i=0;i<M;i++)</p><p><b>  {</b></p><p>  if(pro[i].signal==1)</p><p>  pro_count++;//統(tǒng)計進程等代表中有效進程數(shù)</p><p><b>  }</b></p><p>  

124、dri_sch(pro_count,pro);</p><p><b>  }</b></p><p>  else//若隨機數(shù)小于等于0.5,轉(zhuǎn)到接受請求,即創(chuàng)建等待進程表</p><p><b>  {</b></p><p>  pro_count=0;</p><p>

125、;  list(pro_count,pro_num,pro);</p><p><b>  }</b></p><p>  cout<<endl<<"是否繼續(xù)(Y/N)?";</p><p>  cin>>signal;</p><p>  while(signal

126、!='Y'&&signal!='N'&&signal!='y'&&signal!='n')</p><p><b>  {</b></p><p>  cout<<"輸入錯誤,請輸入Y(y)或N(n)"<<endl

127、;</p><p>  cin>>signal;</p><p><b>  }</b></p><p><b>  }</b></p><p><b>  }</b></p><p><b>  運行結(jié)果</b><

128、;/p><p>  1)初始狀態(tài),結(jié)果如圖7所示</p><p><b>  圖7 初始狀態(tài)</b></p><p>  輸入0.4,輸入進程數(shù)據(jù)并選擇繼續(xù),結(jié)果如圖8所示</p><p>  圖8 輸入5個進程的相關(guān)信息</p><p>  3)重復(fù)選擇繼續(xù),進行驅(qū)動調(diào)度直到等待進程表為空,結(jié)果如圖

129、9~圖13所示</p><p><b>  第一次選擇P5</b></p><p>  圖9 第一次選擇后結(jié)果</p><p><b>  第二次選擇P3</b></p><p>  圖10 第二次選擇后結(jié)果</p><p><b>  第三次選擇P1</b&

130、gt;</p><p>  圖11 第三次選擇后結(jié)果</p><p><b>  第四次選擇P4</b></p><p>  圖12 第四次選擇后結(jié)果</p><p>  第五次選擇P2,當前等待表為空</p><p>  圖13 第五次選擇后,進程等待表為空</p><p&g

131、t;  4)選擇繼續(xù),輸入0.4,再輸入3個進程,結(jié)果如圖14所示</p><p>  圖14 再輸入3個進程及相關(guān)信息</p><p>  5)重復(fù)選擇繼續(xù)進行驅(qū)動調(diào)度至等待進程表為空,然后選擇退出,結(jié)果如圖15~圖17所示</p><p><b>  第一次選擇P8</b></p><p>  圖15 再次輸入后第一

132、次選擇</p><p><b>  第二次選擇P6</b></p><p>  圖16 再次輸入后第二次選擇</p><p>  第三次選擇P7,當前等待表為空,選擇退出</p><p><b>  五、心得總結(jié)</b></p><p>  1、通過設(shè)計數(shù)據(jù)結(jié)構(gòu)進程訪問磁盤,

133、我進一步了解了磁盤存儲器的物理結(jié)構(gòu),對電梯算法有深入的了解。也更加理解了磁盤調(diào)度算法。</p><p>  2、剛剛開始進行實習設(shè)計時,對題目沒有進行正確的理解就忙于寫代碼,算法設(shè)計考慮的很不全面,從而導致后來實驗數(shù)據(jù)出錯,通過再次審查題目及資料,我了解了題目要求,對算法進行了重新設(shè)計,最終完成了試驗,得出了正確的運行結(jié)果。</p><p>  3、在調(diào)試的過程中出現(xiàn)了很多的問題,從語法到

134、算法中的錯誤,通過向老師和同學請教以及查閱資料,解決了這些問題,使我對編程語句及算法設(shè)計有了更深的認識。編程是很嚴謹?shù)氖虑?,不容半點馬虎,即使是一個括號也可能導致程序的錯誤。</p><p>  4、剛開始編譯的時候存在一些語法錯誤,結(jié)構(gòu)體及數(shù)組,以及參數(shù)傳遞相關(guān)知識都一知半解,對編程語言的運用還沒達到很熟練地步,通過這次實驗我更好復(fù)習和學習了編程語言的一些知識。</p><p>  5、

135、通過這次實驗,學習到了很多在課堂上沒有學到的知識,不僅僅是操作系統(tǒng)方面的知識,還包括與同學間交流的增長和進步。</p><p>  綜上所述,該課程設(shè)計讓我們鞏固了所學的知識,受益匪淺。希望以后還有這樣的機會。</p><p><b>  六、參考文獻</b></p><p>  〔1〕湯曉丹,梁紅兵,等. 《計算機操作系統(tǒng)》(第三版). 西安

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論