java作业调度

上传人:沈*** 文档编号:136856810 上传时间:2022-08-17 格式:DOC 页数:17 大小:280KB
收藏 版权申诉 举报 下载
java作业调度_第1页
第1页 / 共17页
java作业调度_第2页
第2页 / 共17页
java作业调度_第3页
第3页 / 共17页
资源描述:

《java作业调度》由会员分享,可在线阅读,更多相关《java作业调度(17页珍藏版)》请在装配图网上搜索。

1、实验二、作业调度模拟程序一、 实验目的(1) 加深对作业调度算法的理解;(2) 进行程序设计的训练。二、 实验内容和要求用高级语言编写一个或多个作业调度的模拟程序。单道批处理系统的作业调度程序。作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素。作业调度算法;(1) 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度。总是首先调度在系统中等待时间最长的作业。(2) 短作业优先 (SJF) 调度算法,优先调度要求运行时间最短的作业。(3) 响应比高者优先(HRRN)调度算法,为每个作业设置一个优先权(响

2、应比),调度之前先计算各作业的优先权,优先数高者优先调度。RP (响应比) 作业周转时间 / 作业运行时间每个作业由一个作业控制块JCB表示,JCB可以包含以下信息:作业名、提交(到达)时间、所需的运行时间、所需的资源、作业状态、链指针等等作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种之一。每个作业的最初状态都是等待W。三、 实验方法、步骤及结果测试(1) 原理分析及流程图A.编程工具与文件本实验采用JAVA高级语言编写,用eclipse编程工具,原文件为Task.java ,生成文件有Task.class,统一放在Task包(文件夹)中。B.流程图:单道FC

3、FS算法:单道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 nam

4、e;/进程名称 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 JTextField

5、5; /需要时间设置框 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 l

6、abel_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

7、;/当前执行记录 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(已用时间); priva

8、te 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 JTe

9、xtField(); 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.s

10、etLayout(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+) fi

11、eld_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.a

