一、实验名称
作业调度算法实验。
二、实验目标
已知n个作业的进入时间和估计运行时间(以分钟计)
(1)单道环境下,分别用先来先服务调度算法、短作业优先调度算法、响应比高者优先调度算法,求出批作业的平均周转时间和带权平均周转时间;在多道环境(如2道)下,求出这些作业的平均周转时间和带权平均周转时间
(2)就同一批次作业,分别讨论这些算法的优劣;
(3)衡量同一调度算法对不同作业流的性能。
三、实验环境要求
1.PC机。
2.Windows环境。
3.CodeBlocks
四、实验基本原理
(1)先来先服务算法:按照作业提交给系统的先后顺序来挑选作业,先提交的先被挑选。
(2)最短作业优先算法:是以进入系统的作业所提出的“执行时间”为标准,总是优先选取执行时间最短的作业。
( 3)响应比高者优先算法:是在每次调度前都要计算所有被选作业(在后备队列中)的响应比,然后选择响应比最高的作业执行。
(4)两道批处理系统中最短作业优先调度算法:内存中可以进入两个作业,这两个作业按照最短作业优先调度算法调整作业执行的次序。
五、数据结构设计
使用一维数组来保存多个作业Job job[20];,采用的是顺序存储。
使用queue<Jcb *> q保存调度队列里的作业指针。
structDate//时间结构体
{
int hour;//时间的小时
int minute;//时间的分钟
};
struct Jcb//作业结构体,用来描述作业
{
int no;//作业编号
Date enter;//进入时间
int operation;//估计运行时间
Date start;//开始时间
Date over;//结束时间
int turnover;//周转时间
double weighted;//带权周转时间
int state=0;//标记改作业是否进入运行状态
};
六、流程图
单道环境下算法流程图
多道环境下的两道批处理系统中最短作业优先作业调度算法的流程图。
七、源代码
#include<iostream>
#include<stdio.h>
#include<cstring>
#include<algorithm>
#include<queue>
usingnamespace std;
structDate//时间结构体
{
int hour;//时间的小时
int minute;//时间的分钟
};
structJcb//作业结构体,用来描述作业
{
int no;//作业编号
Date enter;//进入时间
int operation;//估计运行时间
Date start;//开始时间
Date over;//结束时间
int turnover;//周转时间
double weighted;//带权周转时间
int state=0;//标记改作业是否进入运行状态
};
//函数声明
voiddisplay(Jcb J[],int n);//输出
voidruning( queue<Jcb *> q,int n);//根据算法将就绪队列排好队后的单道作业的运行主体
voidfcfs( Jcb J[],int n);//先来先服务作业调度
voidsfc(Jcb J[],int n);//最短作业优先作业调度
voidhrfc(Jcb J[],int n);//最高响应比作业调度
voidtext(void (*dispatch)(Jcb J[], int n),Jcb J[],int n,Jcb J1[],int n1, JcbJ2[],int n2);//测试单道环境,不同批次作业,相同算法
voidmulfc(Jcb J[],int n);//两道环境,内存中可以用两个作业,内存中的这两个作业按照作业长短调整作业执行的次序。
//主函数,(1)同一批次作业,分别用先来先服务调度算法、短作业优先调度算法、响应比高者优先调度算法,得到批作业的平均周转时间和带权平均周转时间;(2)同一调度算法对不同作业流的调度。
intmain()
{
int n,n1,n2;
Jcb job[20],job1[20],job2[20];
FILE*p=fopen("example1.txt","r");
fscanf(p, "%d", &n);
//批次一作业
for(int i=0;i<n;i++)<