進(jìn)程調(diào)C語(yǔ)言實(shí)現(xiàn)_第1頁(yè)
進(jìn)程調(diào)C語(yǔ)言實(shí)現(xiàn)_第2頁(yè)
進(jìn)程調(diào)C語(yǔ)言實(shí)現(xiàn)_第3頁(yè)
進(jìn)程調(diào)C語(yǔ)言實(shí)現(xiàn)_第4頁(yè)
進(jìn)程調(diào)C語(yǔ)言實(shí)現(xiàn)_第5頁(yè)
已閱讀5頁(yè),還剩6頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、#include<stdio.h>#include<stdio.h>#include<malloc.h>typedef struct ProcessNode / 進(jìn)程結(jié)點(diǎn)的基本結(jié)構(gòu) char name; /進(jìn)程名int service_time; /服務(wù)時(shí)間int arrive_time; /到達(dá)時(shí)間int priority; /優(yōu)先級(jí)struct FCFS_time /先到先服務(wù)int finish_time; /完成時(shí)間 int turnaround_time; /周轉(zhuǎn)時(shí)間float weigtharound_time;/帶權(quán)周轉(zhuǎn)時(shí)間FCFS_time;

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

3、weigtharound_time;Pri_time;struct ProcessNode*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)

4、; head=read_information();/讀入進(jìn)程的基本信息do p=head->next; printf("n");printf("*進(jìn)程初始信息輸出* n"); /輸出初始化后的進(jìn)程基本信息printf("n");printf("進(jìn)程名稱 "); printf("到達(dá)時(shí)間 "); printf("服務(wù)時(shí)間 "); printf("優(yōu)先級(jí) "); printf("n");while(p) printf("

5、%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");/輸出進(jìn)程的調(diào)用選擇項(xiàng)printf("n");printf("1、FCFS-先到先服務(wù)n"

6、;);printf("2、SJF-短作業(yè)優(yōu)先n");printf("3、RR-時(shí)間片輪轉(zhuǎn)n");printf("4、Pri-優(yōu)先權(quán)調(diào)度n"); printf("5、退出n");printf("n");printf("* n");printf("n");printf("請(qǐng)?jiān)?5之間選擇: ");scanf("%d",&choice);printf("n"); printf("n&q

7、uot;); switch(choice) case 1: FCFS_scheduling(head); break; case 2: SJF_scheduling(head); break; case 3: RR_scheduling(head); break; case 4: Pri_scheduling(head); break; / case 5: exit(); while(choice!=5);Linklist read_information()/進(jìn)程讀入函數(shù) int i; intnum; / ProcessNode ;Linklist pro;Linklist p; Linkl

