编写并调试一个多道程序系统的作业调度模拟 下载本文

编写并调试一个多道程序系统的作业调度模拟程序五

编写并调试一个多道程序系统的作业调度模拟程序。 作业调度算法:采用基于优先级的作业调度。 可以参考课本中的例子自行设计。

#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","

","运行时间","提交时刻");