操作系統(tǒng)課程設計——進程調度模擬算法5種_第1頁
操作系統(tǒng)課程設計——進程調度模擬算法5種_第2頁
操作系統(tǒng)課程設計——進程調度模擬算法5種_第3頁
操作系統(tǒng)課程設計——進程調度模擬算法5種_第4頁
操作系統(tǒng)課程設計——進程調度模擬算法5種_第5頁
已閱讀5頁,還剩11頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

1、福建農林大學計算機與信息學院課程設計報告課程名稱:操作系統(tǒng)實習題目:進程調度算法模擬姓 名:*系:計算機專 業(yè):計算機科學與技術年 級:2011級學 號:*指導教師:*職 稱:*2014年1月16日福建農林大學計算機與信息學院信息工程類課程設計報告結果評定評語:成績:指導教師簽字:評定日期:目 錄1.進程調度算法模擬課程設計的目的12.進程調度算法模擬課程設計的要求13.進程調度算法模擬課程設計報告內容131前言 132進程調度算法模擬設計的環(huán)境 1 33系統(tǒng)流程圖及各模塊 24總結 18 參考文獻19 參考網站19進程調度算法模擬1.進程調度算法模擬課程設計的目的和意義2013-2014學年

2、,在學習了操作系統(tǒng)這門課后,對當中的進程調度算法產生了濃厚的興趣。各種調度算法,理論上比較好理解。為了加深印象,我決定把各種調度算法用C語言寫出來。于是便產生這份從頭到尾都讓我絞盡腦汁的課程設計。做這份課程設計,對從事系統(tǒng)開發(fā)的人員來說,是必要的,可以在一定程度上為自己以后的發(fā)展鋪路。雖然用處不是特別明顯,但對加深系統(tǒng)調用算法的理解無疑用處是巨大的。2.進程調度算法模擬課程設計的要求1. 用C語言寫出至少兩種進程調度算法。2. 畫出大概流程圖。3. 對算法過程出現的bug進行調試。4. 展示最后的算法結果3.1前言:目前比較常見的幾種進程調度算法有:1. 先到先服務(FCFS)2. 短進程優(yōu)先

3、(非搶占和搶占)算法(SPF)3. 高響應比優(yōu)先算法4. 時間片輪轉算法我選出其中三種即先到先服務,短進程優(yōu)先(2種)和時間片輪轉算法進行C語言描述以加深對這三種算法的理解。3.2進程調度算法模擬設計的環(huán)境VC+6.0及CodeBlocks,32位計算機WIN7操作系統(tǒng)。3.3流程圖定義進程結構體:struct Proint num;/進程號int time_in;/進程到達時間int work_time;/進程服務時間 int btime;/用于搶占式進程優(yōu)先記錄該進程開始時間 int l_w_time;/用于搶占式進程優(yōu)先記錄剩余服務時間 int end_time; /記錄該進程結束時間,

4、(需要時時監(jiān)測)int judge;/用于需要時的標記pro10;/進程結構體1先到先服務算法描述:把所有進程按到達先后排序,每次取最先到的進程執(zhí)行后淘汰,再取下一個,直到所有進程調度完畢。主要代碼:void FCFS() /先到先服務char s = "先到先服務"printmat(s); PT;int i, j;int min;int t = pro_num;int begin_time = 0x7fff;for(i = 1; i <= pro_num; i+) if(proi.time_in < begin_time) begin_time = proi.

5、time_in;proi.judge = 0;/所有進程號查找標志置0,表示還未查找 while(t-) for(i = 1; i <= pro_num; i+) if(proi.judge=0) min = i;/設其為目前最早到達的時間 for(j = i+1; j <= pro_num; j+) if(proj.judge = 0 && proj.time_in <= promin.time_in)/該進程號若還未被查找且小于預設 min = j; promin.judge = 1;/該進程號被查找過 printf(Format2,promin.num,

6、promin.time_in,promin.work_time, begin_time,begin_time+promin.work_time,begin_time+promin.work_time-promin.time_in); begin_time += promin.work_time; puts(""); printmat(s);puts("");程序截圖:2段進程優(yōu)先非搶占算法描述:每次選出最短的進程進行調度,調度完畢則淘汰,直到所有進程都調度完畢;void SJF() /短進程優(yōu)先(非搶占) char s = "非搶占短進程優(yōu)先&

