从输入井中选择作业读入内存,使其获得处理器,得到运行的机会,即为作业调度。输入井中的作业用“作业控制块”(JCB)标识,为了进行作业调度,将作业控制块组成一个队列,这个队列称为后备队列。

模拟实验中没有实际作业,作业控制块中的信息内容只使用了模拟实验中需要的数据。作业控制块中包括作业名、作业大小、所需打印机台数、所需磁带机数量、作业估计执行时间、作业等待时间、指向下一个作业控制块的指针等内容。将作业控制块组成一个队列,实验中采用动态链表的方式模拟作业的后备队列。作业控制块采用结构型数据模拟。

模拟实验中,主存采用可移动的可变分区管理方法,即只要主存空闲区总和比作业大就可以满足作业对主存的需求。对打印机和磁带机这两种独占设备采用静态分配法,即作业执行前必须获得所需资源,并且执行完才归还。

实验中作业的调度采用响应比高者优先算法。响应比为作业的等待时间和作业估计执行时间之比。首先计算出输入井中满足条件的作业的响应比,从中选择响应比最高的一个作业装入主存储器,分配资源。由于是模拟实验,可将作业控制块出队装入主存储器的工作用输出作业名模拟,同时修改系统的资源数量。

package OS;import java.util.Arrays;
import java.util.Scanner;public class ProcessSchAlg {public static void main(String[] args) {Scanner scn = new Scanner(System.in);int num=Integer.valueOf(scn.nextLine());String initMessage[]=new String[num];for(int i=0;i<initMessage.length;i++) initMessage[i]=scn.nextLine();List Queue=new List(initMessage);Queue.show(0);for(int i=0;i<num;i++) Queue.show(deal(Queue.getProcess()));}public static int deal(Process p){if(p.large>5){System.out.println("The RAM is not enough,Process "+p.name+" require failed!!!");return 0;}if(p.printer>5){System.out.println("The printer is not enough,Process "+p.name+" require failed!!!");return 0;}if(p.tape>5){System.out.println("The tape is not enough,Process "+p.name+" require failed!!!");return 0;}System.out.println("Process "+p.name+" is under operating...");System.out.println("Process "+p.name+" operated successfully!");return p.needTime;}
}class List{Process head;Process tail;public List(){head=null;tail=null;}public  List(String[] initMessage){head=null;tail=null;for(int i=0;i<initMessage.length;i++) {Process temp =new Process(initMessage[i]);insert(temp);}}public void insert(Process temp){if(head==null){head=temp;head.next=tail;}else if(head.next==null){tail=temp;head.next=tail;}else {tail.next=temp;tail=tail.next;}}public Process getProcess(){double[] lev= new double[10];int index=0;Process p=head;while(p!=null){lev[index]=p.level;index++;p=p.next;}Arrays.sort(lev);p=head;if(p==null)return null;else{if(p.next==null){Process t=new Process();t=head;head=null;return t;}else{Process q=head;if(p.level==lev[9]){Process t=new Process();t=head;head=head.next;return t;}p=p.next;while(p!=null){if(p.level==lev[9]){q.next=p.next;return p;}}}}return null;}public void show(int time){Process p=head;if(p==null) System.out.println("Operate Over!");else {System.out.println("name "+"l\t"+"p\t"+"t\t"+"nT\t"+"wT\t"+"lev");while (p != null) {p.waitTime+=time;p.print();p = p.next;}System.out.println();}}
}class Process{String name;int large;int printer;int tape;int needTime;int waitTime;double level;Process next;public Process(){}public Process(String s) {int[] num= new int[4];int index=0;for(int i=0;i<s.length();i++){if(s.charAt(i)==' ') {num[index]=i;index++;}}this.name=s.substring(0,num[0]);this.large=Integer.valueOf(s.substring(num[0]+1,num[1]));this.printer=Integer.valueOf(s.substring(num[1]+1,num[2]));this.tape=Integer.valueOf(s.substring(num[2]+1,num[3]));this.needTime=Integer.valueOf(s.substring(num[3]+1));}public void print(){level=1+((1.0*waitTime)/needTime);System.out.print(name+"\t"+large+"\t"+printer+"\t"+tape+"\t"+needTime+"\t"+waitTime+"\t");System.out.printf("%.2f",level);System.out.println();}
}

运行结果示范:

