作业调度算法实验报告
(2011-05-09 23:25:47)
标签:
作业调度校园 |
分类: 杂文 |
作业调度算法实验报告
实验名称:
一、实验目的
模拟作业调度算法,学习作业在操作系统中的调度过程,加深对作业管理的理解。特别是作业调度的概念、作业调度与进程调度的区别。培养学生程序设计的方法和技巧,提高学生编制清晰、合理、可读性好的系统程序的能力,加深对操作系统课程的理解,拓宽学生的知识领域,锻炼学生的实践技能。
二、实验要求
本实验模拟单处理器系统的作业调度,加深对作业调度算法的理解。用某种语言编写和调试一个作业调度的算法程序,有一些简单的界面,能够运行,仿真操作系统中作业调度的原理和过程。
1、 在后备作业队列中输入3道作业各自需要的时间及存储空间。数据输入格式如下:
作业编号
0
1
2
2、
3、
4、
5、
6、
7、
三、实验原理
作业调度算法和进程调度算法。其中作业调度算法主要有先来先服务法FCFS、短作业优先法SJF、最高响应比优先法HRN、定时轮转法和优先数法。在进程调度算法中主要介绍了先来先服务法FCFS、轮转法RR、多级反馈轮转法和优先数法。
实验提示
1、
struct JCB{
char JobNum;
char JobName;
…
};
2、
JCB JobArray[MaxNumber];
3、
4、
建立文件:jcb.h;其中存放:
最大作业数;
定义数据结构JCB;
四个作业调度函数;
建立主函数,其中包含:
#include<iostream.h>
#include”jcb.h”
void mian()
{
调用四种算法并输出调度结果;
}
作业调度模拟程序的系统功能结构如图1所示。
|
作 业 调 度 系 统 |
|
先来先服务算法 |
|
短作业优先算法 |
|
高响应比优先算法 |
|
时间片轮 转 算 法 |
|
初始化 |
|
运行作业 |
|
输出运行结果 |
|
初始化 |
|
运行作业 |
|
输出运行结果 |
|
输出运行结果 |
|
运行作业 |
|
初始化 |
图1 作业调度模拟程序系统功能结构图
作业调度算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。
(1)先来先服务算法:按照作业提交给系统的先后顺序来挑选作业,先提交的先被挑选。流程图如图2所示。
|
空 |
|
结 束 |
|
计算并打印这组作业的平均周转时间及带权平均周转时间 |
|
等待队列空? |
|
更改时间量times的值; times:=times+服务时间 |
|
计算并打印运行作业i的完成时刻finishtime,周转时间cycletime,带权周转时间cltime; 完成时间:=开始运行时间+服务时间 周转时间:=完成时间—到达时间 带权周转时间:=周转时间/服务时间 |
|
调度队首的作业投入运行; 更改队首指针,使作业的状态为R,记住作业运行的时刻starttime等 |
|
初始化所有的JBC 使JBC按作业提交的时刻的先后顺序排队 时间量times:=0 |
|
开 始 |
|
不空 |
图2 先来先服务调度算法流程图
(2)最短作业优先算法:是以进入系统的作业所提出的“执行时间”为标准,总是优先选取执行时间最短的作业。流程图如图3所示。
|
空 |
|
结 束 |
|
计算并打印这组作业的平均周转时间及带权平均周转时间 |
|
等待队列空? |
|
更改时间量times的值; times:=times+服务时间 |
|
计算并打印运行作业i的完成时刻finishtime,周转时间cycletime,带权周转时间cltime; 完成时间:=开始运行时间+服务时间 周转时间:=完成时间—到达时间 带权周转时间:=周转时间/服务时间 |
|
调度队首的作业投入运行; 更改队首指针,使作业的状态为R,记住作业运行的时刻starttime等 |
|
初始化所有的JBC 使JBC按作业提交的时刻的先后顺序排队 时间量times:=0 |
|
开 始 |
|
不空 |
图3 短作业优先调度算法流程图
(3)响应比高者优先算法:是在每次调度前都要计算所有被选作业(在后备队列中)的响应比,然后选择响应比最高的作业执行。流程图如图4所示。
|
空 |
|
结 束 |
|
计算并打印这组作业的平均周转时间及带权平均周转时间 |
|
等待队列空? |
|
更改时间量times的值; times:=times+服务时间 |
|
计算并打印运行作业i的完成时刻finishtime,周转时间cycletime,带权周转时间cltime; 完成时间:=开始运行时间+服务时间 周转时间:=完成时间—到达时间 带权周转时间:=周转时间/服务时间 |
|
先计算队列中所有作业的响应比,总是选择响应比最高的走也作为此刻要运行的作业,并修改相应的指针,记下starttime等 |
|
初始化所有的JBC 使JBC按作业提交的时刻的先后顺序排队 时间量times:=0 |
|
开 始 |
|
不空 |
图4响应比高者优先算法流程图
四、实验所需仪器、设备、材料
PC机
五、实验预习要求、实验条件、方法及步骤
1)熟练掌握作业相关的基本概念。
2)熟练掌握作业调度的有关算法。
3)熟练掌握作业调度算法所需的数据结构和算法流程;
4)熟练掌握某一门编程语言,如C、C++或者Dephi等
作业调度算法源代码
#include<stdio.h>
#include <stdlib.h>
#include <conio.h>
#define getpch(type)
(type*)malloc(sizeof(type))
struct worktime{
};
struct jcb
{
}*ready=NULL,*p;
typedef struct jcb JCB;
float T=0;
int N;
JCB
*front,*rear;
void
sort()
{
}
void SJFget()
{
}
void HRNget()
{
}
void creatJCB() //为每个作业创建一个JCB并初始化形成一个循环链队列
{
}
void output()//进程输出函数
{
}
int judge(JCB *p) //判断所有进程运行结束
{
}
void RRget()//时间片轮转算法
{
}
void input()
{
}
int space()
{
}
void disp(JCB* jr,int select)
{
}
int destroy()
{
}
void check(int select)
{
}
void running(JCB* jr)
{
}
int main()
{
}
六、程序运行情况
1、
(1)数据输入:
(2).运行情况:
2、
(1)、数据输入
(2)、运行结果
3、
(1)、数据输入
(2)、运行结果
4、按时间片轮转法进行调度,输出作业调度顺序及各自的等待时间。
(1)、数据输入
(2)、运行结果

加载中…