版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、<p><b> 計算機與信息學(xué)院</b></p><p><b> 課程設(shè)計報告</b></p><p> 2014年1月16日</p><p> 目 錄</p><p> 1.進(jìn)程調(diào)度算法模擬課程設(shè)計的目的……………………………………………1</p>
2、<p> 2.進(jìn)程調(diào)度算法模擬課程設(shè)計的要求……………………………………………1</p><p> 3.進(jìn)程調(diào)度算法模擬課程設(shè)計報告內(nèi)容…………………………………………1</p><p> 3.1前言 ………………………………………………………………………1</p><p> 3.2進(jìn)程調(diào)度算法模擬設(shè)計的環(huán)境 …………………………………………1
3、</p><p> 3.3系統(tǒng)流程圖及各模塊 ……………………………………………………2</p><p> 4.總結(jié) …………………………………………………………………………18</p><p> 參考文獻(xiàn)………………………………………………………………………19</p><p> 參考網(wǎng)站…………………………………………………………
4、……………19</p><p><b> 進(jìn)程調(diào)度算法模擬</b></p><p> 1.進(jìn)程調(diào)度算法模擬課程設(shè)計的目的和意義</p><p> 2013-2014學(xué)年,在學(xué)習(xí)了《操作系統(tǒng)》這門課后,對當(dāng)中的進(jìn)程調(diào)度算法產(chǎn)生了濃厚的興趣。各種調(diào)度算法,理論上比較好理解。為了加深印象,我決定把各種調(diào)度算法用C語言寫出來。于是便產(chǎn)生這份從頭到
5、尾都讓我絞盡腦汁的課程設(shè)計。</p><p> 做這份課程設(shè)計,對從事系統(tǒng)開發(fā)的人員來說,是必要的,可以在一定程度上為自己以后的發(fā)展鋪路。雖然用處不是特別明顯,但對加深系統(tǒng)調(diào)用算法的理解無疑用處是巨大的。</p><p> 2.進(jìn)程調(diào)度算法模擬課程設(shè)計的要求</p><p> 用C語言寫出至少兩種進(jìn)程調(diào)度算法。</p><p><
6、b> 畫出大概流程圖。</b></p><p> 對算法過程出現(xiàn)的bug進(jìn)行調(diào)試。</p><p><b> 展示最后的算法結(jié)果</b></p><p><b> 3.1前言:</b></p><p> 目前比較常見的幾種進(jìn)程調(diào)度算法有:</p><p
7、> 先到先服務(wù)(FCFS)</p><p> 短進(jìn)程優(yōu)先(非搶占和搶占)算法(SPF)</p><p><b> 高響應(yīng)比優(yōu)先算法</b></p><p><b> 時間片輪轉(zhuǎn)算法</b></p><p> 我選出其中三種即先到先服務(wù),短進(jìn)程優(yōu)先(2種)和時間片輪轉(zhuǎn)算法進(jìn)行C語言描&
8、lt;/p><p> 述以加深對這三種算法的理解。</p><p> 3.2進(jìn)程調(diào)度算法模擬設(shè)計的環(huán)境</p><p> VC++6.0及CodeBlocks,32位計算機WIN7操作系統(tǒng)。</p><p><b> 3.3流程圖</b></p><p><b> 定義進(jìn)程結(jié)構(gòu)體:
9、</b></p><p> struct Pro{</p><p> int num;//進(jìn)程號</p><p> int time_in;//進(jìn)程到達(dá)時間</p><p> int work_time;//進(jìn)程服務(wù)時間</p><p> int btime;//用于搶占式進(jìn)程優(yōu)先記錄該進(jìn)程
10、開始時間</p><p> int l_w_time;//用于搶占式進(jìn)程優(yōu)先記錄剩余服務(wù)時間</p><p> int end_time; //記錄該進(jìn)程結(jié)束時間,(需要時時監(jiān)測)</p><p> int judge;//用于需要時的標(biāo)記</p><p> }pro[10];//進(jìn)程結(jié)構(gòu)體</p><
11、p><b> 1先到先服務(wù)</b></p><p> 算法描述:把所有進(jìn)程按到達(dá)先后排序,每次取最先到的進(jìn)程執(zhí)行后淘汰,再取下一個,直到所有進(jìn)程調(diào)度完畢。</p><p><b> 主要代碼:</b></p><p> void FCFS() //先到先服務(wù)</p><p><b
12、> {</b></p><p> char s[] = {"先到先服務(wù)"};</p><p> printmat(s);</p><p><b> PT;</b></p><p><b> int i, j;</b></p><p&
13、gt;<b> int min;</b></p><p> int t = pro_num;</p><p> int begin_time = 0x7fff;</p><p> for(i = 1; i <= pro_num; i++)</p><p><b> {</b><
14、/p><p> if(pro[i].time_in < begin_time)</p><p> begin_time = pro[i].time_in;</p><p> pro[i].judge = 0;//所有進(jìn)程號查找標(biāo)志置0,表示還未查找</p><p><b> }</b></p>
15、<p> while(t--)</p><p><b> {</b></p><p> for(i = 1; i <= pro_num; i++)</p><p><b> {</b></p><p> if(pro[i].judge==0)</p><
16、;p><b> {</b></p><p> min = i;//設(shè)其為目前最早到達(dá)的時間</p><p> for(j = i+1; j <= pro_num; j++)</p><p><b> {</b></p><p> if(pro[j].judge == 0 &a
17、mp;& pro[j].time_in <= pro[min].time_in)//該進(jìn)程號若還未被查找且小于預(yù)設(shè)</p><p> min = j;</p><p><b> }</b></p><p> pro[min].judge = 1;//該進(jìn)程號被查找過</p><p> pr
18、intf(Format2,pro[min].num,pro[min].time_in,pro[min].work_time,</p><p> begin_time,begin_time+pro[min].work_time,begin_time+pro[min].work_time-pro[min].time_in);</p><p> begin_time += pro[min].
19、work_time;</p><p><b> puts("");</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p><p>
20、; printmat(s);</p><p><b> puts("");</b></p><p><b> }</b></p><p><b> 程序截圖:</b></p><p><b> 2段進(jìn)程優(yōu)先非搶占</b><
21、;/p><p> 算法描述:每次選出最短的進(jìn)程進(jìn)行調(diào)度,調(diào)度完畢則淘汰,直到所有進(jìn)程都調(diào)度完畢;</p><p> void SJF() //短進(jìn)程優(yōu)先(非搶占)</p><p><b> {</b></p><p> char s[] = "非搶占短進(jìn)程優(yōu)先";</p><
22、p> printmat(s);</p><p><b> PT;</b></p><p> struct Pro *p,*q,*head;</p><p> int t_num,t_work_time,t_time_in;</p><p> head = &pro[1];</p>&
23、lt;p> /************************按所有進(jìn)程到達(dá)時間排序*************/</p><p><b> p = head;</b></p><p> while(p - head < pro_num)</p><p><b> {</b></p><
24、;p> for(q = p+1; q-head < pro_num; q++)</p><p><b> {</b></p><p> if(q->time_in < p->time_in || (q->work_time < p->work_time && q->time_in == p-&
25、gt;time_in))</p><p><b> {</b></p><p> t_num = p->num,t_time_in = p->time_in,t_work_time = p->work_time;</p><p> p->num = q->num,p->time_in = q->t
26、ime_in,p->work_time = q->work_time;</p><p> q->num = t_num, q->time_in = t_time_in,q->work_time = t_work_time;</p><p><b> }</b></p><p><b> }</
27、b></p><p><b> p++;</b></p><p><b> }</b></p><p> /*************************************************************/</p><p> /**********找出第一個執(zhí)
28、行的進(jìn)程,即最先到達(dá)的最短進(jìn)程*********/</p><p> int time = 0;</p><p><b> p = head;</b></p><p> for(q = head; q < head + pro_num; q++)</p><p><b> {</b>&
29、lt;/p><p> q->judge = 0;</p><p> if(q->time_in < p->time_in)</p><p><b> p = q;</b></p><p> if(q->time_in == p->time_in && q->w
30、ork_time < p->work_time)</p><p><b> p = q;</b></p><p><b> }</b></p><p> int cnt = pro_num;</p><p><b> p = head;</b></p&
31、gt;<p> while(cnt--)</p><p><b> {</b></p><p> time = time < p->time_in ? p->time_in:time;</p><p> p->judge = 1;</p><p> p->begin_
32、time = time;</p><p> time += p->work_time;</p><p> p->end_time = time;</p><p> for(q = head; q < head + pro_num; q++)</p><p><b> {</b></p>
33、;<p> if(p->judge == 1 && q->judge == 0)</p><p><b> p = q;</b></p><p> else if(p->judge == 0 &&(q->work_time < p->work_time))</p>&
34、lt;p><b> {</b></p><p><b> p = q;</b></p><p><b> }</b></p><p><b> }</b></p><p><b> }</b></p>&
35、lt;p> for(p = head; p < head+pro_num; p++)</p><p><b> {</b></p><p> printf(Format2,p->num,p->time_in,p->work_time,p->begin_time,p->end_time,p->end_time-p-&
36、gt;time_in);</p><p><b> puts("");</b></p><p><b> }</b></p><p> printmat(s);</p><p><b> puts("");</b></p&g
37、t;<p><b> }</b></p><p> 3短進(jìn)程優(yōu)先(搶占)</p><p> 算法描述:按時間疊加,當(dāng)新進(jìn)程到達(dá)時,判斷如果比當(dāng)前執(zhí)行的進(jìn)程短,則發(fā)生搶占,執(zhí)行完的淘汰,直到所有進(jìn)程都調(diào)度完畢。</p><p> int find(int pp,int time)</p><p>&l
38、t;b> {</b></p><p><b> int i;</b></p><p> for(i = 1; i <= pro_num; i++)</p><p><b> {</b></p><p> if(pro[pp].l_w_time == 0 ||( pr
39、o[i].l_w_time != 0 && pro[i].l_w_time < pro[pp].l_w_time && time >= pro[i].time_in))</p><p><b> pp = i;</b></p><p><b> }</b></p><p>
40、 return pp;</p><p><b> }</b></p><p> void test()</p><p><b> {</b></p><p><b> int i;</b></p><p> for(i = 1; i <=
41、 pro_num; i++)</p><p><b> {</b></p><p> printf(Format2,pro[i].num,pro[i].time_in,pro[i].work_time,pro[i].btime,pro[i].end_time,pro[i].end_time-pro[i].time_in);</p><p>
42、<b> puts("");</b></p><p><b> }</b></p><p><b> }</b></p><p> void SJF2()//搶占式短進(jìn)程優(yōu)先</p><p><b> {</b></p
43、><p> char s[] = {"搶占式短進(jìn)程優(yōu)先"};</p><p> printmat(s);</p><p><b> PT;</b></p><p><b> int i;</b></p><p> struct Pro *p,*q;/
44、/ 先對到達(dá)時間進(jìn)行排序//</p><p> struct Pro *head = &pro[1];</p><p> int t_num, t_time_in,t_work_time;</p><p> int time_cnt = 0,time;</p><p> p = head = &pro[1];</
45、p><p> while(p - head < pro_num)</p><p><b> {</b></p><p> for(q = p+1; q-head < pro_num; q++)</p><p><b> {</b></p><p> if(q
46、->time_in < p->time_in)</p><p><b> {</b></p><p> t_num = p->num,t_time_in = p->time_in,t_work_time = p->work_time;</p><p> p->num = q->num,p-&
47、gt;time_in = q->time_in,p->work_time = q->work_time;</p><p> q->num = t_num, q->time_in = t_time_in,q->work_time = t_work_time;</p><p><b> }</b></p><p&
48、gt;<b> }</b></p><p><b> p++;</b></p><p><b> }</b></p><p> for(i = 1; i <= pro_num; i++)</p><p><b> {</b></p&
49、gt;<p> pro[i].l_w_time = pro[i].work_time;</p><p> time_cnt += pro[i].work_time;</p><p><b> }</b></p><p> int pp = 1;</p><p> time = pro[pp].ti
50、me_in;</p><p> while(time_cnt--)</p><p><b> {</b></p><p> pro[pp].l_w_time--;</p><p><b> time++;</b></p><p> if(pro[pp].l_w_ti
51、me==0){pro[pp].end_time = time;}else;</p><p> if(pro[pp].btime == 0 && pro[pp].time_in != 0)pro[pp].btime = time-1;else;</p><p> pp = find(pp,time);</p><p><b> }<
52、;/b></p><p><b> test();</b></p><p> printmat(s);</p><p><b> puts("");</b></p><p><b> }</b></p><p> 4時
53、間片輪轉(zhuǎn)(以單位1為例)</p><p> 取當(dāng)前已經(jīng)到達(dá)的進(jìn)程,執(zhí)行一個時間片,跳轉(zhuǎn)至下一個已經(jīng)到達(dá)的進(jìn)程,再執(zhí)行一個時間片,直到所有進(jìn)程都調(diào)度完畢。</p><p> void TROT()</p><p><b> {</b></p><p> char *s = "時間片輪轉(zhuǎn)算法";&
54、lt;/p><p> printmat(s);</p><p><b> PT;</b></p><p> struct Pro *p,*q,*head;</p><p> int t_num,t_time_in,t_work_time;</p><p> head = &pro[1
55、];</p><p><b> p = head;</b></p><p> /************************給所有進(jìn)程按到達(dá)時間排序*************/</p><p> while(p - head < pro_num)</p><p><b> {</b>
56、;</p><p> for(q = p+1; q-head < pro_num; q++)</p><p><b> {</b></p><p> if(q->time_in < p->time_in)</p><p><b> {</b></p>&
57、lt;p> t_num = p->num,t_time_in = p->time_in,t_work_time = p->work_time;</p><p> p->num = q->num,p->time_in = q->time_in,p->work_time = q->work_time;</p><p> q-&g
58、t;num = t_num, q->time_in = t_time_in,q->work_time = t_work_time;</p><p><b> }</b></p><p><b> }</b></p><p><b> p++;</b></p><p
59、><b> }</b></p><p> /*************************************************************/</p><p> int time = pro[1].time_in;</p><p> for(p = head; p < head+pro_num; p
60、++){p->judge = 0;p->left_work = p->work_time;}</p><p> int flag = 1;</p><p> for(p = head; flag; p++)</p><p><b> {</b></p><p> if(p->time_i
61、n <= time && p->left_work > 0)</p><p><b> {</b></p><p> p->left_work--;</p><p> if(p->judge == 0){p->judge = 1; p->begin_time = time;}&l
62、t;/p><p> if(p->left_work == 0)p->end_time = time+1;</p><p><b> }</b></p><p> else continue;</p><p><b> time++;</b></p><p>
63、 for(q = head; q < head+pro_num; q++)</p><p><b> {</b></p><p> if(q->left_work!=0)break;</p><p><b> }</b></p><p> if(q == head + pro
64、_num)flag = 0;</p><p> if(p == head + pro_num - 1)//設(shè)從開頭再開始找</p><p> p = head-1;</p><p><b> }</b></p><p> for(q = head; q < head + pro_num; q++)</
65、p><p><b> {</b></p><p> printf(Format2,q->num,q->time_in,q->work_time,q->begin_time,q->end_time,q->end_time-q->time_in);</p><p><b> puts("
66、;");</b></p><p><b> }</b></p><p> printmat(s);</p><p><b> }</b></p><p><b> 5高響應(yīng)比優(yōu)先</b></p><p> 先對所有進(jìn)程排序
67、,已經(jīng)到達(dá)的進(jìn)程,每次選取響應(yīng)比最高的進(jìn)程進(jìn)行調(diào)度,直到所有進(jìn)程調(diào)度完畢。</p><p> void FPF()</p><p><b> {</b></p><p> char *s = "高響應(yīng)比優(yōu)先算法";</p><p> char *ss = "*************
68、***";</p><p> printmat(s);</p><p><b> PT;</b></p><p> struct Pro *p,*q,*head;</p><p> int t_num,t_time_in,t_work_time;</p><p> head =
69、 &pro[1];</p><p><b> p = head;</b></p><p> /************************給所有進(jìn)程按到達(dá)時間排序*************/</p><p> while(p - head < pro_num)</p><p><b>
70、 {</b></p><p> for(q = p+1; q-head < pro_num; q++)</p><p><b> {</b></p><p> if(q->time_in < p->time_in)</p><p><b> {</b>&l
71、t;/p><p> t_num = p->num,t_time_in = p->time_in,t_work_time = p->work_time;</p><p> p->num = q->num,p->time_in = q->time_in,p->work_time = q->work_time;</p><
72、p> q->num = t_num, q->time_in = t_time_in,q->work_time = t_work_time;</p><p><b> }</b></p><p><b> }</b></p><p><b> p++;</b></p
73、><p><b> }</b></p><p> /*************************************************************/</p><p> int time = pro[1].time_in;</p><p> int cnt = pro_num;</p&
74、gt;<p> for(p = head; p < head+pro_num; p++){p->judge = 0;p->left_work = p->work_time;}</p><p><b> p = head;</b></p><p> while(cnt--)//查找、打印cnt次</p>&l
75、t;p><b> {</b></p><p><b> p = head;</b></p><p><b> while(1)</b></p><p><b> {</b></p><p> if(p->judge == 0) bre
76、ak;</p><p><b> else p++;</b></p><p><b> }</b></p><p> time = time < p->time_in?p->time_in:time;</p><p> for(q = head; q < head+p
77、ro_num; q++)</p><p><b> {</b></p><p> if(q->judge == 0 && time >= q->time_in && (time-q->time_in)*p->work_time>(time-p->time_in)/q->work_tim
78、e)</p><p><b> p = q;</b></p><p><b> }</b></p><p> p -> judge = 1;</p><p> p->begin_time = time;</p><p> time += p->wo
79、rk_time;</p><p> p->end_time = time;</p><p> printf(Format2,p->num,p->time_in,p->work_time,p->begin_time,p->end_time,p->end_time - p->time_in);</p><p><
80、b> puts("");</b></p><p><b> }</b></p><p> printmat(ss);</p><p><b> }</b></p><p><b> 4總結(jié):</b></p><
81、p> 在本次課程設(shè)計過程中,我碰到不少程序調(diào)試的問題,但通過不懈努力一一解決了,從中我也學(xué)到了很多調(diào)試技巧,從而提升了自己在以后程序編寫中的技能。</p><p> 另外,進(jìn)程調(diào)度算法,雖然不是很難,但是再寫一次,能加深對算法的理解和運用,好處還是很多的。</p><p><b> 參考文獻(xiàn):</b></p><p> 《操作系統(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)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 操作系統(tǒng)課程設(shè)計——進(jìn)程調(diào)度模擬算法
- 進(jìn)程調(diào)度算法 操作系統(tǒng)課程設(shè)計
- 操作系統(tǒng)課程設(shè)計--進(jìn)程調(diào)度算法
- 操作系統(tǒng)課程設(shè)計---進(jìn)程調(diào)度算法
- 進(jìn)程調(diào)度算法操作系統(tǒng)課程設(shè)計
- 操作系統(tǒng)課程設(shè)計--進(jìn)程調(diào)度算法
- 操作系統(tǒng)課程設(shè)計-進(jìn)程調(diào)度模擬
- 進(jìn)程調(diào)度算法操作系統(tǒng)課程設(shè)計 (2)
- 操作系統(tǒng)_進(jìn)程調(diào)度算法課程設(shè)計報告
- 操作系統(tǒng)課程設(shè)計---進(jìn)程調(diào)度模擬設(shè)計
- 操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計
- 操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計
- 操作系統(tǒng)課程設(shè)計---進(jìn)程調(diào)度子系統(tǒng)模擬實現(xiàn)
- 操作系統(tǒng)課程設(shè)計---多級反饋隊列進(jìn)程調(diào)度算法
- 操作系統(tǒng)進(jìn)程調(diào)度課程設(shè)計報告
- 操作系統(tǒng)模擬進(jìn)程課程設(shè)計
- 操作系統(tǒng)課程設(shè)計報告---進(jìn)程調(diào)度的模擬實現(xiàn)
- 操作系統(tǒng)課程設(shè)計--進(jìn)程調(diào)度程序設(shè)計
- 操作系統(tǒng)課程設(shè)計---作業(yè)調(diào)度模擬
- 操作系統(tǒng)課程設(shè)計---磁盤調(diào)度算法
評論
0/150
提交評論