8、ist head; printf("n"); printf("*進(jìn)程調(diào)度算法* n");printf("n");printf("請(qǐng)輸入進(jìn)程的個(gè)數(shù):"); scanf("%d",&num);printf("n");printf("*初始化信息* n");printf("n"); head=(Linklist)malloc(sizeof(ProcessNode);/頭結(jié)點(diǎn)head->next=NULL;p=head; for(

9、i=1;i<=num;i+) pro=(Linklist)malloc(sizeof(ProcessNode);/創(chuàng)建進(jìn)程結(jié)點(diǎn) printf(" 輸入第%d個(gè)進(jìn)程信息:n",i);printf(" 請(qǐng)輸入進(jìn)程名: ");fflush(stdin);scanf("%c",&pro->name);printf(" 到達(dá)時(shí)間: ");scanf("%d",&pro->arrive_time);printf(" 服務(wù)時(shí)間: "); scanf(&qu

10、ot;%d",&pro->service_time);printf(" 優(yōu)先級(jí): ");scanf("%d",&pro->priority); /pro->next=head->next; head->next=pro;/逆序建鏈 p->next=pro; p=pro;/順序建鏈/p+;pro->next=NULL; printf("n"); return head; Linklist FCFS_scheduling(Linklist head)/先到先服務(wù)算法函數(shù)

11、Linklist p; Linklist q;/指向前一進(jìn)程 p=head->next; while(p) /初始化進(jìn)程的完成時(shí)間、周轉(zhuǎn)時(shí)間、帶權(quán)周轉(zhuǎn)時(shí)間,初值均賦為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_time.finish_time=p->arrive_time;/避免第一個(gè)進(jìn)程到達(dá)時(shí)間不為0 while(p) if(p-

12、>arrive_time<=q->FCFS_time.finish_time)/下一進(jìn)程已到達(dá),在等待中 p->FCFS_time.finish_time=(p->service_time)+(q->FCFS_time.finish_time);/服務(wù)時(shí)間 p->FCFS_time.turnaround_time=(p->FCFS_time.finish_time)-(p->arrive_time);/周轉(zhuǎn)時(shí)間 p->FCFS_time.weigtharound_time=(float)(p->FCFS_time.turnaro

13、und_time)/(p->service_time);/帶權(quán)周轉(zhuǎn)時(shí)間 else p->FCFS_time.finish_time=p->service_time+p->arrive_time;/服務(wù)時(shí)間 p->FCFS_time.turnaround_time=(p->FCFS_time.finish_time)-(p->arrive_time);/周轉(zhuǎn)時(shí)間 p->FCFS_time.weigtharound_time=(float)(p->FCFS_time.turnaround_time)/(p->service_time);/

14、帶權(quán)周轉(zhuǎn)時(shí)間 q=p; p=p->next; p=head->next; printf("* FCFS * n");/輸出先到先服務(wù)調(diào)度后的進(jìn)程信息printf("n");printf("進(jìn)程名稱 "); printf("到達(dá)時(shí)間 "); printf("服務(wù)時(shí)間 "); printf("優(yōu)先級(jí) ");printf("完成時(shí)間 ");printf("周轉(zhuǎn)時(shí)間 "); printf("帶權(quán)周轉(zhuǎn)時(shí)間 ");

15、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.finish_time); printf(" %d",p->FCFS_time.turnaround

16、_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;/指向前一進(jìn)程結(jié)點(diǎn) int num=0;/記錄進(jìn)程個(gè)數(shù) int add_flag

17、=0;/進(jìn)程完成服務(wù)個(gè)數(shù)int service_time_min;int arrive_time;int k;p=head->next;/首元結(jié)點(diǎn) while(p) /初始化進(jìn)程的完成時(shí)間、周轉(zhuǎn)時(shí)間、帶權(quán)周轉(zhuǎn)時(shí)間,初值均賦為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)建的進(jìn)程隊(duì)列變

18、為循環(huán)隊(duì)列 p=head->next;q=p;p->SJF_time.finish_time=p->arrive_time+p->service_time; p->SJF_time.turnaround_time=(p->SJF_time.finish_time)-(p->arrive_time);/周轉(zhuǎn)時(shí)間 p->SJF_time.weigtharound_time=(float)(p->SJF_time.turnaround_time)/(p->service_time);/帶權(quán)周轉(zhuǎn)時(shí)間q->SJF_time.finish_

19、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->next; 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->

20、SJF_time.flag=0)/尋找最短的作業(yè) if(p->next->service_time)<(p->service_time)service_time_min=p->next->service_time;p=p->next; else p=p->next; p=q->next; r=q; while(p->service_time!=service_time_min)p=p->next;/指針指向最短作業(yè) p->SJF_time.finish_time=p->arrive_time+p->servic

21、e_time; p->SJF_time.flag=1;+add_flag; p->SJF_time.turnaround_time=(p->SJF_time.finish_time)-(p->arrive_time);/周轉(zhuǎn)時(shí)間 p->SJF_time.weigtharound_time=(float)(p->SJF_time.turnaround_time)/(p->service_time);/帶權(quán)周轉(zhuǎn)時(shí)間 q=p;p=r->next; else k=0; service_time_min=p->service_time; while(

22、p->arrive_time)<=(q->SJF_time.finish_time)&&k<=num)/尋找最短的作業(yè) if(p->SJF_time.flag=1) p=p->next;+k; else if(p->SJF_time.flag!=1)&&(p->service_time)<service_time_min) service_time_min=p->service_time; p=p->next;+k; else p=p->next;+k; p=q->next; r=q;