7、quot; printmat(s); PT;struct Pro *p,*q,*head;int t_num,t_work_time,t_time_in;head = &pro1;/*按所有進程到達時間排序*/p = head;while(p - head < pro_num) for(q = p+1; q-head < pro_num; q+) if(q->time_in < p->time_in | (q->work_time < p->work_time && q->time_in = p->time_i

8、n) t_num = p->num,t_time_in = p->time_in,t_work_time = p->work_time; p->num = q->num,p->time_in = q->time_in,p->work_time = q->work_time; q->num = t_num, q->time_in = t_time_in,q->work_time = t_work_time; p+; /*/*找出第一個執(zhí)行的進程,即最先到達的最短進程*/int time = 0;p = head;for(q

9、= head; q < head + pro_num; q+)q->judge = 0;if(q->time_in < p->time_in)p = q;if(q->time_in = p->time_in && q->work_time < p->work_time)p = q;int cnt = pro_num;p = head;while(cnt-)time = time < p->time_in ? p->time_in:time;p->judge = 1;p->begin_tim

10、e = time;time += p->work_time;p->end_time = time;for(q = head; q < head + pro_num; q+)if(p->judge = 1 && q->judge = 0)p = q;else if(p->judge = 0 &&(q->work_time < p->work_time)p = q;for(p = head; p < head+pro_num; p+)printf(Format2,p->num,p->time_i

11、n,p->work_time,p->begin_time,p->end_time,p->end_time-p->time_in);puts("");printmat(s);puts("");3短進程優(yōu)先(搶占)算法描述:按時間疊加,當新進程到達時,判斷如果比當前執(zhí)行的進程短,則發(fā)生搶占,執(zhí)行完的淘汰,直到所有進程都調度完畢。int find(int pp,int time)int i;for(i = 1; i <= pro_num; i+)if(propp.l_w_time = 0 |( proi.l_w_time !

12、= 0 && proi.l_w_time < propp.l_w_time && time >= proi.time_in)pp = i;return pp;void test()int i;for(i = 1; i <= pro_num; i+)printf(Format2,proi.num,proi.time_in,proi.work_time,proi.btime,proi.end_time,proi.end_time-proi.time_in);puts("");void SJF2()/搶占式短進程優(yōu)先char s

13、= "搶占式短進程優(yōu)先"printmat(s); PT;int i; struct Pro *p,*q;/ 先對到達時間進行排序/struct Pro *head = &pro1; int t_num, t_time_in,t_work_time;int time_cnt = 0,time; p = head = &pro1; while(p - head < pro_num) for(q = p+1; q-head < pro_num; q+) if(q->time_in < p->time_in) t_num = p->

14、;num,t_time_in = p->time_in,t_work_time = p->work_time; p->num = q->num,p->time_in = q->time_in,p->work_time = q->work_time; q->num = t_num, q->time_in = t_time_in,q->work_time = t_work_time; p+; for(i = 1; i <= pro_num; i+)proi.l_w_time = proi.work_time;time_cnt

15、+= proi.work_time;int pp = 1;time = propp.time_in;while(time_cnt-)propp.l_w_time-;time+;if(propp.l_w_time=0)propp.end_time = time;else;if(propp.btime = 0 && propp.time_in != 0)propp.btime = time-1;else;pp = find(pp,time);test();printmat(s);puts("");4時間片輪轉(以單位1為例)取當前已經到達的進程,執(zhí)行一個時間片,

16、跳轉至下一個已經到達的進程,再執(zhí)行一個時間片,直到所有進程都調度完畢。void TROT()char *s = "時間片輪轉算法"printmat(s);PT;struct Pro *p,*q,*head;int t_num,t_time_in,t_work_time;head = &pro1;p = head;/*給所有進程按到達時間排序*/while(p - head < pro_num) for(q = p+1; q-head < pro_num; q+) if(q->time_in < p->time_in) t_num = p

17、->num,t_time_in = p->time_in,t_work_time = p->work_time; p->num = q->num,p->time_in = q->time_in,p->work_time = q->work_time; q->num = t_num, q->time_in = t_time_in,q->work_time = t_work_time; p+; /*/int time = pro1.time_in;for(p = head; p < head+pro_num; p+)p-

18、>judge = 0;p->left_work = p->work_time;int flag = 1;for(p = head; flag; p+)if(p->time_in <= time && p->left_work > 0)p->left_work-;if(p->judge = 0)p->judge = 1; p->begin_time = time;if(p->left_work = 0)p->end_time = time+1;else continue;time+;for(q = he

19、ad; q < head+pro_num; q+)if(q->left_work!=0)break;if(q = head + pro_num)flag = 0;if(p = head + pro_num - 1)/設從開頭再開始找p = head-1;for(q = head; q < head + pro_num; q+)printf(Format2,q->num,q->time_in,q->work_time,q->begin_time,q->end_time,q->end_time-q->time_in);puts("

20、;");printmat(s);5高響應比優(yōu)先先對所有進程排序,已經到達的進程,每次選取響應比最高的進程進行調度,直到所有進程調度完畢。void FPF()char *s = "高響應比優(yōu)先算法"char *ss = "*"printmat(s);PT;struct Pro *p,*q,*head;int t_num,t_time_in,t_work_time;head = &pro1;p = head;/*給所有進程按到達時間排序*/while(p - head < pro_num) for(q = p+1; q-head &l

21、t; pro_num; q+) if(q->time_in < p->time_in) t_num = p->num,t_time_in = p->time_in,t_work_time = p->work_time; p->num = q->num,p->time_in = q->time_in,p->work_time = q->work_time; q->num = t_num, q->time_in = t_time_in,q->work_time = t_work_time; p+; /*/int time = pro1.time_in;int cnt = pro_num;for(p = head; p < head+pro_num; p+)p->judge = 0;p->left_work = p->work_time;p = he

溫馨提示

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

評論

0/150

提交評論