迷失北京

BlogJava 联系 聚合 管理
  60 Posts :: 0 Stories :: 13 Comments :: 0 Trackbacks

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

下面是代码:

JOB类:

package com.wk.job;

public class JOB {

public JOB() {

super();

}

// 作业名

String name = null;

// 作业长度,所需主存大小

int length = 0;

// 作业执行所需打印机的数量

int printer = 0;

// 作业执行所需磁带机的数量

int tape = 0;

// 作业估计执行时间

float runtime = 0;

// 作业在系统中的等待时间

float waittime = 0;

public int getLength() {

return length;

}

public String getName() {

return name;

}

public int getPrinter() {

return printer;

}

public float getRuntime() {

return runtime;

}

public int getTape() {

return tape;

}

public float getWaittime() {

return waittime;

}

public void setLength(int length) {

this.length = length;

}

public void setName(String name) {

this.name = name;

}

public void setPrinter(int printer) {

this.printer = printer;

}

public void setRuntime(float runtime) {

this.runtime = runtime;

}

public void setTape(int tape) {

this.tape = tape;

}

public void setWaittime(float waittime) {

this.waittime = waittime;

}

}

这是Client测试类:
package com.wk.client;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.wk.job.*;
public class Client {
// 定义装载作业的容器
static List<JOB> jobs = new ArrayList<JOB>();
// 记录响应比
static float xk = 0;
// 记录当前的作业记录相应时间比
static float k = 0;
// 作业调度函数
static void shedule(JOB job, long memory, int tape, int printer) {
// 系统可用资源是否满足作业需求
if (job.getLength() <= memory && job.getTape() <= tape
&& job.getPrinter() <= printer) {
xk = job.getWaittime() / job.getRuntime();
// 如果这是第一个进入容器的作业
if (jobs.size() == 0) {
k = xk;
jobs.add(job);
} else {
if (k > xk) { // 如果这不是第一个进入容器的作业,则和第一个作业比较
jobs.add(job);
} else {
k = xk;
jobs.add(job);
Collections.swap(jobs, 0, jobs.size()-1); // 交换两个作业的执行顺序
}
}
} else {
System.out.println("error");
}
}
public static void main(String[] args) {
// 系统可容纳作业的个数
int n = 3;
// 定义一个作业集
// List<JOB> jobs = new ArrayList<JOB>();
// 系统中磁带机数量
int tape = 4;
// 系统打印机的数量
int printer = 3;
// 系统内存
long memory = 65536;
// 定义一个作业
JOB job = null;
// 定义输入流
BufferedReader bf = new BufferedReader(new InputStreamReader(System.in));
for (int i = 0; i < n; i++) {
try {
//实例化一个作业
job = new JOB();
System.out.println("------------------");
job.setName(bf.readLine());
System.out.println("输入作业名称:" + job.getName());
job.setLength(Integer.parseInt(bf.readLine()));
System.out.println("输入作业使用内存大小:" + job.getLength());
job.setTape(Integer.parseInt(bf.readLine()));
System.out.println("输入作业使用磁带机数:" + job.getTape());
job.setPrinter(Integer.parseInt(bf.readLine()));
System.out.println("输入作业打印机数:" + job.getPrinter());
job.setWaittime(Integer.parseInt(bf.readLine()));
System.out.println("输入作业等待时间:" + job.getWaittime());
job.setRuntime(Integer.parseInt(bf.readLine()));
System.out.println("输入作业估计执行时间:" + job.getRuntime());
// 调用函数
Client.shedule(job, memory, tape, printer);
} catch (IOException e) {
System.out.println("输入内容不允许为空!!");
}
}
System.out.println("当前执行的程序为1:" + jobs.get(0).getName());
// 为第一个作业分配资源
memory = memory - jobs.get(0).getLength();
System.out.println("系统剩余内存:" + memory);
tape = tape - jobs.get(0).getTape();
System.out.println("系统剩余磁带机:" + tape);
printer = printer - jobs.get(0).getPrinter();
System.out.println("系统剩余打印机:" + printer);
}
}
经过测试上面的代码是没有错误的!!下面说一下自己在写代码的时候的感想:
1.好多东西想的总是好的,但是真正的用着二十四个英文字母表达的时候是很费力的。所以建议向我们这样的初学者要经常敲代码,经常写东西。这样自己才能进步更快。
2.向List容器插入数据时,是按顺序逐步插入的。检点通俗点说就是按插入的顺序谁先插入谁占第一个位置。好像很简单,但是在写这个东西时,自己是不知道的。相信还有好多人也不太清楚。

 

posted on 2010-09-22 14:23 王康 阅读(306) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: