源代码

被测代码

Schedule

package net.mooctest;import java.util.ArrayList;
import java.util.List;public class Schedule {public List<Double> FCFS(List<Work> works) {double avgCircleTime = 0;double avgCircleTimeWP = 0;List<Double> lst = new ArrayList<Double>();for (int i = 0; i < works.size(); i++) {// works.get(i).getArrivalTime();// works.get(i).getServiceTime();if (i != 0) {works.get(i).setBeginTime(works.get(i - 1).getEndTime());} else {works.get(i).setBeginTime(works.get(i).getArrivalTime());}works.get(i).setEndTime(works.get(i).getBeginTime()+ works.get(i).getServiceTime());avgCircleTime += works.get(i).getCircleTime();avgCircleTimeWP += works.get(i).getCircleWPTime();}avgCircleTime /= works.size();avgCircleTimeWP /= works.size();lst.add(avgCircleTime);lst.add(avgCircleTimeWP);return lst;}/*** 改后的短作业优先调度算法* * @param works* @return*/public List<Double> SJF(List<Work> works) {List<Double> lst = new ArrayList<Double>();double avgCircleTime = 0;double avgCircleTimeWP = 0;List<Work> ins = new ArrayList<Work>();int i = 0;int counter = 0; // 已完成作业的计数器// 判断是否已经把所有的作业都处理完毕while (counter < works.size()) {// 找到所有未执行,且到达时间小于i的作业for (int j = 0; j < works.size(); j++) {if (works.get(j).isIn())continue;if (works.get(j).getArrivalTime() <= i) {ins.add(works.get(j));}}if (ins.isEmpty()) {i++;} else {ins = sortByServiceTime(ins);// 将当前已到达的作业中,服务时间最短的作业加入到CPU执行Work now = ins.get(0);now.setBeginTime(i);now.setEndTime(now.getBeginTime() + now.getServiceTime());now.setIn(); // 标记作业已调度counter++;i = now.getEndTime(); // 更新当前时间ins.clear(); // 清空临时数组ins}}for (int m = 0; m < works.size(); m++) {avgCircleTime += works.get(m).getCircleTime();avgCircleTimeWP += works.get(m).getCircleWPTime();}avgCircleTime = avgCircleTime / works.size();avgCircleTimeWP = avgCircleTimeWP / works.size();lst.add(avgCircleTime);lst.add(avgCircleTimeWP);return lst;}/*** 对加入到系统中的作业依据服务时间多少进行排序<BR>* 然后直接返回* * @param ins* @return ins*/public static List<Work> sortByServiceTime(List<Work> ins) {for (int i = 0; i < ins.size(); i++) {for (int j = i + 1; j < ins.size(); j++) {Work aw = ins.get(i);int a = aw.getServiceTime();Work bw = ins.get(j);int b = bw.getServiceTime();if (a > b) {ins.remove(j);ins.add(i, bw);}}}return ins;}
}

Work

package net.mooctest;
public class Work {/** 作业名*/private String name;/** 作业到达时间*/private int arrivalTime;/** 作业服务时间*/private int serviceTime;/** 开始执行时间*/private int beginTime;/** 完成时间*/private int endTime;/** 作业是否调入系统*/private boolean in=false;/*** 作业已调入*/public void setIn(){this.in=true;}/*** 判断作业是否已调入系统* @return*/public boolean isIn(){return this.in;}/*** Constructor* @param name* @param t1* @param t2*/public Work(String name,int t1,int t2){this.name=name;this.arrivalTime=t1;this.serviceTime=t2;}/*** 设置开始执行时间* @param t*/public void setBeginTime(int t){this.beginTime=t;}/*** 获取开始时间* @return*/public int getBeginTime(){return this.beginTime;}/*** 设置完成时间* @param t*/public void setEndTime(int t){this.endTime=t;}/*** 获取结束时间* @return*/public int getEndTime(){return this.endTime;}/*** 计算“周转时间”=完成时间-到达时间* @return int*/public int getCircleTime(){return this.endTime-this.arrivalTime;}/*** 计算“带权周转时间”=周转时间/服务时间* @return*/public double getCircleWPTime(){return ((double)getCircleTime())/this.serviceTime;}/*** 计算"响应比"=(等待时间+要求服务时间)/要求服务时间=响应时间/要求服务时间* @return*/public int getPriority(){//TODOreturn 0;}/***获取到达时间* @return*/public int getArrivalTime(){return this.arrivalTime;}/*** 获取服务时间* @return*/public int getServiceTime(){return this.serviceTime;}
}

测试代码

ScheduleTest

package net.mooctest;import static org.junit.Assert.*;import org.junit.Test;import java.util.ArrayList;
import java.util.List;public class ScheduleTest {@Testpublic void testFCFS() {Schedule s = new Schedule();List<Work> l = new ArrayList<>();l.add(new Work("P1",0,7));l.add(new Work("P2",2,4));l.add(new Work("P3",4,1));l.add(new Work("P4",5,4));List<Double> outcome =  s.FCFS(l);assertEquals(8.75,outcome.get(0),0.001);assertEquals(3.5,outcome.get(1),0.001);}@Testpublic void testSJF01(){Schedule s = new Schedule();List<Work> l = new ArrayList<>();l.add(new Work("P1",1,7));l.add(new Work("P2",2,4));l.add(new Work("P3",4,1));l.add(new Work("P4",5,4));l.add(new Work("P5",1,5));l.add(new Work("P6",2,4));l.add(new Work("P7",4,1));l.add(new Work("P8",5,6));l.add(new Work("P9",3,3));List<Double> outcome =  s.SJF(l);assertEquals(14.111,outcome.get(0),0.001);assertEquals(3.518,outcome.get(1),0.001);}@Testpublic void testWork(){assertEquals(0,new Work("P1",0,5).getPriority());}}

测试结果

参考文章

幕测平台_使用Junit测试Schedule_进程_短作业优先调度算法_先来先服务算法

软件测试——进程调度(短作业优先调度算法+先来先服务算法)测试相关推荐

  1. C#进程调度的模拟实现:模拟先来先服务调度算法、短作业优先调度算法和优先级调度算法(考虑非抢占式和抢占式),进行算法评价,输出调度结果和算法评价指标。

    没什么水平,希望能帮到你 环境:visual studio 2019 附带工程资源:C#进程调度的模拟实现附带资源-C#文档类资源-CSDN下载 先来先服务的调度算法:是一种非抢占式的算法,先来先服务 ...

  2. 短作业优先算法c语言实现,OS短作业优先调度算法C语言

    OS短作业优先调度算法C语言 采用短作业优先调度算法调度程序 学 号: 姓 名: 专 业: 指导老师: 日 期: 目录 一.实验题目3 二.课程设计的目的3 三.设计内容3 四.设计要求3 五.主要数 ...

  3. 先来先服务和短作业优先调度算法

    先来先服务调度算法:系统按照作业到达的先后次序来进行调度,或者说它优先考虑在系统中等待时间最长的作业,而不管该作业所需执行时间的长短,从后备作业队列中选择几个最先进入该队列的作业,将它们调入内存,为它 ...

  4. 设有 4道作业,它们的提交时间及执行时间如下,试计算在单道程序环境下,采用先来先服务调度算法和短作业优先调度算法时的平均周转时间和平均带权周转时间,并指出它们的调度顺序。

    处理机调度算法 题目: 设有 4道作业,它们的提交时间及执行时间如下: 试计算在单道程序环境下,采用先来先服务调度算法和短作业优先调度算法时的平均周转时间和平均带权周转时间,并指出它们的调度顺序. 先 ...

  5. 操作系统第一次实验-短作业优先调度算法

    一.实验目的: 目的:了解并掌握作业调度的功能,熟悉并掌握各种作业调度算法. 任务:模拟实现先来先服务或者短作业优先调度算法. 二.实验内容: 模拟实现SJF调度. 设置作业体:作业名,作业的到达时间 ...

  6. 操作系统:先来先服务调度算法以及短作业优先调度算法C语言实现

    FCFS(先来先服务)和SJF(短作业优先)调度算法 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度.当在作业调度中采用该算法时,每次调度都是从后备作业 ...

  7. 先来先服务和短作业优先调度算法-C语言实现

    算法介绍 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度.当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将 ...

  8. 进程调度算法-短作业优先调度算法(SJF)

    基本思想 SJF算法是以作业的长度来计算优先级,作业越短,其优先级越高.作业的长短是作业所要求的运行时间来衡量的. 算法性能评价 面向用户 周转时间 从作业被提交给系统开始,到作业完成为止的这段时间间 ...

  9. 【JAVA操作系统——进程调度】非抢占式短作业优先算法

    测试要求 进程信息如下: 进程 到达时间 服务时间 A 0 3 B 1 6 C 2 4 D 3 9 E 4 1 请输出进程的调度过程,以及系统平均带权周转时间. 代码实现 package com.zj ...

最新文章

  1. 多语言php,多语言 · ThinkPHP5.0完全开发手册 · 看云
  2. vue全家桶项目搭建(vue-cli 2.9.6+vue-router+vuex+axios)
  3. python工资等级分类程序-php项目中用python来预测薪资(工资)
  4. 【自动驾驶】定位方式:RTK定位与激光融合定位
  5. 分布式ID生成器(来源:架构师之路,2017-06-25 58沈剑 架构师之路)
  6. 数学界的高冷之王,N次拒绝巨额奖金:我穷,但是我不缺钱。。。
  7. 运行sre10_在生产中运行Java:SRE的观点
  8. 深入解读Service Mesh的数据面Envoy
  9. ajax返回功能,jquery – 记得ajax在点击返回按钮时添加的数据
  10. matlab 韩明距离_科学网—Matlab中 pdist 函数详解(各种距离的生成) - 朱新宇的博文...
  11. ac自动机 匹配最长前缀_傻傻分不清吗?——Trie Tree,字典树、前缀树概述
  12. 知识图谱在推荐系统中的应用全面调研
  13. c语言 发纸牌 实验报告,“21点”纸牌游戏实验报告
  14. 贷款等额本金与等额本息还款计算器python3实现
  15. 哪款无线蓝牙耳机性价比高?性价比高的无线蓝牙耳机推荐
  16. Mac电脑C语言开发的入门帖
  17. python第六章答案_python第六章
  18. 光纤入户后,光猫怎么放?
  19. C语言PAT刷题 - 1027 打印沙漏
  20. cmd调取windows组件的dos命令大全和常用网络工具,及Linux系统下命令大全

热门文章

  1. 克制linux启动盘,制作Linux启动盘的四种方法
  2. linux系统的数据库是本地吗,Linux下MySQL无法在本地以非root用户身份连接数据库...
  3. 计算机音乐乡间小路,《乡间的小路课件》初中音乐湘文艺2011课标版七年级下册课件.ppt...
  4. utf8 bom 去掉 java_utf-8-BOM删除bom
  5. 怎么ping虚拟计算机,虚拟机和主机如何互ping,以及虚拟机网络配置遇到的那些坑...
  6. java中的枚举类_java中的枚举类型
  7. vpython 贞测碰撞_7、Pygame碰撞检测
  8. 哪个相机可以拍gif动图_直接拍摄gif动图的手机app你见过吗
  9. listView分批和分页加载数据
  10. 【机器学习算法专题(蓄力计划)】八、机器学习中数据的方差分析