23、 while(p->service_time!=service_time_min)p=p->next;/指針指向最短作業(yè) p->SJF_time.finish_time=q->SJF_time.finish_time+p->service_time; p->SJF_time.turnaround_time=(p->SJF_time.finish_time)-(p->arrive_time);/周轉(zhuǎn)時(shí)間 p->SJF_time.weigtharound_time=(float)(p->SJF_time.turnaround_time)/

24、(p->service_time);/帶權(quán)周轉(zhuǎn)時(shí)間 p->SJF_time.flag=1;+add_flag; /q=p;p=p->next; q=p;p=r->next; while(add_flag!=num); for(p=head->next;num>0;num-)/斷開(kāi)循環(huán)隊(duì)列 q=p;p=p->next;q->next=NULL; p=head->next;/指向鏈?zhǔn)?,輸出短作業(yè)調(diào)度后的進(jìn)程信息 printf("n"); printf("* SJF * n");printf("n

25、");printf("進(jìn)程名稱 "); printf("到達(dá)時(shí)間 "); printf("服務(wù)時(shí)間 "); printf("優(yōu)先級(jí) ");printf("完成時(shí)間 ");printf("周轉(zhuǎn)時(shí)間 "); printf("帶權(quán)周轉(zhuǎn)時(shí)間 "); printf("n"); while(p) printf(" %c ",p->name);printf(" %d ",p->arrive

26、_time); printf(" %d ",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; p

27、rintf("n"); printf("* n"); printf("n"); return head;Linklist RR_scheduling(Linklist head)/時(shí)間片輪轉(zhuǎn)算法Linklist q;/指向前一進(jìn)程結(jié)點(diǎn) Linklist p;int q_time;/時(shí)間片大小int num=0;/記錄進(jìn)程個(gè)數(shù) int add_flag=0;/進(jìn)程完成服務(wù)個(gè)數(shù) printf("請(qǐng)輸入時(shí)間片的大小: ");scanf("%d",&q_time); p=head->nex

28、t; while(p) /初始化進(jìn)程的完成時(shí)間、周轉(zhuǎn)時(shí)間、帶權(quán)周轉(zhuǎn)時(shí)間,初值均賦為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; q->next=head->next;/將創(chuàng)建的進(jìn)程隊(duì)列變?yōu)檠h(huán)隊(duì)列 p=head->next; q->RR_time.finish_time=p->a

29、rrive_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&qu

30、ot;); */ if(p->RR_time.flag_time)>(q_time)/服務(wù)時(shí)間大于時(shí)間片 p->RR_time.finish_time=(q->RR_time.finish_time)+(q_time);/累加完成時(shí)間 p->RR_time.flag_time=(p->RR_time.flag_time)-(q_time); if(p->next->arrive_time)<=(p->RR_time.finish_time)/有進(jìn)程等待 q=p;p=p->next; else /當(dāng)前進(jìn)程未完成,無(wú)進(jìn)程等待,指針不

31、向后移 q=p; else if(p->RR_time.flag_time)=0)/進(jìn)程已經(jīng)完成 p=p->next; else p->RR_time.finish_time=(q->RR_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)時(shí)間 p->RR_time.weigtharound_time=(float)(p->RR_time.turnaround_time)/(p->service_time);/帶權(quán)周轉(zhuǎn)時(shí)間 if(p->next->arrive_time)<(p->RR_time.finish_time)/有進(jìn)程等待 q=p;p=p->next; else /當(dāng)前進(jìn)程完成,無(wú)進(jìn)程等待,指針向后移/ q=p; q->RR_time.finish_time=p->next->arrive_time; p=p

溫馨提示

  • 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ù)網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論