進程調(diào)度[C語言實現(xiàn)]

上傳人:馨*** 文檔編號:160969537 上傳時間:2022-10-12 格式:DOC 頁數(shù):11 大?。?2.50KB
收藏 版權(quán)申訴 舉報 下載
進程調(diào)度[C語言實現(xiàn)]_第1頁
第1頁 / 共11頁
進程調(diào)度[C語言實現(xiàn)]_第2頁
第2頁 / 共11頁
進程調(diào)度[C語言實現(xiàn)]_第3頁
第3頁 / 共11頁

下載文檔到電腦,查找使用更方便

15 積分

下載資源

還剩頁未讀,繼續(xù)閱讀

資源描述:

《進程調(diào)度[C語言實現(xiàn)]》由會員分享,可在線閱讀,更多相關(guān)《進程調(diào)度[C語言實現(xiàn)](11頁珍藏版)》請在裝配圖網(wǎng)上搜索。

1、 .wd.#include#include#includetypedef struct ProcessNode / 進程結(jié)點的 根本構(gòu)造 char name; /進程名int service_time; /服務(wù)時間int arrive_time; /到達時間int priority; /優(yōu)先級struct FCFS_time /先到先服務(wù)int finish_time; /完成時間 int turnaround_time; /周轉(zhuǎn)時間float weigtharound_time;/帶權(quán)周轉(zhuǎn)時間FCFS_time; struct SJF_time /短作業(yè)優(yōu)先int finish_time;

2、int turnaround_time; float weigtharound_time;int flag;SJF_time; struct RR_time /時間片輪轉(zhuǎn)的結(jié)點int finish_time; int turnaround_time; float weigtharound_time;int flag_time;/賦值為進程的服務(wù)時間,為0則進程完成RR_time; struct Pri_time /優(yōu)先權(quán)非搶占式int finish_time; int turnaround_time; float weigtharound_time;Pri_time;struct Proces

3、sNode*next;ProcessNode,*Linklist;void main() int choice; Linklist p,head; Linklist read_information();Linklist FCFS_scheduling(Linklist head); Linklist SJF_scheduling(Linklist head); Linklist RR_scheduling(Linklist head); Linklist Pri_scheduling(Linklist head); head=read_information();/讀入進程的 根本信息do

4、p=head-next; printf(n);printf(*進程初始信息輸出* n); /輸出初始化后的進程 根本信息printf(n);printf(進程名稱 ); printf(到達時間 ); printf(服務(wù)時間 ); printf(優(yōu)先級 ); printf(n);while(p) printf( %c ,p-name); printf( %d ,p-arrive_time); printf( %d ,p-service_time); printf( %d ,p-priority); printf(n); p=p-next;printf(n); printf(* n);/輸出進程的

5、調(diào)用選擇項printf(n);printf(1、FCFS-先到先服務(wù)n);printf(2、SJF-短作業(yè)優(yōu)先n);printf(3、RR-時間片輪轉(zhuǎn)n);printf(4、Pri-優(yōu)先權(quán)調(diào)度n); printf(5、退出n);printf(n);printf(* n);printf(n);printf(請在15之間選擇: );scanf(%d,&choice);printf(n); printf(n); switch(choice) case 1: FCFS_scheduling(head); break; case 2: SJF_scheduling(head); break; case

