编写并调试一个多道程序系统的作业调度模拟程序五
编写并调试一个多道程序系统的作业调度模拟程序。 作业调度算法:采用基于优先级的作业调度。 可以参考课本中的例子自行设计。
#include <stdio.h> #include <stdlib.h>
#define getjch(type) (type*)malloc(sizeof(type)) #define N 10
struct jcb { /* 定义作业控制块PCB */ char name[10];
float needtime; /*运行时间*/ float arrivetime;/*提交时刻*/ float storage[N];/*系统资源*/ struct jcb* link;
}*ready=NULL,*pb=NULL,*p;
typedef struct jcb JCB;
float Tc,Ti,Wi,T=0;/*完成时刻,周转时间,带权周转时间,时间量*/ float TiSum=0,WiSum=0;/*平均周转时间,带权a平均周转时间*/ float source[N]; int n;
void input(); /*输入作业信息*/
int space(); /* 返回就绪队列中作业的数目*/ void fcfs(); /*先来先服务算法*/ void disp(JCB *pr); /* 显示相应的作业*/ void running(); /*运行作业组*/ void destroy(); /* 撤销作业*/
void input() /* 建立作业控制块函数*/ {
int i,k,num;
printf("请输入所拥有的资源种类:"); scanf("%d",&n);
printf("输入系统所拥有资源数:\\n"); for(i=0;i<n;i++) {
printf("资源[%d]:",i);
scanf("%f",&source[i]); }
printf("\\n 输入作业数量:"); scanf("%d",&num); for(i=0;i<num;i++) {
printf("\\n 作业号[%d]:\\n",i); p=getjch(JCB);
printf("输入作业名:");
scanf("%s",p->name); printf("输入提交时间:");
scanf("%f",&p->arrivetime); printf("输入运行时间:");
scanf("%f",&p->needtime); printf("输入所需资源数:\\n"); for(k=0;k<n;k++) {
printf("资源[%d]:",i);
scanf("%f",&p->storage[k]); }
printf("\\n"); p->link=NULL;
fcfs(); } }
int space() { int l=0; JCB* pr=ready; while(pr!=NULL) { l++;
pr=pr->link; } return(l); }
void disp(JCB * pr) /*建立作业显示函数,用于显示当前作业*/ { int i;
printf("\\n%6s\\t%6s\\t%6s\\t","
作
业
","运行时间","提交时刻");
名