

版權(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計(jì)---磁盤調(diào)度報(bào)告
- 操作系統(tǒng)程序調(diào)度課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--磁盤調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--磁盤調(diào)度算法
- 操作系統(tǒng)磁盤調(diào)度算法課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--磁盤調(diào)度算法
- 操作系統(tǒng)_進(jìn)程調(diào)度算法課程設(shè)計(jì)報(bào)告
- 操作系統(tǒng)課程設(shè)計(jì)報(bào)告--磁盤調(diào)度算法
- 操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計(jì)
- 操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--作業(yè)調(diào)度
- 操作系統(tǒng)課程設(shè)計(jì)——操作系統(tǒng)課程設(shè)計(jì)模擬操作系統(tǒng)
- 操作系統(tǒng)課程設(shè)計(jì)---作業(yè)調(diào)度模擬
- 進(jìn)程調(diào)度算法 操作系統(tǒng)課程設(shè)計(jì)
- 操作系統(tǒng)課程設(shè)計(jì)--進(jìn)程調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)-進(jìn)程調(diào)度模擬
- 操作系統(tǒng)課程設(shè)計(jì)---磁盤調(diào)度算法
- 操作系統(tǒng)課程設(shè)計(jì)---進(jìn)程調(diào)度算法
- 進(jìn)程調(diào)度算法操作系統(tǒng)課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論