发布时间 : 星期日 文章批处理系统的作业调度java更新完毕开始阅读
实验 批处理系统的作业调度
一、 实验目的
(1) 加深对作业概念的理解;
(2) 深入了解批处理系统如何组织作业、管理作业和调度作业。 二、 预备知识 (1) . 三、 实验内容
编写程序完成批处理系统中的作业调度,要求采用响应比高者优先的作业调度算法。实验具体包括:首先确定作业块的内容和组成方式;然后完成作业调度;最后编写主函数,对所做工作进行测试。
import java.util.Scanner;
public class JCB {
public String name; //作业名 public int length; //作业长度 public int print; //打印机数量 public int tape; //磁带机数量 public int runTime; public int waitTime;
public int next; //指针 }
class Action{
public final int n=10; //后备队列中JCB的最大数量 JCB[] jTable=new JCB[n]; //作业表
public int jCount; //作业表中当前作业数量 public int head; //作业表头指针
//初始化函数
public void Init() {
head=-1; jCount=0; }
//入队函数
public void pushQueue(JCB jcb){
if(jCount>=n) {
System.out.println(\队列已满!不能再加入!\); return ; }
if(head==-1) head=0;
// System.out.println(jTable[jCount]); jTable[jCount]=new JCB();
jTable[jCount].length=jcb.length; jTable[jCount].name=jcb.name; jTable[jCount].print=jcb.print; jTable[jCount].tape=jcb.tape;
jTable[jCount].runTime=jcb.runTime; jTable[jCount].waitTime=jcb.waitTime; jTable[jCount].next=-1; jCount++; }
//出队函数
public void popQueue(int num) {
if(jCount==0) {
System.out.println(\空的队列!不能出队!\); return ; }
if(num>=jCount) {
System.out.println(\队列中不存在该元素!\); return ; }
if(jCount==1)
{
head=-1;
jTable[0].next=-1; jCount=0; }else{
jTable[num-1].next=jTable[num].next; jTable[num].next=-1; jCount--; } }
public int memory=64*1024; //主存大小64MB public int tape=4; //磁带机数量 public int print=2; //打印机数量
//作业调度函数
public void dispatch() {
int currJcb,maxJcb;
double currJcbRate,maxJcbRate;
while(head!=-1) {
currJcb=maxJcb=head;
currJcbRate=maxJcbRate=0;
//找出响应比最大的作业 while(true) {
//找出满足资源的作业
if(jTable[currJcb].length<=memory&&jTable[currJcb].tape<=tape&&jTable[currJcb].print<=print) {
//计算响应比
currJcbRate=(double)jTable[currJcb].waitTime/jTable[currJcb].runTime;
if(currJcbRate>maxJcbRate) {
maxJcbRate=currJcbRate; maxJcb=currJcb; } }
if(jTable[currJcb].next==-1)
{
break; }else{
currJcb=jTable[currJcb].next; } }
//输出响应比最大的作业、分配资源 if(maxJcbRate!=0) {
memory-=jTable[maxJcb].length; tape-=jTable[maxJcb].tape; tape-=jTable[maxJcb].print;
System.out.println(\选中的作业的作业名为:\+jTable[maxJcb].name);
popQueue(maxJcb); } } }
public static void main(String[] args) {
String name; int length; int print; int tape; int runTime; int waitTime;
int count; //记录输入作业数量
JCB jcb =new JCB(); //临时作业变量
System.out.println(\请输入作业相关信息,以作业名为Q为输入结束。\\n\\n按任意键进入输入模式:\);
Action action=new Action(); action.Init();
while(true) {
count=1;