实验1 作业调度
一.实验目的
了解作业调度的算法,理解两道批处理系统的作业调度过程。
二.实验内容
《操作系统》课本例题:
假设两道环境下有四个作业,已知它们进入系统的时间、估计运行时间。系统采用最高响应比作业调度算法,作业被调度运行后不再推出,但当一新作业投入运行后,可按照作业运行时间长短调整作业执行的顺序。给出这四个作业的执行时间序列,并计算出平均周转时间和带权平均周转时间。
图1 作业的相关信息
三.实验原理
(一)数据结构设计
将作业块设计如下,包括作业名、id、进入时间、估计运行时间、开始时间、结束时间、周转时间、还需要时间、带权周转时间、状态。
typedef struct PCBSTRUCT
{
char name[10];
int id;
Clock arritime;//进入时间
int waittime;//当前等待时间
double R;//响应比
int runtime;//估计运行时间
Clock starttime;//开始时间
Clock endtime;//结束时间
int ttime;//周转时间
int needtime;
double wtime;//带权周转时间
string status;//FINISH,RUN,READY,WAIT
}PCB;
(二)作业调度:最高相应比算法原理
最高响应比优先法(HRN,Highest Response_ratio Next)是对FCFS方式和SJF方式的一种综合平衡。FCFS方式只考虑每个作业的等待时间而未考虑执行时间的长短,而SJF方式只考虑执行时间而未考虑等待时间的长短。因此,这两种调度算法在某些极端情况下会带来某些不便。HRN调度策略同时考虑每个作业的等待时间长短和估计需要的执行时间长短,从中选出响应比最高的作业投入执行。
响应比R定义如下: R =(W+T)/T = 1+W/T
(三)进程调度:最短作业优先算法原理
以作业长短来确定优先级,作业越短优先级越高,作业的长短用作业所需的运行时间来衡量,此算法一样也可以用做进程调度,它将从外存的作业后备队列中选择若干个估计运行时间最短的作业,优先将它们调入内存运行。此处进程调度是选取还需时间最少的进程进行调度,算法类似于最短作业优先。
四. 源代码
using namespace std;
#include <iostream>
#include<string.h>
#include<iomanip>
class Clock {
private:
int hour;
int min;
public:
int gethour()
{
return this->hour;
}
int getmin()
{
return this->min;
}
void setclock(int h, int m)
{
hour = h;
min = m;
}
void add()
{
if (min < 60)
min++;
else
{
hour++;
min = 0;
}
}
int operator-(const Clock& b) //this-b
{
Clock c;
if (this->min > b.min)
{
c.min = this->min - b.min;
}
else
{
c.min = (this->min + 60) - b.min;
this->hour--;
}
c.hour = this->hour - b.hour;
int m = c.hour * 60 + c.min;
return m;
}
Clock operator+(const Clock& b) //this+b
{
Clock c;
c.min = this->min + b.min;
c.hour = this->hour + b.hour;
if (c.min >= 60)
{
c.min = c.min - 60;
c.