java操作系统作业调度代码_采取高响应比优先模拟批处理操作系统中的作业调度...

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

下面是代码:

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 Listjobs = 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;

// 定义一个作业集

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

https://www.cnblogs.com/focusj/category/301557.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实验一 批处理系统的作业调度 1.实验目的 加深对作业概念的理解; 深入了解批处理系统如何组织作业、管理作业和调度作业; 2.实验预备知识 作业的概念; 作业的创建; 作业的调度。 3.实验内容 编写程序完成批处理系统作业调度,要求采用响应比高者优先的作业调度算法。实验具体包括:首先确定作业控制块的内容,作业控制块的组成方式;然后完成作业调度;最后编写主函数对所作工作进程测试。 4.提示与讲解 操作系统根据允许并行工作的道数和一定的算法从系统选取若干作业把它们装入主存储器,使它们有机会获得处理器运行,这项工作被称为“作业调度”。实现这部分功能的程序就是“作业调度程序”。 作业调度的实现主要有两个问题,一个是如何将系统作业组织起来;另一个是如何进行作业调度。 为了将系统作业组织起来,需要为每个进入系统的作业建立档案以记录和作业相关的信息,例如作业名、作业所需资源、作业执行时间、作业进入系统的时间、作业信息在存储器的位置、指向下一个作业控制块的指针等信息。这个记录作业相关信息的数据块称为作业控制块(JCB),并将系统等待作业调度作业控制块组织成一个队列,这个队列称为后备队列。一个作业全部信息进入系统后,就为其建立作业控制块,并挂入后备队列。当进行作业调度时,从后备队列查找选择作业。 由于实验没有实际作业作业控制块的信息内容只使用了实验需要的数据。作业控制块首先应该包括作业名;其次是作业所需资源,根据需要,实验只包括需要主存的大小(采用可移动的动态分区方式管理主存,作业大小就是需要主存的大小)、需要打印机的数量和需要磁带机的数量;采用响应比作业调度算法,为了计算响应比,还需要有作业的估计执行时间、作业在系统的等待时间;另外,指向下一个作业控制块的指针必不可少。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值