操作系统高响应比优先调度算法模拟实验相关推荐

  1. 操作系统高响应比优先调度算法代码_进程调度

    进程调度的定义 进程的调度就是操作系统进程管理的一个重要组成部分. 其任务是选择下一个要运行的进程. 那么如何进行选择呢? 要探明这一点,首先需要确定操作系统进程调度的目标是什么. 有了目标,我们就知 ...

  2. c语言链表最高响应比优先,操作系统--最高响应比优先调度算法实验报告..doc

    操作系统--最高响应比优先调度算法实验报告. 进程调度一.实验题目与要求 编写程序完成批处理系统中的作业调度,要求采用响应比高者优先的作业调度算法.实现具体包括:首先确定作业控制块的内容和组成方式:然 ...

  3. 操作系统调度算法--高响应比优先调度算法解析

    高响应比优先调度算法(Highest Response Radio Next,HRRN)是一种对CPU中央控制器响应比的分配的算法.HRRN是介于FCFS(先来先服务算法)与SJF(短作业优先算法)之 ...

  4. 非抢占的高响应比优先调度算法

    模拟操作系统进程调度 算法流程图 测试数据 进程名: A B C D E 需要运行时间: 3 6 4 5 2 5 ProcA 8 3 ProcB 10 6 ProcC 7 4 ProcD 12 5 P ...

  5. 高响应比优先调度算法 (HRRN)例题

    高响应比优先调度算法(Highest Response Ratio Next)是一种对CPU中央控制器响应比的分配的一种算法.HRRN是介于FCFS(先来先服务算法)与SJF(短作业优先算法)之间的折 ...

  6. 假设有四个作业,它们的提交、运行时间如下表所示。若采用高响应比优先调度算法,试问平均周转时间和平均带权周转时间为多少?

    处理机调度算法 题目: 假设有四个作业,它们的提交.运行时间如下表所示.若采用高响应比优先调度算法,试问平均周转时间和平均带权周转时间为多少? 高响应比优先(HRRN)调度算法 是对FCFS调度算法和 ...

  7. 高响应比优先调度算法

    任务描述 本关任务:编写一个高响应比优先调度算法解决一个实际的进程调度问题,并打印出每个进程的完成时间.周转时间和带权周转时间 相关知识 为了完成本关任务,你需要掌握:1.先来先服务调度算法,2.进程 ...

  8. 先来先服务和高响应比优先调度算法C语言实现

    先来先服务和高响应比优先调度算法C语言实现 目录: 1.进程调度与作业调度的区别: 2.单道批处理系统与多道批处理系统的区别: 3.程序设计用到的公式: 4.高响应比优先算法特点: 5.源代码示例: ...

  9. 《操作系统》实验三:高响应比优先调度和时间片轮转RR进程调度算法

    [实验题目]:高响应比优先调度和时间片轮转RR进程调度算法 [实验学时]:4学时 [实验目的] 通过这次实验,加深对进程调度概念的理解,进一步掌握比FCFS和SJF更为复杂的进程调度算法的实现方法. ...

  10. 作业调度算法【平均周转时间、平均带权周转时间、先来先服务FCFS、短作业优先SJF、高优先权(级)算法FPF、高响应比优先算法HRRN】

    文章目录 先来先服务算法(FCFS) 短作业优先算法(SJF).短进程优先算法(SPF) 周转时间和带权周转时间 高优先权(级)调度算法FPF 高响应比优先调度算法HRRN 先来先服务算法(FCFS) ...

最新文章

  1. 又见yx — 说说IT公司的团队头儿
  2. Windows下安装Objective-C开发环境
  3. c语言 1 2是什么类型,C语言2-C数据类型(1).docx
  4. c# 访问hbase_大数据技术 windows下C#通过Thrift操作HBase
  5. 【转】Magento 2数据库EAV模型结构
  6. DPDK官方中文文档
  7. java 对象查找_通过Java中的参数集查找最合适的对象
  8. 基于深度学习的番茄叶部病害识别模型
  9. C#注册类方法到Lua
  10. 我的世界服务器修改金币上限,我的世界联机盒子修改金币方法
  11. 无偿分享《新版标准日本语》电子版超级方便!!
  12. linux apktool的用法,Apktool的基本用法
  13. android use-feature和market策略
  14. 8. Celery 4.3.0 Periodic Tasks 周期性任务调度
  15. android js下载地址,js点击下载跳转iOS或安卓
  16. 【推荐系统】User-Item CF:GC-MC
  17. 管理模型 - RACI模型
  18. 交换机工作原理/模式
  19. YEP_fpssynchoption
  20. scrapy实现二级页面爬取(以小说为例)

热门文章

  1. web前端如何提升自我
  2. devcon 用法2
  3. android 点餐系统 构思
  4. Linux下libiconv库的安装和使用
  5. libiconv移植
  6. 视频教程_Mastercam2017车削视频教程,数控车床编程视频教程,vericut车床仿真视频...
  7. java poi xml转word文档_使用POI转换word doc文件
  8. java文档注释——生成帮助文档
  9. MaxScript与外部程序通讯
  10. 抓包与发流软件与网络诊断