#include<stdio.h> #include<conio.h> #include<string.h> #define MAX 24 struct pcb{ char name[10]; int arrtime; int reqtime; int runtime; int startime; int finitime; int wtime; int prio; char status; }; typedef struct pcb PCB; //输入函数 void input (PCB job[],int *pnum) { int num; int i; printf("进程数:"); scanf("%d",&num); //输入 for(i=0;i<num;i++) { printf(" 第%d个进程: ",i+1); printf("输入进程名:"); scanf("%s",job[i].name); //printf("到达时间:"); //scanf("%d",&job[i].arrtime); printf("优先次序:"); scanf("%d",&job[i].prio); printf("要求服务的时间:"); scanf("%d",&job[i].reqtime); job[i].status='r'; job[i].runtime=0; } //设置个数 *pnum=num; } void pcbprintf(PCB pcbp[],int n) { int i; if(n==0) { printf("THE QUEUE IS NULL!! "); return; } printf(" name prio rqtime runtime status:"); for(i=0;i<n;i++) { printf(" N %d",i+1); printf(" %s",pcbp[i].name); printf(" %d",pcbp[i].prio); printf(" %d",pcbp[i].reqtime); printf(" %d",pcbp[i].runtime); printf(" %c",pcbp[i].status); } } //冒泡排序 void btsort(PCB btpcb[],int n) { int i,j; PCB pcbtemp; for(j=1;j<n;j++) { for(i=0;i<n-j;i++) { if(btpcb[i].prio<btpcb[i+1].prio) { pcbtemp=btpcb[i]; btpcb[i]=btpcb[i+1]; btpcb[i+1]=pcbtemp; } } } } void main() { PCB jobarrived[MAX],jobfinished[MAX]; int numarr,numfin; int systime=0; int i,j,n; PCB pcbrunning; printf(" welcome to the DEMO program which shows Process Scheduling! "); printf(" From:网络工程彭得源 "); printf(" NOV,5月,21日,2015 "); input(jobarrived,&numarr); numfin=0; //系统时间置零 systime=0; btsort(jobarrived,numarr); printf("经按priority排序后,ready Queue是 "); pcbprintf(jobarrived,numarr); //debug do { btsort(jobarrived,numarr); printf(" 现在系统时间 %d: ",systime); printf("ready Queue有 "); pcbprintf(jobarrived,numarr); pcbrunning=jobarrived[0]; numarr--; for(i=0;i<numarr;i++) jobarrived[i]=jobarrived[i+1]; pcbrunning.status='R'; pcbrunning.startime=systime; printf(" 处于运行态的作业名 %s ",pcbrunning.name); systime++; pcbrunning.runtime++; if(pcbrunning.runtime==pcbrunning.reqtime) { jobfinished[numfin]=pcbrunning; jobfinished[numfin].status='F'; numfin++; } else { pcbrunning.prio--; pcbrunning.status='r'; jobarrived[numarr]=pcbrunning; numarr++; } printf(" 系统时间:%d 已经完成的有 ",systime); pcbprintf(jobfinished,numfin); getchar(); getchar(); }while((numarr!=0)); //debug printf(" Completed!! ByeBye!!"); getchar(); getchar(); }