Linux操作系统实验系列之实验十批处理系统的作业调度

一、实验目的

  1. 加深对作业概念的理解。
  2. 深入了解批处理系统如何组织作业、管理作业和调度作业。

二、实验内容:
编写程序完成批处理系统中的作业调度,要求采用响应比高者优先的作业调度算法。实验具体包括:首先确定作业控制块的内容,作业控制块的组成方式;然后完成作业调度;最后编写主函数对所做工作进行测试。

三、实验环境
Linux操作系统

四、实验过程与运行结果

代码:#include <string.h>
#include <stdio.h>
#define n 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[n];
int jobcount=0;
void shedule(){
float xk,k;
int p,q,s,t;
do{
p=head;
q=s=-1;
k=0;
while(p!=-1){
if(jobtable[p].length<=memory&&jobtable[p].tape<=tape&&jobtable[p].printer<=printer){
xk=(float)(jobtable[p].waittime)/jobtable[p].runtime;
if(q0||xk>k){
k=xk;
q=p;
t=s;
}
}
s=p;
p=jobtable[p].next;
}
if(q!=-1){
if(t
-1)
head=jobtable[head].next;
else
jobtable[t].next=jobtable[q].next;
memory=memory-jobtable[q].length;
tape=tape-jobtable[q].tape;
printer=printer-jobtable[q].printer;
printf(“选中的作业名是:%s\n”,jobtable[q].name);
}
}while(q!=-1);
}
int main(){
char name[4];
int size,tcount,pcount,wtime,rtime;
int p;
memory=65536;
tape=4;
printer=2;
head=-1;
printf(“输入作业相关数据(以作业大小为负数停止输入):”);
printf(“输入作业名、作业大小、磁带机数、打印机数、等待时间、估计执行时间\n”);
scanf("%s%d%d %d %d %d",name,&size,&tcount,&pcount,&wtime,&rtime);
while(size!=-1){
if(jobcount<n)
p=jobcount;
else{
printf(“无法再创建作业\n”);
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;
printf(“输入作业名、作业大小、磁带机数、打印机数、等待时间、估计执行时间\n”);
scanf("%s%d%d %d %d %d",name,&size,&tcount,&pcount,&wtime,&rtime);
}
shedule();
}

结果图:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43372169/article/details/110522569
今日推荐