![操作系統(tǒng)課程設(shè)計說明書鄭麗波_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/9/0b632695-a1ef-4572-b97b-ba23cb547bfa/0b632695-a1ef-4572-b97b-ba23cb547bfa1.gif)
![操作系統(tǒng)課程設(shè)計說明書鄭麗波_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/9/0b632695-a1ef-4572-b97b-ba23cb547bfa/0b632695-a1ef-4572-b97b-ba23cb547bfa2.gif)
![操作系統(tǒng)課程設(shè)計說明書鄭麗波_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/9/0b632695-a1ef-4572-b97b-ba23cb547bfa/0b632695-a1ef-4572-b97b-ba23cb547bfa3.gif)
![操作系統(tǒng)課程設(shè)計說明書鄭麗波_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/9/0b632695-a1ef-4572-b97b-ba23cb547bfa/0b632695-a1ef-4572-b97b-ba23cb547bfa4.gif)
![操作系統(tǒng)課程設(shè)計說明書鄭麗波_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/9/0b632695-a1ef-4572-b97b-ba23cb547bfa/0b632695-a1ef-4572-b97b-ba23cb547bfa5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、. . . . 中北大學(xué)操作系統(tǒng)課程設(shè)計說 明 書 學(xué) 院、系:軟件學(xué)院專 業(yè):軟件工程學(xué) 生 姓 名:麗波學(xué) 號:1121011747設(shè) 計 題 目:基于Linux的模擬進程調(diào)度算法的實現(xiàn)起 迄 日 期:2013年11月22日- 2013年12月6日指 導(dǎo) 教 師:康珺 2013 年 12 月 6日1 需求分析在操作系統(tǒng)中,進程調(diào)度實際就是給進程分配存資源,隨著計算機系統(tǒng)的發(fā)展,為了更充分的利用系統(tǒng)資源以與提高計算機的運行效率,因此需要在不同的環(huán)境下采用不同的調(diào)度算法,使得系統(tǒng)具有合理的響應(yīng)時間,就要求系統(tǒng)能按照某種算法,動態(tài)的把處理機分配給就緒隊
2、列中的一個進程,使之執(zhí)行。因此,就需要設(shè)計出幾種不同的算法,通過比較,選出一種最優(yōu)的。本程序主要實現(xiàn)基于linux的進程調(diào)度算法的實現(xiàn)。共實現(xiàn)了三種不同的調(diào)度算法,分別是:先來先服務(wù)調(diào)度算法,短作業(yè)優(yōu)先調(diào)度,高響應(yīng)比調(diào)度算法。在程序的執(zhí)行過程中,可以自主輸入進程的個數(shù)以與進程必要的信息,如:進程的創(chuàng)建時間,服務(wù)時間等,然后通過不同的調(diào)度算法實現(xiàn)進程的調(diào)度,每一種算法都能動態(tài)的演示進程調(diào)度的過程,時間間隔為一秒鐘,并且可以計算出每種調(diào)度算法下的平均周轉(zhuǎn)時間和平均帶權(quán)周轉(zhuǎn)時間,通過排序比較各種調(diào)度算法的優(yōu)劣。2 總體設(shè)計本程序主要分為四大模塊:1. 創(chuàng)建進程:可以手動創(chuàng)建進程,用戶可以自主決定進程
3、的個數(shù),并且在創(chuàng)建進程時自主決定進程名,進程的創(chuàng)建時間以與執(zhí)行時間。2. 幾種不同的調(diào)度算法:分別是先來先服務(wù)調(diào)度算法,短作業(yè)優(yōu)先調(diào)度和高響應(yīng)比調(diào)度算法。3. 顯示結(jié)果函數(shù):在各個調(diào)度算法中,每一步執(zhí)行完后都會以表格的形式顯示出進程的信息,包括:進程名,創(chuàng)建時間,服務(wù)時間,開始執(zhí)行時間,完成時間,周轉(zhuǎn)時間,帶權(quán)周轉(zhuǎn)時間。4. 比較各算法的優(yōu)劣:對平均周轉(zhuǎn)時間和平均帶權(quán)周轉(zhuǎn)時間按照由小到大的順序進行排序比較。結(jié)構(gòu)圖如下:基于linux的進程調(diào)度算法三種調(diào)度算法 顯示結(jié)果 先來先服務(wù) FCFS短作業(yè)優(yōu)先SJF高響應(yīng)比調(diào)度 HHRN存放PCB信息結(jié)構(gòu)體數(shù)組錄入PCB信息比較各算法的優(yōu)劣程序中采用結(jié)構(gòu)
4、體來存儲進程信息,其中包括:進程名,進程的創(chuàng)建時間,服務(wù)時間,執(zhí)行時間,完成時間,周轉(zhuǎn)時間,帶權(quán)周轉(zhuǎn)時間,等待時間,優(yōu)先權(quán),時候完成等,各個進程共同組成一個結(jié)構(gòu)體數(shù)組。數(shù)據(jù)結(jié)構(gòu)如下:struct Pro/進程調(diào)度信息結(jié)構(gòu)體char name;/進程名float creat_time;/創(chuàng)建時間float serve_time;/服務(wù)時間float excute_time;/執(zhí)行時間float finish_time;/完成時間float zhou_time;/周轉(zhuǎn)時間float d_time;/帶權(quán)周轉(zhuǎn)時間float wait_time;/等待時間 float priority;/優(yōu)先權(quán)int
5、 finish;/是否已經(jīng)完成;3詳細(xì)設(shè)計先來先服務(wù)調(diào)度算法:當(dāng)在進程調(diào)度算法中采用該算法時,每次調(diào)度都是從就緒隊列中選擇一個最先進入該隊列的進程,為之分配處理機,使之投入運行,該進程一直到運行完成或是發(fā)生某時間而阻塞后才放棄處理機。核心代碼: int Input(struct Pro a)/輸入函數(shù)int n,i;printf("輸入要創(chuàng)建的進程個數(shù):");scanf("%d",&n);printf("輸入進程名、開始時間和服務(wù)時間:n");getchar();for(i=0;i<n;i+)scanf("%c
6、 %f %f",&,&ai.creat_time,&ai.serve_time);getchar();ai.d_time=0;ai.finish_time=0;return n;void compare() /比較函數(shù) float temp;if(fs>ss)temp=fs;fs=ss;ss=temp;if(fs>hs)temp=fs;fs=hs;hs=temp;if(ss>hs)temp=ss;ss=hs;hs=temp;printf("平均周轉(zhuǎn)時間由小到大以此為: %8.2f %3.2f %3.2fn",
7、fs,ss,hs);if(ft>st)temp=ft;ft=st;st=temp;if(ft>ht)temp=ft;ft=ht;ht=temp;if(st>ht)temp=st;st=ht;ht=temp;printf("平均帶權(quán)周轉(zhuǎn)時間由小到大以此為:%3.2f %3.2f %3.2fn",ft,st,ht);void Display(struct Pro a,int n) /顯示函數(shù)int i;printf("數(shù)據(jù)輸出:n");printf("進程名 創(chuàng)建時間 服務(wù)時間 開始執(zhí)行時間 完成時間 周轉(zhuǎn)時間 帶權(quán)周轉(zhuǎn)時間n&q
8、uot;);for(i=0;i<n;i+)printf(" %c",);printf(" %10.2f",ai.creat_time);printf(" %10.2f",ai.serve_time);printf(" %10.2f",ai.excute_time);printf(" %12.2f",ai.finish_time);printf(" %10.2f",ai.zhou_time);printf(" %13.2f",ai.d_t
9、ime);printf("n");main() int n,k; struct Pro a20,b20,c20; show_welcome(); printf("nn"); n=Input(a);for(k=0;k<19;k+)bk=ak; ck=ak; FCFS(a,n); printf("*n"); SJF(b,n); printf("*n"); HRRN(c,n); printf("對于平均周轉(zhuǎn)時間: 采用FCFS算法為:%3.2f SJF算法為:%3.2f HRRN算法為:%3.2fn&qu
10、ot;,fs,ss,hs); printf("對于平均帶權(quán)周轉(zhuǎn)時間:采用FCFS算法為:%3.2f SJF算法為:%3.2f HRRN算法為:%3.2fn",ft,st,ht); compare();運行結(jié)果:4.心得體會通過這次課設(shè),讓我對進程先來先服務(wù),有了更深入的認(rèn)識!初步理解了操作系統(tǒng)對于進程處理的基本思想!并且對linux操作系統(tǒng)有了初步的了解,學(xué)會了一些基本的操作,在合作過程中,體會到了團體合作的快樂。附:#include<stdio.h>#include<unistd.h> struct Pro/進程調(diào)度信息結(jié)構(gòu)體char name;/
11、進程名float creat_time;/創(chuàng)建時間float serve_time;/服務(wù)時間float excute_time;/執(zhí)行時間float finish_time;/完成時間float zhou_time;/周轉(zhuǎn)時間float d_time;/帶權(quán)周轉(zhuǎn)時間float wait_time;/等待時間 float priority;/優(yōu)先權(quán)int finish;/是否已經(jīng)完成;float Pjzhou_time,Pjd_time; /平均周轉(zhuǎn)時間和平均帶權(quán)時間float s,t; /分別存儲周轉(zhuǎn)時間和帶權(quán)時間的和float fs,ft,ss,st,hs,ht; /分別存儲各算法中的平均
12、周轉(zhuǎn)時間和平均帶權(quán)時間void Display(struct Pro a,int n) ;/顯示函數(shù)void FCFS(struct Pro a,int n)/FCFS算法int i,j;int min=1;/最早到達(dá)int max=1;/最晚到達(dá)int temp=0;/記錄上一次運行進程for(j=0;j<n;j+)min=max;for(i=0;i<n;i+)if(amin.creat_time>ai.creat_time)&&(ai.d_time=0)/選出當(dāng)前未運行進程中到達(dá)時間最短進程 min=i;if(amax.creat_time<ai.c
13、reat_time)&&(ai.d_time=0)/選出當(dāng)前未運行進程中到達(dá)時間最長進程 max=i;if(atemp.finish_time=0)/第一個執(zhí)行進程amin.excute_time=0; amin.finish_time=0+a0.serve_time;elseamin.excute_time=atemp.finish_time; amin.finish_time=amin.excute_time+amin.serve_time;amin.zhou_time=amin.finish_time-amin.creat_time;/周轉(zhuǎn)時間=完成時間-創(chuàng)建時間amin
14、.d_time=amin.zhou_time/amin.serve_time;/帶權(quán)周轉(zhuǎn)時間=周轉(zhuǎn)時間/服務(wù)時間;temp=min; printf("nn");printf("FCFS:n"); Display(a,n);sleep(1); s=0,t=0; for(i=0;i<n;i+) s+=ai.zhou_time; t+=ai.d_time; Pjzhou_time=s/n; Pjd_time=t/n; fs=Pjzhou_time; ft=Pjd_time; printf("n"); printf("平均周轉(zhuǎn)
15、時間 t=%5.3fn平均帶權(quán)周轉(zhuǎn)時間 w=%5.3fn",Pjzhou_time,Pjd_time); printf("n"); printf("n");void SJF(struct Pro a,int n) /SJC算法int i,j;int min=1;int max=1;int temp=0;a0.excute_time=0;a0.finish_time=0+a0.serve_time;a0.zhou_time=a0.finish_time-a0.creat_time;a0.d_time=a0.zhou_time/a0.serve_t
16、ime;for(j=1;j<n;j+)min=max;for(i=1;i<n;i+)if(amin.serve_time>=ai.serve_time)&&(ai.d_time=0)&&(ai.creat_time<=atemp.finish_time)/選出當(dāng)前未運行進程中服務(wù)時間最短進程 min=i;if(amax.serve_time<=ai.serve_time)&&(ai.d_time=0)&&(ai.creat_time<=atemp.finish_time)/選出當(dāng)前未運行進程中服
17、務(wù)時間最長進程 max=i; amin.excute_time=atemp.finish_time;amin.finish_time=amin.excute_time+amin.serve_time;amin.zhou_time=amin.finish_time-amin.creat_time;/周轉(zhuǎn)時間=完成時間-創(chuàng)建時間amin.d_time=amin.zhou_time/amin.serve_time;/帶權(quán)周轉(zhuǎn)時間=周轉(zhuǎn)時間/服務(wù)時間;temp=min; printf("nn");printf("SJF:n"); Display(a,n);sle
18、ep(1); s=0,t=0; for(i=0;i<n;i+) s+=ai.zhou_time; t+=ai.d_time; Pjzhou_time=s/n; Pjd_time=t/n; printf("n"); ss=Pjzhou_time; st=Pjd_time; printf("平均周轉(zhuǎn)時間 t=%5.3fn平均帶權(quán)周轉(zhuǎn)時間 w=%5.3fn",Pjzhou_time,Pjd_time); printf("n"); printf("n");int HRN(struct Pro a,int pre,in
19、t n) /優(yōu)先權(quán)的判斷int current=1,i,j;/* 優(yōu)先權(quán) =(等待時間+服務(wù)時間)/服務(wù)時間*/for(i=0; i<n; i+) ai.wait_time=apre.finish_time-ai.creat_time; /*等待時間 =上一個進程的完成時間-創(chuàng)建時間*/ ai.priority=(ai.wait_time+ai.serve_time)/ai.serve_time;for(i=0; i<n; i+)if(!ai.finish)current=i; /*找到第一個還沒完成的進程*/break;for( j=i; j<n; j+) /*和后面的進程
20、比較*/if( !aj.finish) /* 還沒完成(運行)*/if(acurrent.creat_time<=apre.finish_time) /*如果進程在上一個進程完成之前創(chuàng)建*/if(aj.creat_time<=apre.finish_time && aj.priority>acurrent.priority )current=j;/* 找出創(chuàng)建時間在上一個進程完成之前,優(yōu)先權(quán)高的進程*/else /* 如果進程是在上一個進程完成之后創(chuàng)建*/if(aj.creat_time<acurrent.creat_time)current=j; /*
21、 找出比較早創(chuàng)建的一個*/if(aj.creat_time=acurrent.creat_time) /* 如果同時創(chuàng)建*/if(aj.priority>acurrent.priority)current=j; /*找出服務(wù)時間比較短的一個*/return current;/*返回當(dāng)前進程*/void HRRN( struct Pro a,int n) /最高響應(yīng)比算法int i;int current=0, times=0, pre=0; /當(dāng)前,次數(shù),前一個apre.finish_time=0; for(i=0;i<n;i+) /初始化優(yōu)先權(quán)和完成時間都為0 ai.priori
22、ty=0; ai.finish=0; for(times=0; times<n; times+) /開始執(zhí)行current=HRN(a,pre,n);i=current;if(times=0) / 第一個進程 ai.excute_time=ai.creat_time;ai.finish_time=ai.excute_time+ai.serve_time; ai.zhou_time=ai.serve_time;ai.d_time=1.0; else if(ai.creat_time>apre.finish_time) ai.excute_time=ai.creat_time; els
23、eai.excute_time=apre.finish_time; ai.finish_time=ai.excute_time+ai.serve_time; ai.zhou_time=ai.finish_time-ai.creat_time; ai.d_time=ai.zhou_time/ai.serve_time; ai.finish=1; pre=current;printf("nn"); printf("HRRN:n"); Display(a,n);sleep(1); s=0,t=0; for(i=0;i<n;i+) s+=ai.zhou_t
24、ime; t+=ai.d_time; Pjzhou_time=s/n; Pjd_time=t/n; hs=Pjzhou_time; ht=Pjd_time; printf("n"); printf("平均周轉(zhuǎn)時間 t=%5.3fn平均帶權(quán)周轉(zhuǎn)時間 w=%5.3fn",Pjzhou_time,Pjd_time); printf("n"); printf("n");int Input(struct Pro a)/輸入函數(shù)int n,i;printf("輸入要創(chuàng)建的進程個數(shù):");scanf(&quo
25、t;%d",&n);printf("輸入進程名、開始時間和服務(wù)時間:n");getchar();for(i=0;i<n;i+)scanf("%c %f %f",&,&ai.creat_time,&ai.serve_time);getchar();ai.d_time=0;ai.finish_time=0;return n;void compare() /比較函數(shù) float temp;if(fs>ss)temp=fs;fs=ss;ss=temp;if(fs>hs)temp=fs;fs
26、=hs;hs=temp;if(ss>hs)temp=ss;ss=hs;hs=temp;printf("平均周轉(zhuǎn)時間由小到大以此為: %8.2f %3.2f %3.2fn",fs,ss,hs);if(ft>st)temp=ft;ft=st;st=temp;if(ft>ht)temp=ft;ft=ht;ht=temp;if(st>ht)temp=st;st=ht;ht=temp;printf("平均帶權(quán)周轉(zhuǎn)時間由小到大以此為:%3.2f %3.2f %3.2fn",ft,st,ht);void Display(struct Pro a,int n) /顯示函數(shù)int i;printf("數(shù)據(jù)輸出:n");printf("進程名創(chuàng)建時間服務(wù)時間開始執(zhí)行時間完成時間周轉(zhuǎn)時間帶權(quán)周轉(zhuǎn)時間n");for(i=0;i<n;i+)printf(" %c",);printf(" %10.2f",ai.creat_time);printf(" %10.2f",ai.serve_time);printf(" %10.2f",ai.excute_time);printf(" %12.2f&
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年鐵嶺貨運上崗證考試題
- 2025年唐山c1貨運上崗證模擬考試
- 2024-2025年高中政治課時作業(yè)10新時代的勞動者含解析新人教版必修1
- 2024-2025學(xué)年高中生物課時分層作業(yè)12基因指導(dǎo)蛋白質(zhì)的合成含解析新人教版必修2
- 2024-2025版高中生物2.1.1-2孟德爾遺傳試驗的科學(xué)方法分離規(guī)律試驗練習(xí)含解析中圖版必修2
- 2024-2025學(xué)年高中化學(xué)課時提升作業(yè)十五鹽類的水解含解析新人教版選修4
- 2024-2025學(xué)年八年級物理全冊4.1光的反射練習(xí)含解析新版滬科版
- 2024-2025學(xué)年高中語文7李將軍列傳學(xué)案含解析蘇教版選修史記蚜
- 2024-2025學(xué)年高中生物第2章細(xì)胞的化學(xué)組成第2節(jié)組成細(xì)胞的無機物練習(xí)含解析北師大版必修1
- 我想你的檢討書
- 2025-2030全球廢棄食用油 (UCO) 轉(zhuǎn)化為可持續(xù)航空燃料 (SAF) 的催化劑行業(yè)調(diào)研及趨勢分析報告
- 山東省臨沂市蘭山區(qū)2024-2025學(xué)年七年級上學(xué)期期末考試生物試卷(含答案)
- 湖北省武漢市2024-2025學(xué)年度高三元月調(diào)考英語試題(含答案無聽力音頻有聽力原文)
- 一年級下冊勞動《變色魚》課件
- 商務(wù)星球版地理八年級下冊全冊教案
- 天津市河西區(qū)2024-2025學(xué)年四年級(上)期末語文試卷(含答案)
- 2025年空白離婚協(xié)議書
- 校長在行政會上總結(jié)講話結(jié)合新課標(biāo)精神給學(xué)校管理提出3點建議
- T-CSUS 69-2024 智慧水務(wù)技術(shù)標(biāo)準(zhǔn)
- 2025年護理質(zhì)量與安全管理工作計劃
- 湖南大學(xué) 嵌入式開發(fā)與應(yīng)用(張自紅)教案
評論
0/150
提交評論