操作系統(tǒng)課程設(shè)計(jì)報(bào)告--驅(qū)動(dòng)調(diào)度_第1頁(yè)
已閱讀1頁(yè),還剩28頁(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>  操作系統(tǒng)課程設(shè)計(jì)報(bào)告</p><p><b>  設(shè)計(jì)題目:驅(qū)動(dòng)調(diào)度</b></p><p>  系 別:計(jì)算機(jī)科學(xué)系</p><p>  專 業(yè):計(jì)算機(jī)科學(xué)與技術(shù)(師范)</p><p><b>  班 級(jí): </b></p><p>

2、;<b>  姓 名: </b></p><p><b>  學(xué) 號(hào): </b></p><p><b>  指導(dǎo)教師: </b></p><p>  2012年11月26日</p><p><b>  目錄</b></p>&l

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

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

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

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

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

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

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

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

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

12、#183;·</p><p>  三、用戶手冊(cè)······························

13、················</p><p>  1、運(yùn)行壞境················

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

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

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

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

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

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

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

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

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

23、183;·····················</p><p>  六、參考文獻(xiàn)··········&

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

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

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

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

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

29、 //描述進(jìn)程信息</p><p><b>  {</b></p><p>  char name[N]; //進(jìn)程名</p><p>  int cyl_num; //柱面號(hào)</p><p>  int tra_num; //磁道號(hào)</p><p

30、>  int rec_num; //物理記錄號(hào)</p><p>  int signal; //標(biāo)記,用以判斷結(jié)構(gòu)體數(shù)組中該元素是否有效</p><p><b>  }process;</b></p><p><b>  2、算法設(shè)計(jì)</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、始化進(jìn)程數(shù)組,根據(jù)隨機(jī)數(shù)的值選擇調(diào)用驅(qū)動(dòng)調(diào)度和接</p><p>  收請(qǐng)求或者選擇繼續(xù)和退出程序。</p><p><b>  入口參數(shù):無(wú)</b></p><p><b>  出口參數(shù):無(wú)</b></p><p><b>  流程圖:如圖2所示</b></p>

33、<p><b>  圖2 主函數(shù)流程圖</b></p><p>  2)隨機(jī)數(shù)函數(shù):float Ran_Num()</p><p>  函數(shù)功能:接收隨機(jī)數(shù)</p><p><b>  入口參數(shù) :無(wú)</b></p><p>  出口參數(shù):接收進(jìn)來(lái)的隨機(jī)數(shù)</p><

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

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

36、轉(zhuǎn)距離最小的進(jìn)程</p><p>  入口參數(shù):部分全局變量及進(jìn)程數(shù)組</p><p>  出口參數(shù):選擇的數(shù)組元素編號(hào)</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ù)功能:沒(méi)有與當(dāng)前柱面號(hào)相同的訪問(wèn)請(qǐng)求時(shí),進(jìn)行移臂調(diào)度</p><p><b>  入口參數(shù):進(jìn)程數(shù)組</b></p><p>  出口參數(shù):選擇的數(shù)組元素編號(hào)</p><p><b>  流程圖:如圖5所示</b></p><p>

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

39、b></p><p><b>  流程圖:如圖6所示</b></p><p>  圖6 驅(qū)動(dòng)調(diào)度流程圖</p><p><b>  三、用戶手冊(cè)</b></p><p><b>  運(yùn)行壞境</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)及運(yù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)建進(jìn)程請(qǐng)求表</p><p>  ran_num.h 接收隨機(jī)數(shù)</p><p>  Driver_Scheduling.h 驅(qū)動(dòng)調(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];//進(jìn)程名</p><p>  int cyl_num;//請(qǐng)求的柱面號(hào)</p><p>  int tra_num;//請(qǐng)求的磁道號(hào)</p><p>  int rec_num;//請(qǐng)求的物理記錄號(hào)</p><p>  int signal;//標(biāo)記位&

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)建等待進(jìn)程表</p><p><b>  {</b></p><p>  cout<<"等待的進(jìn)程數(shù):";</p><p>  cin>>pro_

47、num;</p><p>  if(pro_num>0&&(pro_num+pro_count)<=M)//判斷要輸入的進(jìn)程數(shù)是否合法,輸入后是否超出進(jìn)程等待表所允許的最大值</p><p><b>  {</b></p><p>  cout<<"開(kāi)始輸入"<<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<<"進(jìn)程名不合規(guī)定,超出指定長(zhǎng)度或已存在,請(qǐng)重新輸入進(jìn)程名:"<<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)//判斷柱面號(hào)是否越界</p><p><b>  {</b></p><p>  cout<<"柱面號(hào)不合規(guī)定,請(qǐng)重新輸入柱面號(hào):&

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)//判斷磁道號(hào)是否越界</p><p><

54、b>  {</b></p><p>  cout<<"磁道號(hào)不合規(guī)定,請(qǐng)重新輸入磁道號(hào):"<<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)//判斷物理記錄號(hào)是否越界</p><p><b>  {</b></p><p>  cout<<"物理記錄號(hào)不合規(guī)定,請(qǐng)重新輸入物理記錄號(hào):"<<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<<"要輸入的進(jìn)程個(gè)數(shù)必須

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

59、lt;<endl;</p><p>  cout<<"當(dāng)前最多允許輸入"<<(M-pro_count)<<"個(gè)進(jìn)程"<<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;//移動(dòng)到當(dāng)前進(jìn)程扇區(qū)所要移動(dòng)的距離</p><p>  int min_r=8;//旋轉(zhuǎn)調(diào)度中最小移動(dòng)距離</p><p>  int max_min_cyl=200;//大于當(dāng)前柱面號(hào)的訪問(wèn)請(qǐng)求中的最小者</p><p>  int min_min_cyl=2

