作业调度算法-实验报告

2019-08-30 15:39

作业调度算法模拟

一、课题内容和要求

常见的作业调度算法有先来先服务算法、最短作业优先算法、响应比优先调度算法。

(1) 参考操作系统教材理解这3种算法。 (2) 实现这3个算法。

(3) 已知若干作业的到达时间和服务时间,用实现的算法计算对该组作业进行调度

的平均周转时间Ttime和平均带权周转时间WTtime。

(4) 作业的到达时间和服务时间可以存放在文本文件record.txt中。

(5) 设计简单的交互界面,演示所设计的功能。(可以使用MFC进行界面的设计) (6)可根据自己能力,在完成以上基本要求后,对程序功能进行适当扩充。

二、需求分析

模拟实现作业调度算法,包括:FCFS(先来先服务算法)、SJF(短作业优先算法)、HRN(最高响应比优先算法)、HPF(基于优先数调度算法)。 先来先服务算法:按照各个作业进入系统(输入井)的自然次序来调度算法。

短作业优先算法:优先调度并处理短作业。所谓的“短作业”并不是指物理作业 长度短,而是指作业的运行时间短。

最高响应比优先算法:优先调度并处理响应比最高的作业。

三、概要设计

函数中一些类:

Time类 int hour 小时 int minute 分钟 Job类 Int ID 作业编号 Time enter 进入时间 int requesttime 估计运行时间 int priority 优先数 Time start Time end int Ttime double WTtime 开始时间 结束时间 周转时间 带权周转时间

Schedule类 int size Job *job int *r Int Differ() void HRN() 作业数 作业数组 排序用数组 求时间差 最高响应比优先 schedule() void readFile() void FCFS() void SJF() 构造函数 从文件读信息 先来先服务 短作业优先 主要功能函数的流程图 1、 EDIT1 平均带权周转时间 2、先来先服务:

结束 EDIT2 平均周转时间 EDIT4 平均周转时间 EDIT5 平均带权周转时间 EDIT6 平均周转时间 EDIT7 平均带权周转时间 OnButton1() FCFS OnButton2() SJF 开始 readFile()给变量赋值 OnButton3() HRN 开始

job[i] job[0] i

结束 3、最短作业优先:

Y N

4、最高响应比:

Y N

开始 job[0] 剩余作业按运行时间最短排序 job[i] i

四、详细设计 1、程序代码

MFC头文件a.h内容:

const int defMaxJobNumber = 10; //作业数量的最大值 class Time //时间类 {

public: int hour; int minute; };

class Job //作业类 {

public: int ID; //作业编号 Time enter; //进入时间 int requesttime; //估计运行时间 int priority; //优先数 Time start; //开始时间 Time end; //结束时间 int Ttime; //周转时间 double WTtime; //带权周转时间 };

class schedule //调度类 {

public: int size; //作业数 Job *job; //作业数组 int *r; //排序用数组

int Differ(Time t1,Time t2) //求两个时刻间的时间差t2-t1 { int borrow = (t2.minute

public: schedule() //构造函数 { size = 0;

job = new Job[defMaxJobNumber]; r = new int[defMaxJobNumber-1]; } void readFile() //从文件读信息 { ifstream txtfile; txtfile.open(\

int i = 0; int entertime; while(!txtfile.eof()) { txtfile>>job[i].ID>>entertime>>job[i].requesttime>>job[i].priority; job[i].enter.hour = entertime / 100; //取小时 job[i].enter.minute = entertime % 100; //取分钟 i++; size++; } txtfile.close(); } void FCFS() //先来先服务(First Come First Serve) { int hour,minute,carry; job[0].start = job[0].enter; hour = job[0].requesttime / 60; minute = job[0].requesttime % 60; job[0].end.minute = (job[0].start.minute + minute) % 60; carry = (job[0].start.minute + minute) / 60; //carry是分钟累积超过60商 job[0].end.hour = job[0].start.hour + hour + carry; job[0].Ttime = job[0].requesttime; job[0].WTtime = ((double)job[0].Ttime) / job[0].requesttime; for(int i=1;i

void SJF() //短作业优先(Shortest Job First) { int hour,minute,carry; job[0].start = job[0].enter; hour = job[0].requesttime / 60; minute = job[0].requesttime % 60; job[0].end.minute = (job[0].start.minute + minute) % 60; carry = (job[0].start.minute + minute) / 60; //carry是分钟累积超过60的商 job[0].end.hour = job[0].start.hour + hour + carry; job[0].Ttime = job[0].requesttime; //周转时间 job[0].WTtime = ((double)job[0].Ttime) / job[0].requesttime; //带权周转时间 for(int i=1;i


作业调度算法-实验报告.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:COGNOS服务器安装配置手册

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: