作业调度实验报告Word格式文档下载.docx
- 文档编号:18161098
- 上传时间:2022-12-13
- 格式:DOCX
- 页数:17
- 大小:137.05KB
作业调度实验报告Word格式文档下载.docx
《作业调度实验报告Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《作业调度实验报告Word格式文档下载.docx(17页珍藏版)》请在冰豆网上搜索。
structjcb//作业控制块
{
charname[10];
//作业名
intreachtime;
//intstarttime;
//intneedtime;
//floatsuper;
//intfinishtime;
//floatcycletime;
//floatcltime;
//
charstate;
structjcb*next;
//}*ready=NULL,*p,*q;
typedefstructjcbJCB;
voidinize()//{
作业到达时间
作业开始时间作业需要运行的时间作业的响应比作业完成时间作业周转时间作业带权周转时间作业状态结构体指针
初始化界面
*\t\t
printf("
\n\n\t\t
\n"
);
\t\t\t\t实验二作业调度\n"
*\t\t\n"
)
\t\t********************************************
\n\n\n\t\t\t\t\t计算机学院软件四班\n"
printf("
\t\t\t\t\t蓝小花\n"
\t\t\t\t\t3204007102\n"
\t\t\t\t\t
\n\n\n\t\t
getch();
}
voidinital()
//
完成日期:
2006年11月17号"
请输入任意键进入演示过程\n"
建立作业控制块队列,先将其排成先来先服务的模式队
inti;
\n输入作业数:
"
scanf("
%d"
&
n);
for(i=0;
i<
n;
i++)
p=getpch(JCB);
\n输入作业名:
scanf("
%s"
p->
name);
p->
reachtime=i;
作业默认到达时间:
i);
\n输入作业要运行的时间:
p->
needtime);
state='
W'
;
next=NULL;
if(ready==NULL)ready=q=p;
else{q->
next=p;
q=p;
voiddisp(JCB*q,intm)//显示作业运行后的周转时间及带权周转时
间等
if(m==3)//显示高响应比算法调度作业后的运行情况{
\n作业%s正在运行,估计其运行情况:
\n"
q->
开始运行时刻:
%d\n"
starttime);
完成时刻:
finishtime);
周转时间:
%f\n"
cycletime);
带权周转时间:
cltime);
相应比:
%f\n"
super);
else//显示先来先服务,最短作业优先算法调度后作业的运行情况
\n作业%s正在运行,估计其运行情况:
getch();
voidrunning(JCB*p,intm)//运行作业
if(p==ready)//先将要运行的作业从队列中分离出来{
ready=p->
next;
}else
{q=ready;
while(q->
next!
=p)q=q->
q->
next=p->
计算作业运行后的完成时间,周转
starttime=times;
//时间等等
R'
finishtime=p->
starttime+p->
needtime;
cycletime=(float)(p->
finishtime-p->
reachtime);
cltime=(float)(p->
cycletime/p->
T1+=p->
cycletime;
调用disp()函数,显示作业运行情况
T2+=p->
cltime;
disp(p,m);
//times+=p->
F'
\n%scontinue...\n"
free(p);
//getch();
voidsuper()//
JCB*padv;
padv=ready;
do{if(padv->
state=='
&
padv->
reachtime<
=times)
super=(float)(times-padv->
reachtime+padv->
needtime)/padv->
needtime
padv=padv->
}while(padv!
=NULL);
voidfinal()//最后打印作业的平均周转时间,平均带权周转时间{
floats,t;
t=T1/n;
s=T2/n;
作业已经全部完成!
\n\n
\n%d个作业的平均周转时间是:
%f"
n,t);
\n%d个作业的平均带权周转时间是%f:
\n\n\n"
n,s);
voidhrn(intm)//高响应比算法
JCB*min;
inti,iden;
system("
cls"
inital();
p=min=ready;
iden=1;
super();
do{if(p->
=times)if(iden)
{min=p;
iden=0;
elseif(p->
super>
min->
super)min=p;
p=p->
}while(p!
if(iden)
i--;
times++;
//printf("
\ntime=%d:
\tnoJCBsubmib...wait..."
time);
if(times>
1000)
{printf("
\nruntimeistoolong...error..."
}}
else
{running(min,m);
//调用running()函数}
}//forfinal();
//调用running()函数
voidsjf(intm)//最短作业优先算法
inti,iden;
for(i=0;
=times)if(iden){
min=p;
needtime<
needtime)min=p;
=NULL);
if(iden){
JCB
//printf("
\tno
submib...wait..."
too
100){printf("
\nruntimeislong...error"
else{
running(min,m);
}//for
final();
voidfcfs(intm)//先来先服务算法
inital();
{p=ready;
=times)iden=0;
if(iden)p=p->
=NULL&
iden);
\n没有满足要求的进程,需等待"
times++;
\n时间过长"
running(p,m);
//}voidmune(){intm;
调用running()函数
\t\t\t\t
作业调度演示\n"
\t\t*********************************************\t\t\n"
\n\n\n\t\t\t1.
\n\t\t\t2.
\n\t\t\t3.
\n\t\t\t0.printf("
\n\n\t\t\t\tscanf("
m);
switch(m)
case1:
fcfs(m);
mune();
break;
case2:
sjf(m);
case3:
先来先服务算法."
最短作业优先算法."
响应比高者优先算法"
退出程序."
选择所要操作:
hrn(m);
mune();
break;
case0:
system("
default:
选择错误,重新选择."
main()//主函数
inize();
5)调试结果:
1.选择操作的界面
2.输入操作初始信息:
3.先来先服务算法作业调度结果:
(调度顺序:
a->
b->
c->
d->
e)
4.最短作业优先算法作业调度结果(调度顺序:
a->
e->
c)
5.高响应比算法作业调度结果:
(调度顺序a->
二>
多道处理系统作业调度
1)多道处理程序作业调度实验的源程序:
duodao.c
duodao.exe
2)实验分析:
采用多道程序设计方法的操作系统,在系统中要经常保留多个运行的作业,以提高系统效率。
作业调度从系统已接纳的暂存在输入井中的一批作业中挑选出若干个可运行的作业,并为这些被选中的作业分配所需的系统资源。
对被选中运行的作业必须按照它们各自的作业说明书规定的步骤进行控制。
采用先来先服务算法算法模拟设计作业调度程序。
(1)、作业调度程序负责从输入井选择若干个作业进入主存,为它们分配必要的资源,当它们能够被进程调度选中时,就可占用处理器运行。
作业调度选择一个作业的必要条件是系统中现有的尚未分配的资源可满足该作业的资源要求。
但有时系统中现有的尚未分配的资源既可满足某个作业的要求也可满足其它一些作业的要求,那么,作业调度必须按一定的算法在这些作业中作出选择。
先来先服务算法是按照作业进入输入井的先后次序来挑选作业,先进入输入井的作业优先被挑选,当系统中现有的尚未分配的资源不能满足先进入输入井的作业时,那么顺序挑选后面的作业。
(2)假定某系统可供用户使用的主存空间共100k,并有5台磁带机。
3)流程图:
4)源程序:
#defineNULL0
intj=0;
intn,i;
//n为需要输入的作业数量
//初始化周转时间,带权周转时间.
\n输入用户名:
username);
输入作业名:
输入作业运行要占用的内存:
frees);
输入作业运行所需磁带:
disks);
runtime=0;
先将其按到达的先后顺序排成后备序列
}intspace()//计算内存中作业的个数
{intl=0;
JCB*pr=start;
while(pr!
=NULL)
{l++;
pr=pr->
return(l);
voidapply()//把符合条件的作业调用内存,并给他们分配资源,
{intlen;
p=ready;
while(p!
{if(p->
frees<
=freesa&
disks<
=disksa)
{freesa-=p->
frees;
disksa-=p->
disks;
r=p;
if(r==ready)//先将符合条件的作业从队列中分离出来{
ready=r->
r->
}else
q=ready;
=r)q=q->
q->
next=r->
if(start==NULL)start=s=r;
//将其插到start队列,else{
s->
next=r;
s=r;
p=p->
len=space();
\n\t此时有%d道作业在内存\n\n"
len);
voiddisp(JCB*pr)/*建立作业显示函数*/
|%s\t"
pr->
|%c\t"
state);
|%d\t"
runtime);
voidcheck()//显示作业状况
\n作业%s于完成%d个作业后运行完毕,其完成后的情况:
name,j);
j++;
\n用户名****作业名****状态****到达时间*需运行时间*已运行时
间*需占用内存*需磁带数量\n"
disp(q);
s=start;
\n\t\t*********当前进入内存的作业状态*********"
while(s!
disp(s);
s=s->
r=ready;
*\n\n\t\t*********当前后备作业表中作业的状态**********"
while(r!
disp(r);
r=r->
运行作业
voidrunning()//
for(t=start;
t!
=NULL;
{start=t->
q=t;
runtime++;
t=start;
if(q->
runtime==q->
needtime)
finishtime=times;
starttime=q->
finishtime-q->
cycletime=q->
reachtime;
cltime=(q->
cycletime)/(q->
T1+=q->
T2+=q->
freesa+=q->
disksa+=q->
check();
//调用check()显示正在运行的,就绪的以及后备的作业信息free(q);
//释放作业
apply();
//分配作业
{for(s=start;
)s=s->
s->
next=q;
intm;
\n\n\t\t*********************************************\t\t\n"
\t\t\t\t实验三
(2)多道作业调度\n"
\t\t*
\n\t\t1.多道作业调度演示."
\n\t\t0.printf("
\n\t\t\tprintf("
\n\n\n\t\t\t\t\tprintf("
退出程序"
选择所要的操作:
计算机学院软件四班\n"
蓝小花\n"
\t\t\t\t\tscanf("
2006年12月"
switch(m){
running();
main();
default:
5)调试结果:
1)界面跟前面的其他几个实验的界面大同小异,这里就不在重复出现界面.下面输出的是作业的初始信息:
2)调度作业,此时的作业情况如下:
3)按回车键,相当于作业继续调度,如下:
4)重复3>
直至作业运行结束;
四.思考题:
1.写出每种算法的调度策略,最后比较各种算法的优缺点。
答:
①FCFS算法总是把处理机分配给最先进入就绪队列的进程,一个进程一旦分得处理机,便执行下去,直到该进程完成或阻塞时,才释放处理机。
优点:
实现简单.缺点:
没考虑进程的优先级
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 作业 调度 实验 报告