资源预览内容
第1页 / 共17页
第2页 / 共17页
第3页 / 共17页
第4页 / 共17页
第5页 / 共17页
第6页 / 共17页
第7页 / 共17页
第8页 / 共17页
第9页 / 共17页
第10页 / 共17页
亲,该文档总共17页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
实验二、作业调度模拟程序一、 实验目的(1) 加深对作业调度算法的理解;(2) 进行程序设计的训练。二、 实验内容和要求用高级语言编写一个或多个作业调度的模拟程序。单道批处理系统的作业调度程序。作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素。作业调度算法;(1) 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度。总是首先调度在系统中等待时间最长的作业。(2) 短作业优先 (SJF) 调度算法,优先调度要求运行时间最短的作业。(3) 响应比高者优先(HRRN)调度算法,为每个作业设置一个优先权(响应比),调度之前先计算各作业的优先权,优先数高者优先调度。RP (响应比) 作业周转时间 / 作业运行时间每个作业由一个作业控制块JCB表示,JCB可以包含以下信息:作业名、提交(到达)时间、所需的运行时间、所需的资源、作业状态、链指针等等作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种之一。每个作业的最初状态都是等待W。三、 实验方法、步骤及结果测试(1) 原理分析及流程图A.编程工具与文件本实验采用JAVA高级语言编写,用eclipse编程工具,原文件为Task.java ,生成文件有Task.class,统一放在Task包(文件夹)中。B.流程图:单道FCFS算法:单道SJPF算法与单道HRRN算法的流程图与FCFS算法的基本一样,只是第二步中的调度顺序的算法不同,SJPF算法与HRRN算法第二步分别为:SJPF算法:调度执行时间最短的作业投入作业,并修改相应的指针,记录开始时间、完成时间等。HRRN算法:调度后备队列中所有作业响应比高的作业投入作业,并修改相应指针,记录开始时间、完成时间等。(2) 详细程序代码及注释package Task;import java.awt.*;import javax.swing.*;import java.awt.event.*;import java.text.*;class JCB String name;/进程名称 String state=W;/进程状态 int enterTimes ; int needTimes;/运行完所需要时间 int costTimes;/已经使用时间 int startTimes;public class Task extends JApplet private JLabel label_init = new JLabel(进程初始设置); private String process_name = 001, 002, 003, 004, 005; /进程标签 private JTextField field_needtime = new JTextField5; /需要时间设置框 private JTextField field_entertime = new JTextField5;/到达时间设置框 private JLabel label_pname = new JLabel5;/进程名加载标签组 JCB jcb = new JCB5; private JButton button_OK = new JButton(确定); private JButton button_init = new JButton(清空); private JLabel label_zhixing=new JLabel(正在执行); private JLabel label_houbei=new JLabel(后备队列); private JLabel field_txt = new JLabel30; /调度前信息显示框 private JLabel label_after = new JLabel(算法调度); /调度标签 private JButton fcfs = new JButton(FCFS); private JButton sjpf = new JButton(SJPF); private JButton hrrn = new JButton(HRRN); private JLabel zhixing_txt = new JLabel4;/当前执行记录 private JLabel field_after = new JLabel40; /调度后信息显示框 private JLabel label_name = new JLabel(进程名); private JLabel label_enter = new JLabel(到达时间); private JLabel label_need = new JLabel(要求服务时间); private JLabel label_start = new JLabel(开始时间); private JLabel label_cost = new JLabel(已用时间); private JLabel label_over = new JLabel(结束时间); private JLabel label_zhou = new JLabel(周转时间); private JLabel label_dzhou = new JLabel(带权周转时间); private JLabel label_n = new JLabel(进程名); private JLabel label_ne = new JLabel(要求服务时间); private JLabel label_e = new JLabel(到达时间); private JTextField foot = new JTextField(); public Task() /设置该类的构造器 this.setBackground(Color.LIGHT_GRAY); /设置背景颜色 public void init() /解决初始化问题 JPanel panel_top = new JPanel(); panel_top.setLayout(new GridLayout(1, 3); panel_top.add(label_init); for (int i = 0; i 5; i+) jcbi = new JCB(); JPanel panel_init = new JPanel(); panel_init.setLayout(new GridLayout(3, 6); panel_init.add(label_n); for (int i = 0; i process_name.length; i+) /将进程名添加到panel label_pnamei = new JLabel(process_namei, JLabel.CENTER); label_pnamei.setForeground(Color.red); panel_init.add(label_pnamei); panel_init.add(label_ne); /要求服务时间 for (int i = 0; i 5; i+) field_needtimei = new JTextField(); panel_init.add(field_needtimei); panel_init.add(label_e);/到达时间 for (int i = 0; i 5; i+) field_entertimei = new JTextField(); panel_init.add(field_entertimei); JPanel panel_before = new JPanel(); panel_before.add(button_OK); panel_before.add(button_init); button_OK.addActionListener(new InitJBC(); button_init.addActionListener(new Clear(); JPanel panel_1 = new JPanel(); panel_1.setLayout(new BorderLayout(); panel_1.add(panel_top, North); panel_1.add(panel_init, Center); panel_1.add(panel_before,South); JPanel panel_houbeibiao = new JPanel(); panel_houbeibiao.setLayout(new GridLayout(6, 5); panel_houbeibiao.add(new JLabel(进程名); panel_houbeibiao.add(new JLabel(到达时间); panel_houbeibiao.add(new JLabel(要求服务时间); panel_houbeibiao.add(new JLabel(已用时间); panel_houbeibiao.add(new JLabel(状态); for (int j = 0; j 25; j+) field_txtj = new JLabel(); panel_houbeibiao.add(field_txtj); JPanel panel_button = new JPanel(); panel_button.setLayout(new GridLayout(1, 4, 10, 10); panel_button.add(label_after); panel_button.add(fcfs); panel_button.add(sjpf); panel_button.add(hrrn); fcfs.addActionListener(new Fcfs(); sjpf.addActionListener(new Sjf(); hrrn.addActionListener(n
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号