操作系统作业调度实验报告 多道批处理
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
计算机学院计算机科学与技术专业07班
姓名 ___ 学号—教师评定_____________________
实验题目 __________________ 作业调度______________________
一、实验目的
本实验要求学生模拟作业调度的实现,用高级语言编写和调试一个或多个作业调度的模
拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解。
二、实验内容和要求
1、为单道批处理系统设计一个作业调度程序
(1) 、编写并调试一个单道处理系统的作业调度模拟程序。
(2) 、作业调度算法:分别采用先来先服务( FCFS),最短作业优先(SJF)的调度算法。
(3) 、由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完
成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的CPU时限等因素。
(4) 、每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、
所需的运行时间、所需的资源、作业状态、链指针等等。作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。每个作业的最初状态总是等待W。
(5) 、对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,并比较各种算法的优缺点。
2、模拟批处理多道操作系统的作业调度
(1)写并调试一个作业调度模拟程序。
(2)作业调度算法:分别采用先来服务( FCFS)调度算法。
(3 )在批处理系统中,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求,所需要的资源是否得到满足。
作业调度程序负责从输入井选择若干个作业进入主存,为它们分配必要的资源,当它们能够被进程调度选中时,就可占用处理机运行。作业调度选择一个作业的必要条件是系统中现有的尚未分配的资源可满足该作业的资源要求。但有时系统中现有的尚未分配的资源既
可满足某个作业的要求也可满足其它一些作业要求,那么,作业调度必须按一定的算法在这
些作业中作出选择。当作业正常运行完毕或因发生错误非正常终止时,作业进入完成状态,此时,系统将收回该作业所占用的全部资源,并清除有关的JCB。并输出显示作业运行情况
及作业输出结果。
三、实验设计方案及原理
假设在单道批处理环境下有四个作业JOB1、JOB2、JOB3、JOB4,已知它们进入系统
的时间、估计运行时间。分别采用先来先服务( FCFS),最短作业优先(SJF)调度算法,计算出作业的平均周转时间和带权的平均周转时间。作业p 的周转时间:p->ttime=p->ftime-p->atime 作业的平均周转时间:total= 全部进程的周转时间/进程个数作业p 的带权周转时间:p->wtime =p->ttime/p->ntime 作业的平均带权周转时间:W= 全部进程的带权周转时间/ 进程个数
1先来先服务调度算法(FCFS):每次调度都是从后备作业队列中,选择一个或多个最先
进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,这每次调度是从就绪队列中,选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件阻赛后,才放弃处理机。
2、最短作业优先(SJF):每次从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。
对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,并比较各种算法的优缺点。
3、多道作业调度算法:将作业按FCFS 原则排好队,在输入井中按作业到达的先后次序来挑选作业,先进入输入井的作业优先被挑选,当系统中现有的尚未分配的资源不能满足先进入输入井的作业时,那么顺序挑选后面的作业,把不能满足要求的放回输入井尾部等待,当作业执行结束进入完成状态时,做好释放资源等善后工作。
四、流程图
1 FCFS算法和SJF算法:
计算并打印运行作业P的完成时间ftime , 周
转时间ttime ,带权周转时间wtime
(ftime=btime+ntime;ttime=ftime-atime;wti
me=ttime/ntime )
更改时间量T的值(T=ftime)
继续执行该进
程
(p->rtime)++ 撤销进程,指向下一进程
2.多道作业调度算法
五、给出程序中源程序名和执行程序名:
源程序名:FCFS and SJF,执行程序名:fcfs and sjf.cpp 源程序名:DUODAO 执行程序名:duodao.cpp 六、程序清单
1.FCFS和SJF算法
#include "stdio.h"
#include
#include
#define getpch(type) (type*)malloc(sizeof(type))
struct jcb{
char name[10];
char state;
int atime;// 作业到达时间
int btime;// 作业开始运行时间
int ftime;// 作业完成时间
int ntime;// 作业估计运行时间
int rtime;// 作业执行时间
int ttime;// 周转时间
float wtime;// 带权周转时间(周转时间/估计运行时间)
struct jcb* link;
}*ready=NULL, *p;//ready 指向队头,p 指向正被调度的作业
typedef struct jcb JCB;
int T=0; // 初始化时间量
float total;// 记录所有作业的总时间
double weight;// 记录所有作业的带权周转时间
void sort() /* 建立对作业进行到达时间排列函数*/
{
JCB *first, *second;
int insert=0;
if((ready==NULL)||((p->atime)<(ready->atime))) /* 作业到达时间最短的,插入队首*/ {
p->link=ready;
ready=p;
T=p->atime; // 更改时间量
}
else /* 作业比较到达时间,插入适当的位置中*/
{
first=ready; second=first->link; while(second!=NULL)
{ if((p->atime)<(second->atime)) /* 若插入作业比当前队尾作业到达时间短,*/ { /* 插入到当前队尾作业前面*/
p->link=second; first->link=p;
second=NULL;
insert=1;
}
else /* 插入作业到达时间最长,则插入到队尾*/
{
first=first->link; second=second->link;
}
}