6、3: RR_scheduling(head); break; case 4: Pri_scheduling(head); break; / case 5: exit(); while(choice!=5);Linklist read_information()/進程讀入函數(shù) int i; intnum; / ProcessNode ;Linklist pro;Linklist p; Linklist head; printf(n); printf(*進程調(diào)度算法* n);printf(n);printf(請輸入進程的個數(shù):); scanf(%d,&num);printf(n);printf(*

7、初始化信息* n);printf(n); head=(Linklist)malloc(sizeof(ProcessNode);/頭結(jié)點head-next=NULL;p=head; for(i=1;iname);printf( 到達時間: );scanf(%d,&pro-arrive_time);printf( 服務(wù)時間: ); scanf(%d,&pro-service_time);printf( 優(yōu)先級: );scanf(%d,&pro-priority); /pro-next=head-next; head-next=pro;/逆序建鏈 p-next=pro; p=pro;/順序建鏈/p+

8、;pro-next=NULL; printf(n); return head; Linklist FCFS_scheduling(Linklist head)/先到先服務(wù)算法函數(shù) Linklist p; Linklist q;/指向前一進程 p=head-next; while(p) /初始化進程的完成時間、周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間,初值均賦為0 p-FCFS_time.finish_time=0; p-FCFS_time.turnaround_time=0; p-FCFS_time.weigtharound_time=0; p=p-next; p=q=head-next; p-FCFS_tim

9、e.finish_time=p-arrive_time;/防止第一個進程到達時間不為0 while(p) if(p-arrive_timeFCFS_time.finish_time)/下一進程已到達,在等待中 p-FCFS_time.finish_time=(p-service_time)+(q-FCFS_time.finish_time);/服務(wù)時間 p-FCFS_time.turnaround_time=(p-FCFS_time.finish_time)-(p-arrive_time);/周轉(zhuǎn)時間 p-FCFS_time.weigtharound_time=(float)(p-FCFS_t

10、ime.turnaround_time)/(p-service_time);/帶權(quán)周轉(zhuǎn)時間 else p-FCFS_time.finish_time=p-service_time+p-arrive_time;/服務(wù)時間 p-FCFS_time.turnaround_time=(p-FCFS_time.finish_time)-(p-arrive_time);/周轉(zhuǎn)時間 p-FCFS_time.weigtharound_time=(float)(p-FCFS_time.turnaround_time)/(p-service_time);/帶權(quán)周轉(zhuǎn)時間 q=p; p=p-next; p=head-

11、next; printf(* FCFS * n);/輸出先到先服務(wù)調(diào)度后的進程信息printf(n);printf(進程名稱 ); printf(到達時間 ); printf(服務(wù)時間 ); printf(優(yōu)先級 );printf(完成時間 );printf(周轉(zhuǎn)時間 ); printf(帶權(quán)周轉(zhuǎn)時間 ); printf(n); while(p) printf( %c ,p-name);printf( %d ,p-arrive_time); printf( %d ,p-service_time); printf( %d ,p-priority); printf( %d,p-FCFS_time.

12、finish_time); printf( %d,p-FCFS_time.turnaround_time); printf( %0.2f,p-FCFS_time.weigtharound_time); printf(n);p=p-next; printf(n); printf(* n); printf(n); return head;Linklist SJF_scheduling(Linklist head)/短作業(yè)優(yōu)先算法 Linklist p,r;Linklist q;/指向前一進程結(jié)點 int num=0;/記錄進程個數(shù) int add_flag=0;/進程完成服務(wù)個數(shù)int servi

13、ce_time_min;int arrive_time;int k;p=head-next;/首元結(jié)點 while(p) /初始化進程的完成時間、周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間,初值均賦為0 p-SJF_time.finish_time=0; p-SJF_time.turnaround_time=0; p-SJF_time.weigtharound_time=0; p-SJF_time.flag=0; +num; q=p; p=p-next; q-next=head-next;/將創(chuàng)立的進程隊列變?yōu)檠h(huán)隊列 p=head-next;q=p;p-SJF_time.finish_time=p-arrive

14、_time+p-service_time; p-SJF_time.turnaround_time=(p-SJF_time.finish_time)-(p-arrive_time);/周轉(zhuǎn)時間 p-SJF_time.weigtharound_time=(float)(p-SJF_time.turnaround_time)/(p-service_time);/帶權(quán)周轉(zhuǎn)時間q-SJF_time.finish_time=p-SJF_time.finish_time; p-SJF_time.flag=1;add_flag=1;p=p-next; do if(p-SJF_time.flag=1)p=p-n

15、ext; else if(p-arrive_time)(q-SJF_time.finish_time) service_time_min=p-service_time; arrive_time=p-arrive_time; while(p-arrive_time=arrive_time&p-SJF_time.flag=0)/尋找最短的作業(yè) if(p-next-service_time)service_time)service_time_min=p-next-service_time;p=p-next; else p=p-next; p=q-next; r=q; while(p-service_

16、time!=service_time_min)p=p-next;/指針指向最短作業(yè) p-SJF_time.finish_time=p-arrive_time+p-service_time; p-SJF_time.flag=1;+add_flag; p-SJF_time.turnaround_time=(p-SJF_time.finish_time)-(p-arrive_time);/周轉(zhuǎn)時間 p-SJF_time.weigtharound_time=(float)(p-SJF_time.turnaround_time)/(p-service_time);/帶權(quán)周轉(zhuǎn)時間 q=p;p=r-next

17、; else k=0; service_time_min=p-service_time; while(p-arrive_time)SJF_time.finish_time)&kSJF_time.flag=1) p=p-next;+k; else if(p-SJF_time.flag!=1)&(p-service_time)service_time; p=p-next;+k; else p=p-next;+k; p=q-next; r=q; while(p-service_time!=service_time_min)p=p-next;/指針指向最短作業(yè) p-SJF_time.finish_ti

