Java最高响应比_采取高响应比优先模拟批处理操作系统中的作业调度

本文介绍了如何使用Java编程实现批处理系统中的响应比高者优先作业调度算法。通过定义JOB类来存储作业信息,并在Client测试类中进行作业调度。在调度过程中,根据作业的等待时间和执行时间计算响应比,动态调整作业执行顺序。代码经过测试,运行无误。作者分享了编程体会,强调实践和理解数据结构的重要性。
摘要由CSDN通过智能技术生成

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

下面是代码:

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 jobs = new ArrayList();

// 记录响应比

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 jobs = new ArrayList();

// 系统中磁带机数量

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容器插入数据时,是按顺序逐步插入的。检点通俗点说就是按插入的顺序谁先插入谁占第一个位置。好像很简单,但是在写这个东西时,自己是不知道的。相信还有好多人也不太清楚。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值