批处理系统的作业调度java

发布时间 : 星期日 文章批处理系统的作业调度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;

联系合同范文客服:xxxxx#qq.com(#替换为@)