歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

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

  • 資源ID:160969537       資源大?。?span id="vrt0puz" class="font-tahoma">42.50KB        全文頁數(shù):11頁
  • 資源格式: DOC        下載積分:15積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要15積分
郵箱/手機:
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機號,方便查詢和重復(fù)下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。

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

.wd.#include<stdio.h>#include<stdio.h>#include<malloc.h>typedef 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; 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 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); head=read_information();/讀入進程的 根本信息do 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");/輸出進程的調(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 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("*初始化信息* n");printf("n"); head=(Linklist)malloc(sizeof(ProcessNode);/頭結(jié)點head->next=NULL;p=head; 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ù)時間: "); 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+;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_time.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->arrive_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)時間 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("進程名稱 "); 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.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 service_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_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->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->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->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; else k=0; service_time_min=p->service_time; while(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; 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)時間 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)隊列 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 ",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é)點 Linklist 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; 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ù)時間大于時間片 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)<=(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_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)時間 p->RR_time.weigtharound_time=(float)(p->RR_time.turnaround_time)/(p->service_time);/帶權(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!=num);/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");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;

注意事項

本文(進程調(diào)度[C語言實現(xiàn)])為本站會員(馨***)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復(fù)下載不扣分。




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