#include<string.h>
#include<iostream.h>
#include<stdlib.h>
#define m 10
typedef struct jcb //定义作业控制块结构
{ char name[4]; //作业名
int length; //作业长度,所需主存大小
int printer; //作业执行时所需打印机数量
int tape; //作业执行时所需磁带机数量
int runtime; //作业估计执行时间
int waittime; //作业在系统中的等待时间
int next; //指向下一个作业控制块指针
}JCB;
int head;
int tape,printer;
long memory;
JCB jobtable[m]; //定义作业表
Int jobcount=0; //作业计数器,初值为0
//作业调度函数
void shedule()
{float xk,k;
int p,q,s,t;
do //查找响应比最高的作业
{p=head; //从作业控制块队首开始查找
q=s=-1; //用-1表示队列为空
k=0; //用于保存响应比
while(p!=-1)
{ //系统可用资源是否满足作业需求
if (jobtable[p].length<=memory&&jobtable[p].tape<=tape&&jobtable[p].printer<=printer)
{ //计算响应比XK,找出响应比较高者
xk=(float)(jobtable[p].waittime)/jobtable[p].runtime;
if (q==0||xk>k)
{k=xk;
q=p; //q记住当前响应比较高者
t=s;
}//if
}//if
s=p; //s记住当前的p
p=jobtable[p].next; //p指向下队列中一个作业控制块
}//while,继续比较响应比
//响应比最高者出队
if (q!=-1)
{if (t==-1)
head=jobtable[head].next;
else
jobtable[t].next=jobtable[q].next;
//为作业q分配资源,分配主存空间、磁带机,打印机
memory=memory-jobtable[q].length;
tape=tape-jobtable[q].tape;
printer=printer-jobtable[q].printer;
cout<<"选中作业的作业名:"<<jobtable[q].name<<endl;
}
}while (q!=-1); //如q!=-1继续查找下一个响应比最高者
if (head!=0)
cout<<"选中作业的作业名:"<<jobtable[q].name<<endl;
}
//主函数
void main()
{char name[4];
int size,tcount,pcount,wtime,rtime;
int p;
size=0;
tcount=0;
pcount=0;
wtime=0;
rtime=0;
memory=65536;
tape=4;
printer=2;
head=-1;
cout<<"输入作业相关数据(以作业大小为负数停止输入):"<<endl;
cout<<"输入作业名,作业大小,磁带机数,打印机数,等待时间,估计执行时间"<<endl;
cin>>name>>size>>tcount>>pcount>>wtime>>rtime;
while (size!=-1)
{
if (jobcount<m) p=jobcount;
else {cout<<"无法再创建进程"<<endl;
break;}
jobcount++;
strcpy(jobtable[p].name,name);
jobtable[p].length=size;
jobtable[p].printer=pcount;
jobtable[p].tape=tcount;
jobtable[p].runtime=rtime;
jobtable[p].waittime=wtime;
jobtable[p].next=head;
head=p;
cout<<"输入作业名,作业大小,磁带机数,打印机数,等待时间,估计执行时间"<<endl;
cin>>name>>size>>tcount>>pcount>>wtime>>rtime;
}//while
shedule();
}//main
请问
用这个程序
怎么修改可以是优先作业调度法??? |