18、me=q-SJF_time.finish_time+p-service_time; p-SJF_time.turnaround_time=(p-SJF_time.finish_time)-(p-arrive_time);/周轉(zhuǎn)時間 p-SJF_time.weigtharound_time=(float)(p-SJF_time.turnaround_time)/(p-service_time);/帶權(quán)周轉(zhuǎn)時間 p-SJF_time.flag=1;+add_flag; /q=p;p=p-next; q=p;p=r-next; while(add_flag!=num); for(p=head-nex

19、t;num0;num-)/斷開循環(huán)隊列 q=p;p=p-next;q-next=NULL; p=head-next;/指向鏈首,輸出短作業(yè)調(diào)度后的進程信息 printf(n); printf(* SJF * n);printf(n);printf(進程名稱 ); printf(到達時間 ); printf(服務(wù)時間 ); printf(優(yōu)先級 );printf(完成時間 );printf(周轉(zhuǎn)時間 ); printf(帶權(quán)周轉(zhuǎn)時間 ); printf(n); while(p) printf( %c ,p-name);printf( %d ,p-arrive_time); printf( %d

20、,p-service_time); printf( %d ,p-priority); printf( %d,p-SJF_time.finish_time); printf( %d,p-SJF_time.turnaround_time); printf( %0.2f,p-SJF_time.weigtharound_time); printf(n);p=p-next; printf(n); printf(* n); printf(n); return head;Linklist RR_scheduling(Linklist head)/時間片輪轉(zhuǎn)算法Linklist q;/指向前一進程結(jié)點 Lin

21、klist p;int q_time;/時間片大小int num=0;/記錄進程個數(shù) int add_flag=0;/進程完成服務(wù)個數(shù) printf(請輸入時間片的大小: );scanf(%d,&q_time); p=head-next; while(p) /初始化進程的完成時間、周轉(zhuǎn)時間、帶權(quán)周轉(zhuǎn)時間,初值均賦為0 p-RR_time.finish_time=0; p-RR_time.turnaround_time=0; p-RR_time.weigtharound_time=0; p-RR_time.flag_time=p-service_time; q=p; +num; p=p-next

22、; q-next=head-next;/將創(chuàng)立的進程隊列變?yōu)檠h(huán)隊列 p=head-next; q-RR_time.finish_time=p-arrive_time;do /* printf(n); printf(* n); printf( %c ,p-name); printf( %d ,p-arrive_time); printf( %d ,p-service_time); printf( %d ,p-priority); printf( %d,p-RR_time.finish_time); printf(n); */ if(p-RR_time.flag_time)(q_time)/服務(wù)

23、時間大于時間片 p-RR_time.finish_time=(q-RR_time.finish_time)+(q_time);/累加完成時間 p-RR_time.flag_time=(p-RR_time.flag_time)-(q_time); if(p-next-arrive_time)RR_time.finish_time)/有進程等待 q=p;p=p-next; else /當(dāng)前進程未完成,無進程等待,指針不向后移 q=p; else if(p-RR_time.flag_time)=0)/進程已經(jīng)完成 p=p-next; else p-RR_time.finish_time=(q-RR_

24、time.finish_time)+(p-RR_time.flag_time); p-RR_time.flag_time=0; +add_flag; p-RR_time.turnaround_time=(p-RR_time.finish_time)-(p-arrive_time);/周轉(zhuǎn)時間 p-RR_time.weigtharound_time=(float)(p-RR_time.turnaround_time)/(p-service_time);/帶權(quán)周轉(zhuǎn)時間 if(p-next-arrive_time)RR_time.finish_time)/有進程等待 q=p;p=p-next; el

25、se /當(dāng)前進程完成,無進程等待,指針向后移/ q=p; q-RR_time.finish_time=p-next-arrive_time; p=p-next;q=p;q-RR_time.finish_time=p-arrive_time; while(add_flag!=num);/while(p-RR_time.flag=0); for(p=head-next;num0;num-)/斷開循環(huán)隊列 q=p;p=p-next;q-next=NULL; p=head-next;/指向鏈首,輸出時間片輪轉(zhuǎn)調(diào)度后的進程信息 printf(n); printf(* RR * n);printf(n);

26、printf(進程名稱 ); printf(到達時間 ); printf(服務(wù)時間 ); printf(優(yōu)先級 );printf(完成時間 );printf(周轉(zhuǎn)時間 ); printf(帶權(quán)周轉(zhuǎn)時間 ); printf(n); while(p) printf( %c ,p-name);printf( %d ,p-arrive_time); printf( %d ,p-service_time); printf( %d ,p-priority); printf( %d,p-RR_time.finish_time); printf( %d,p-RR_time.turnaround_time); printf( %0.2f,p-RR_time.weigtharound_time); printf(n);p=p-next; printf(n); printf(* n); printf(n); return head;Linklist Pri_scheduling(Linklist head)/優(yōu)先權(quán)調(diào)度算法 printf( 優(yōu)先權(quán)調(diào)度算法 n); return head;

展開閱讀全文
溫馨提示:
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)容負責(zé)。
6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

相關(guān)資源

更多
正為您匹配相似的精品文檔
關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!