作业调度实验报告 Document number:NOCG-YUNOO-BUYTT-UU986-1986UT
实验二作业调度
一.实验题目
1、编写并调试一个单道处理系统的作业等待模拟程序。
作业调度算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。
(1)先来先服务算法:按照作业提交给系统的先后顺序来挑选作业,先提交的先被挑选。
(2)最短作业优先算法:是以进入系统的作业所提出的“执行时间”为标准,总是优先选取执行时间最短的作业。
(3)响应比高者优先算法:是在每次调度前都要计算所有被选作业(在后备队列中)的响应比,然后选择响应比最高的作业执行。
2、编写并调度一个多道程序系统的作业调度模拟程序。
作业调度算法:采用基于先来先服务的调度算法。
可以参考课本中的方法进行设计。
对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求。
二.实验目的:
本实验要求用高级语言(C语言实验环境)编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解三 .实验过程
<一>单道处理系统作业调度
1)单道处理程序作业调度实验的源程序:
执行程序:
2)实验分析:
1、由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 CPU 时限等因素。
2、每个作业由一个作业控制块JCB 表示,JCB 可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。
作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。
每个作业的最初状态总是等待W 。
3、对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间。
3)流程图:
二.最短作业优先算法
三.高响应比算法
图一.先来先服务流程图
4)源程序: #include <>
#include <>
#include <>
#define getpch(type) (type*)malloc(sizeof(type))
#define NULL 0
int n;
float T1=0,T2=0;
int times=0;
struct jcb .\n",p->name);
free(p); .wait...",time);
if(times>1000)
代替
代替
{printf("\nruntime is too long...error...");getch();} }
else
{
running(min,m); .wait...",time);
times++;
if(times>100){printf("\nruntime is too
long...error");getch();}
}
else{
running(min,m); 来先服务算法.");
printf("\n\t\t\t2.最短作业优先算法.");
printf("\n\t\t\t3.响应比高者优先算法");
printf("\n\t\t\t0.退出程序.");
printf("\n\n\t\t\t\t选择所要操作:");
scanf("%d",&m);
switch(m)
{
case 1:
fcfs(m);
getch();
system("cls");
mune();
break;
case 2:
sjf(m);
getch();
system("cls");
mune();
break;
case 3:
hrn(m);
getch();
system("cls");
mune();
break;
case 0:
system("cls");
break;
default:
printf("选择错误,重新选择.");
getch();
system("cls");
mune();
}
}
main() 择操作的界面
2.输入操作初始信息:
3.先来先服务算法作业调度结果: (调度顺序:a->b->c->d->e)
4.最短作业优先算法作业调度结果(调度顺序: a->d->b->e->c)
5.高响应比算法作业调度结果: (调度顺序 a->b->d->c->e)
<二>多道处理系统作业调度
1)多道处理程序作业调度实验的源程序:
执行程序:
2)实验分析:
采用多道程序设计方法的操作系统,在系统中要经常保留多个运行的作业,以提高系统效率。
作业调度从系统已接纳的暂存在输入井中的一批作业中挑选出若干个可运行的作业,并为这些被选中的作业分配所需的系统资源。
对被选中运行的作业必须按照它们各自的作业说明书规定的步骤进行控制。
采用先来先服务算法算法模拟设计作业调度程序。
(1)、作业调度程序负责从输入井选择若干个作业进入主存,为它们分配必要的资源,当它们能够被进程调度选中时,就可占用处理器运行。
作业调度选择一个作业的必要条件是系统中现有的尚未分配的资源可满足该作业的资源要求。
但有时系统中现有的尚未分配的资源既可满足某个作业的要求也可满足其它一些作业的要求,那么,作业调度必须按一定的算法在这些作业中作出选择。
先来先服务算法是按照作业进入输入井的先后次序来挑选作业,先进入输入井的作业优先被挑选,当系统中现有的尚未分配的资源不能满足先进入输入井的作业时,那么顺序挑选后面的作业。
(2)假定某系统可供用户使用的主存空间共100k,并有5台磁带机。
3)流程图:
4)源程序:
#include <>
#include <>
#include <>
#define getpch(type) (type*)malloc(sizeof(type))
#define NULL 0
int j=0;
int n,i; int times=0; struct jcb 道作业调度演示."); printf("\n\t\t0.退出程序");
printf("\n\t\t\t选择所要的操作:");
printf("\n\n\n\t\t\t\t\t计算机学院软件四班\n");
printf("\t\t\t\t\t蓝小花\n");
printf("\t\t\t\t\t完成日期:2006年12月");
scanf("%d",&m);
switch(m)
{
case 1:
system("cls");
inital();
apply();
running();
getch();
system("cls");
main();
break;
case 0:
system("cls");
break;
default:
system("cls");
main();
}
}
5)调试结果:
1) 界面跟前面的其他几个实验的界面大同小异,这里就不在重复出现界面.下面输出的是作业的初始信息:
2)调度作业,此时的作业情况如下:
3)按回车键,相当于作业继续调度,如下:
4)重复3>,直至作业运行结束;
四.思考题:
1.写出每种算法的调度策略,最后比较各种算法的优缺点。
答:①FCFS算法总是把处理机分配给最先进入就绪队列的进程,一个进程一旦分得处理机,便执行下去,直到该进程完成或阻塞时,才释放处理机。
优点:实现简单. 缺点:没考虑进程的优先级
②SJF算法从就绪队列中选出“下一个CPU执行期”最短的进程,为之分
配处理机。
该算法虽可获得较好的调度性能,但难以准确地知道下一个CPU执行
期,而只能根据每一个进行的执行历史来预测。
③ HRN算法既照顾了短作业,又照顾了作业顺序,不会使长作业长期得不到
运行,但调度前,必须计算响应比,增加了系统的开销.
2.选择调度算法的依据是什么
答:面向用户的准则:周转时间短;响应时间快;截止时间的保证;优先权准则
面向系统的准则:系统吞吐量高;处理机利用率好;各类资源的平衡利用
五.心得体会
每个人对作业调度的算法都存在着一定的理解,这也就是很多同学的算法实现不同的原因.可能是自己理解的不够透彻,我总觉得自己的实验不够完善,还有,可能是自己掌握c语言还不够深,总觉得自己的想法与实现的算法存在着很大差距.希望通过更多的实验,让自己有更大的提高.。