12、ddActionListener(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.se

13、tLayout(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(fi

14、eld_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(new H

15、rn(); fcfs.setEnabled(false); sjpf.setEnabled(false); hrrn.setEnabled(false); fcfs.setToolTipText(先来先服务算法); sjpf.setToolTipText(段作业优先算法); hrrn.setToolTipText(最高响应比算法); JPanel panel_2 = new JPanel(new BorderLayout(2,2); panel_2.add(label_houbei,North); panel_2.add(panel_houbeibiao, Center); panel_2.a

16、dd(panel_button,South); /后备表结束 JPanel panel_zhixingbiao=new JPanel(); panel_zhixingbiao.setLayout(new GridLayout(2,5); panel_zhixingbiao.add(new JLabel(进程名); panel_zhixingbiao.add(new JLabel(到达时间); panel_zhixingbiao.add(new JLabel(要求服务时间); panel_zhixingbiao.add(new JLabel(状态); panel_zhixingbiao.add(

17、new JLabel(现在时间); for (int j = 0; j 4 ; j+) zhixing_txtj = new JLabel(); panel_zhixingbiao.add(zhixing_txtj); JPanel panel_zhixing=new JPanel(new GridLayout(2,1); panel_zhixing.add(label_zhixing,North); panel_zhixing.add(panel_zhixingbiao,Center); panel_zhixing.add(label_cost,South); JPanel panel_lz

18、 = new JPanel(); panel_lz.setLayout(new GridLayout(6, 8, 4, 4); panel_lz.add(label_name); /进程名 panel_lz.add(label_enter); /到达时间 panel_lz.add(label_need); /需要时间 panel_lz.add(label_start); /开始时间 panel_lz.add(label_over);/完成时间 panel_lz.add(label_cost); /已用时间 panel_lz.add(label_zhou); /周转时间 panel_lz.add

19、(label_dzhou);/带权周转时间 for (int i = 0; i 40; i+) field_afteri = new JLabel(); panel_lz.add(field_afteri); JPanel panel_3 = new JPanel(new BorderLayout(); panel_3.add(panel_lz, Center); panel_3.add(foot,South); foot.setEnabled(false); foot.setDisabledTextColor(Color.red); /*布局整体结构*/ JPanel panel11=new

20、 JPanel(new BorderLayout(2,1);/上面两个表的布局 panel11.add(panel_1,North); panel11.add(panel_2,South); JPanel panel22=new JPanel(new BorderLayout(2,1); panel22.add(panel_zhixing,North); panel22.add(panel_3,South) ; getContentPane().setLayout(new BorderLayout(5, 5); getContentPane().add(panel11, North); get

21、ContentPane().add(panel22, South); class InitJBC implements ActionListener public void actionPerformed(ActionEvent e) try function(); catch(NumberFormatException e1) JOptionPane.showMessageDialog(null,请输入正确的参数,error,JOptionPane.ERROR_MESSAGE); fcfs.setEnabled(true); sjpf.setEnabled(true); hrrn.setEn

22、abled(true); void function() throws NumberFormatException for (int i = 0; i 5; i+) jcbi.name = process_namei; try jcbi.enterTimes = Integer.parseInt(field_entertimei.getText(); jcbi.needTimes = Integer.parseInt(field_needtimei.getText(); catch(NumberFormatException e) throw e; for (int j = 0, i = 0;

23、 j 5; j+) field_txti.setText(jcbj.name); i+; field_txti.setText(String.valueOf(jcbj.enterTimes); i+; field_txti.setText(String.valueOf(jcbj.needTimes); i+; field_txti.setText(String.valueOf(jcbj.costTimes); i+; field_txti.setText(jcbj.state); i+; class Clear implements ActionListener public void act

24、ionPerformed(ActionEvent e) for (int i = 0; i 5; i+) jcbi.costTimes=0; jcbi.enterTimes=0; jcbi.needTimes=0; jcbi.startTimes=0; field_needtimei.setText(); field_entertimei.setText(); for(int i=0;i30;i+) field_txti.setText(); for (int i = 0; i 40; i+) field_afteri.setText(); fcfs.setEnabled(false); sj

25、pf.setEnabled(false); hrrn.setEnabled(false); class Fcfs implements ActionListener public void actionPerformed(ActionEvent e) try sjpf.setEnabled(false); hrrn.setEnabled(false); use(1); sjpf.setEnabled(true); hrrn.setEnabled(true); catch (Exception e1) e1.getMessage(); class Sjf implements ActionLis

26、tener public void actionPerformed(ActionEvent e) try fcfs.setEnabled(false); hrrn.setEnabled(false); use(2); fcfs.setEnabled(true); hrrn.setEnabled(true); catch (Exception e1) e1.getMessage(); class Hrn implements ActionListener public void actionPerformed(ActionEvent e) try fcfs.setEnabled(false);

27、sjpf.setEnabled(false); use(3); fcfs.setEnabled(true); sjpf.setEnabled(true); catch (Exception e1) e1.getMessage(); void use(int pram) throws java.lang.InterruptedException int a = 0, 1, 2, 3, 4; int temp, n = 5, time = 0; int visit=0,0,0,0,0; int overtime=0; int k1=0; int min=0; boolean go=false; D

28、ecimalFormat df=new DecimalFormat(0.00); /FCFS/ if(pram=1) for(int j=0;j5;j+) temp=1000; for(int i=0;ijcbi.enterTimes&visiti=0) k1=i; temp=jcbi.enterTimes; visitk1=1; aj=k1; /SJPF/ if(pram=2) int k=0;double temp0=0;for(int m=0;m5;m+) go=false; for(int i=0;i5;i+) if(visiti=0)/visit用来标记jcb是否已经被排序 if(t

29、emp0=0) if(overtime=0) for(int b=0;bjcbb.needTimes) k1=b; if(minjcbb.enterTimes) min = jcbb.enterTimes; k1=b; a0=k1;/因为overtime=0 所以将k1赋给a0表明第k1个作业最先运行 visitk1=1; go=true;/go标志用来第一个作业与其他的作业 overtime=jcbk1.enterTimes+jcbk1.needTimes;/overtime用来表示当前系统已经用了的时间 break; temp0=jcbi.needTimes;/用needtime来比较谁优

30、先 k=i; double x=jcbi.needTimes;/找到时间最小的置换将作业号赋给k if(temp0x&jcbi.enterTimesovertime) temp0=x; k=i; if(go=false) am=k; visitk=1; if(overtimejcbk.enterTimes)/处理当前一个作业结束时,后面的作业还没有到的情况 overtime = jcbk.enterTimes + jcbk.needTimes; overtime = overtime + jcbk.needTimes;/跟新overtimetemp0=0;/ run=run+need;/HRR

31、N/ if(pram=3) int k=0; double temp0=0; for(int m=0;m5;m+) go=false; for(int i=0;i5;i+) if(visiti=0) if(temp0=0) if(overtime=0) for(int b=0;bjcbb.enterTimes) min = jcbb.enterTimes; k1=b; a0=k1; visitk1=1; go=true; overtime=jcbk1.enterTimes+jcbk1.needTimes; break; temp0=(double)(overtime-jcbi.enterTim

32、es)/jcbi.needTimes+1.0; k=i; double x=(double)(overtime-jcbi.enterTimes)/jcbi.needTimes+1.0; if(temp0x) temp0=x; k=i; if(go=false) am=k; visitk=1; if(temp0-1.00)/处理当前一个作业结束时,后面的作业还没有到的情况 overtime = jcbk.enterTimes + jcbk.needTimes; overtime = overtime + jcbk.needTimes; temp0=0; / run=run+need; doubl

33、e total_zhou=0; double total_dzhou=0; for (int j = 0, i = 0; j jcbaj.enterTimes) jcbaj.startTimes = jcbaj - 1.startTimes + jcbaj-1.needTimes; else jcbaj.startTimes=jcbaj.enterTimes; field_afteri.setText(String.valueOf(jcbaj.startTimes); i+; field_afteri.setText(String.valueOf(jcbaj.startTimes + jcba

34、j.needTimes); i+; field_afteri.setText(String.valueOf(jcbaj.needTimes); i+; int overtime1 = jcbaj.startTimes + jcbaj.needTimes - jcbaj.enterTimes; total_zhou=total_zhou+overtime1; field_afteri.setText(String.valueOf(overtime1); i+; total_dzhou=(double)overtime1/jcbaj.needTimes + total_dzhou; field_a

35、fteri.setText(String.valueOf( df.format(double)overtime1/jcbaj.needTimes); i+; foot.setText(作业平均周转时间为+String.valueOf(df.format(total_zhou/5)+ 作业平均带权周转时间为+String.valueOf(df.format(total_dzhou/5); public static void main(String args) JApplet applet=new Task(); JFrame frame = new JFrame(daniel); frame.

36、setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.getContentPane().add(applet); frame.setVisible(true); (3) 运行结果及分析a.作业调度程序运行后初始状态如下图2-1;b.输入测试数据后确定,数据进入队列,并激活FCFS、SJPF、HRRN三个按键,如下图2-2;c. 点击FCFS,进行FCFS算法作业调度,结果如下图2-3;d. 点击SJPF,进行SJPF算法作业调度,结果如下图2-3;e. 点击HRRH,进行HRRH算法作业调度,结果如下图2-3;四、 实验总结此次实验比较有挑战性,此次实验我依然选择了JAVA语言,在开始作这个实验时,有点不知从何入手,但经过参考了老师与网上的例子,虽然大多都是C语言的例子,但我反复的琢磨了很久,慢慢的消化了C语言中的思路,从中找到了突破口,从而进行以上的编写。虽然离目标还有一定的距离,没有作出后备队列与当前执行作业的动态调度,但总体功能可用。接下来我将继续对我的程序进行完善。I17

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!