63、00;//小于當(dāng)前柱面號(hào)的訪問(wèn)請(qǐng)求中的最小者</p><p><b>  int x;</b></p><p>  int choosen=0;//被選中的進(jìn)程</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)//首選移動(dòng)距離最小,再選磁盤號(hào)最小</p><p><b>  {</b></p><p>  min_r=min_rec;//選擇移動(dòng)距離最小的請(qǐng)求</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)//有進(jìn)程柱面號(hào)大于當(dāng)前柱面號(hào)</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)//從大于當(dāng)前柱面號(hào)的訪問(wèn)請(qǐng)求中選擇一個(gè)最小者</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)//從大于當(dāng)前柱面號(hào)的訪問(wèn)請(qǐng)求中選擇一個(gè)最小者</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;//改方向?yàn)橄蛲?,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)//從小于當(dāng)前柱面號(hào)的訪問(wèn)請(qǐng)求

76、中選擇一個(gè)最小者</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)//有進(jìn)程柱面號(hào)大于當(dāng)前柱面號(hào)</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)//從小于當(dāng)前柱面號(hào)的訪問(wèn)請(qǐng)求中選擇一個(gè)最小者</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;//改方向?yàn)橄蚶飖p</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)//從大于當(dāng)前柱面號(hào)的訪問(wèn)請(qǐng)求中選擇一個(gè)最小者</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)//從大于當(dāng)前柱面號(hào)的訪問(wèn)請(qǐng)求中選擇一個(gè)最小者</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;//大于當(dāng)前柱面號(hào)的訪問(wèn)請(qǐng)求中的最小者</p><p>  min_min_cyl=200;//小于當(dāng)前柱面號(hào)的訪問(wèn)請(qǐng)求中的最小者</p><p><b>  min_r=8;</b></p><p>  choosen=0;</p><p>  int count_equ=0;<

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

95、uot;<<endl;</p><p>  cout<<"│進(jìn)程名│柱面號(hào)│磁道號(hào)│物理記錄號(hào)│"<<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)//有進(jìn)程柱面號(hào)等于當(dāng)前柱面號(hào)</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<<"選擇的進(jìn)程為:"<<endl;</p><p>  cout<<"┌────────────────┐"<<endl;</p><p>  cout<<"│進(jìn)程名│柱面號(hào)│

105、物理記錄號(hào)│方向│"<<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<<"選擇的進(jìn)程為:"<<endl;</p><p>  cout<<

108、"┌────────────────┐"<<endl;</p><p>  cout<<"│進(jìn)程名│柱面號(hào)│物理記錄號(hào)│方向│" <<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<<"請(qǐng)求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<<"輸入隨機(jī)數(shù)[0,1]:"&l

114、t;<endl;</p><p>  cout<<"隨機(jī)數(shù)>0.5時(shí)轉(zhuǎn)入電梯調(diào)度"<<endl;</p><p>  cout<<"隨機(jī)數(shù)<=0.5時(shí)轉(zhuǎn)入接收請(qǐng)求"<<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<<"請(qǐng)按照如下順序輸入各進(jìn)程信息,以空格分開(kāi),每條進(jìn)程信息輸入完成后按回車鍵結(jié)束:"<<endl;</p><p>  cout<<"進(jìn)程名 柱面號(hào) 磁道號(hào) 物理記錄號(hào)"<<endl;</p><p>  cout<<"注:進(jìn)程名不超過(guò)10個(gè)字符,柱面號(hào)為0

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

120、/b></p><p>  process pro[M];//創(chuàng)建進(jìn)程數(shù)組</p><p>  for(i=0;i<M;i++)//初始化進(jìn)程數(shù)組中所有項(xiàng)的標(biāo)記位為0,即該項(xiàng)未存入進(jìn)程信息</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;//進(jìn)程等待表中進(jìn)程數(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)計(jì)進(jìn)程等代表中有效進(jìn)程數(shù)</p><p><b>  }</b></p><p>  

124、dri_sch(pro_count,pro);</p><p><b>  }</b></p><p>  else//若隨機(jī)數(shù)小于等于0.5,轉(zhuǎn)到接受請(qǐng)求,即創(chuàng)建等待進(jìn)程表</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<<"輸入錯(cuò)誤,請(qǐng)輸入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>  運(yùn)行結(jié)果</b><

128、;/p><p>  1)初始狀態(tài),結(jié)果如圖7所示</p><p><b>  圖7 初始狀態(tài)</b></p><p>  輸入0.4,輸入進(jìn)程數(shù)據(jù)并選擇繼續(xù),結(jié)果如圖8所示</p><p>  圖8 輸入5個(gè)進(jìn)程的相關(guān)信息</p><p>  3)重復(fù)選擇繼續(xù),進(jìn)行驅(qū)動(dòng)調(diào)度直到等待進(jìn)程表為空,結(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,當(dāng)前等待表為空</p><p>  圖13 第五次選擇后,進(jìn)程等待表為空</p><p&g

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

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

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

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

135、通過(guò)這次實(shí)驗(yàn),學(xué)習(xí)到了很多在課堂上沒(méi)有學(xué)到的知識(shí),不僅僅是操作系統(tǒng)方面的知識(shí),還包括與同學(xué)間交流的增長(zhǎng)和進(jìn)步。</p><p>  綜上所述,該課程設(shè)計(jì)讓我們鞏固了所學(xué)的知識(shí),受益匪淺。希望以后還有這樣的機(jī)會(huì)。</p><p><b>  六、參考文獻(xiàn)</b></p><p>  〔1〕湯曉丹,梁紅兵,等. 《計(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)論