進程調(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 #include typedef struct ProcessNode{ // 進程結(jié)點的 根本構(gòu)造 char name; //進程名 int service_time; //服務(wù)時間 int arrive_time; //到達時間 int priority; //優(yōu)先級 stru

2、ct 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; int turnaround_time; float weigtharound_time; int flag; }SJF_time; s

3、truct 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

4、; 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); Linkli

5、st Pri_scheduling(Linklist head); head=read_information();//讀入進程的 根本信息 do{ p=head->next; printf("\n"); printf("**********進程初始信息輸出********** \n"); //輸出初始化后的進程 根本信息 printf("\n"); printf("進程名稱 "); printf("到達時間 "); printf("服務(wù)時間 "); pr

6、intf("優(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");

7、 printf("************************************ \n");//輸出進程的調(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("********************************

8、**** \n"); printf("\n"); printf("請在1—5之間選擇: "); scanf("%d",&choice); printf("\n"); printf("\n"); switch(choice) { case 1: FCFS_scheduling(head); break; case 2: SJF_scheduling(head); break; case 3: RR_scheduling(head)

9、; break; case 4: Pri_scheduling(head); break; // case 5: exit(); } }while(choice!=5); } Linklist read_information()//進程讀入函數(shù) { int i; int num; // ProcessNode ; Linklist pro; Linklist p; Linklist head;

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

11、 for(i=1;i<=num;i++) { pro=(Linklist)malloc(sizeof(ProcessNode));//創(chuàng)立進程結(jié)點 printf(" 輸入第%d個進程信息:\n",i); printf(" 請輸入進程名: "); fflush(stdin); scanf("%c",&pro->name); printf(" 到達時間: "); scanf("%d",&pro->arrive_time); printf(" 服務(wù)時間: "); sca

12、nf("%d",&pro->service_time); printf(" 優(yōu)先級↑: "); 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)

13、//先到先服務(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_ti

14、me.finish_time=p->arrive_time;//防止第一個進程到達時間不為0 while(p) { if(p->arrive_time<=q->FCFS_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->arriv

15、e_time);//周轉(zhuǎn)時間 p->FCFS_time.weigtharound_time=(float)(p->FCFS_time.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)時間

16、 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->next; printf("******************************** FCFS ******************************** \n");//輸出先到先服務(wù)調(diào)度后的進程信息 printf("\n"); printf("進程名稱

17、 "); 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("

18、 %d ",p->service_time); printf(" %d ",p->priority); printf(" %d",p->FCFS_time.finish_time); printf(" %d",p->FCFS_time.turnaround_time); printf(" %0.2f",p->FCFS_time.weigtharound_time); printf("\n"); p=p->next; } printf(

19、"\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 ser

20、vice_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=he

21、ad->next;//將創(chuàng)立的進程隊列變?yōu)檠h(huán)隊列 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)時間 p->SJF_time.weigtharound_time=(float)(p->SJF_time.turnaround_time)/(p->service_time);//帶權(quán)周轉(zhuǎn)時間 q->SJF_ti

22、me.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->next;} else if((p->arrive_time)>(q->SJF_time.finish_time)) { service_time_min=p->service_time; arrive_time=p->arrive_time; wh

23、ile(p->arrive_time==arrive_time&&p->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!=servic

24、e_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_t

25、ime.turnaround_time)/(p->service_time);//帶權(quán)周轉(zhuǎn)時間 q=p;p=r->next; } else { k=0; service_time_min=p->service_time; while(((p->arrive_time)<=(q->SJF_time.finish_time))&&k<=num)//尋找最短的作業(yè) {

26、if(p->SJF_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;

27、 r=q; 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)時間

28、 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->next;num>0;num--)//斷開循環(huán)隊列 {

29、 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

30、("優(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);

31、 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("**********************************************************

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

33、ext; 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; } q->next=head->next;//將創(chuàng)立的進程隊列變?yōu)檠h(huán)隊列 p=head->next;

34、 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)

35、; printf(" %d ",p->priority); printf(" %d",p->RR_time.finish_time); printf("\n"); */ if((p->RR_time.flag_time)>(q_time))//服務(wù)時間大于時間片 { p->RR_time.finish_time=(q->RR_time.finish_time)+(q_time);//累加完成時間 p->RR_time.flag_time=(p->R

36、R_time.flag_time)-(q_time); if((p->next->arrive_time)<=(p->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_t

37、ime.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)時間 p->RR_time.weigtharound_time=(float)(p->RR_time.turnaround_time)/(p->service_time

38、);//帶權(quán)周轉(zhuǎn)時間 if((p->next->arrive_time)<(p->RR_time.finish_time))//有進程等待 { q=p;p=p->next; } else //當(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!=nu

39、m); //}while(p->RR_time.flag==0); for(p=head->next;num>0;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");

40、 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);

41、 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),我們立即給予刪除!