操作系统作业调度实验Word格式文档下载.docx
- 文档编号:16455980
- 上传时间:2022-11-23
- 格式:DOCX
- 页数:32
- 大小:239.29KB
操作系统作业调度实验Word格式文档下载.docx
《操作系统作业调度实验Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《操作系统作业调度实验Word格式文档下载.docx(32页珍藏版)》请在冰豆网上搜索。
最短作业优先算法;
高响应比算法流程图:
(2)采用先来先服务算法多道批处理系统的作业流程图
2、主要的常量变量
(1)单道批处理系统作业调度常量、变量
intn;
floatT1=0,T2=0;
inttimes=0;
structjcb//作业控制块
{
charname[10];
//作业名
intreachtime;
//作业到达时间
intstarttime;
//作业开始时间
intneedtime;
//作业需要运行的时间
floatsuper;
//作业的响应比
intfinishtime;
//作业完成时间
floatcycletime;
//作业周转时间
floatcltime;
//作业带权周转时间
charstate;
//作业状态
structjcb*next;
//结构体指针
}*ready=NULL,*p,*q;
typedefstructjcbJCB;
(2)多道批处理系统作业调度常量、变量
#definegetpch(type)(type*)malloc(sizeof(type))//宏定义变量type
#definearea100//宏定义内存空间总大小
#definesummachine5//宏定义内存磁带数总数
#defineNULL0
structpcb//定义结构体pcb
intjobs;
//进入计算机作业总数
intjobnum;
//进入内存作业数量
intwellnum;
//输入井中的作业个数
//作业名
//作业状态
intsize;
//作业大小
intmachine;
//某个作业所占用的磁带机总数
intntime;
//作业需要运行的总时间
intrtime;
//作业已经运行的时间
structpcb*link;
//自定义结构体指针link
}*ready=NULL,*p,*q,num;
//自定义结构体指针变量ready,p,并将ready设为空指针
typedefstructpcbPCB;
//定义作业控制块PCB
3、主要模块
(1)单道批处理系统作业调度模块
voidinize()//初始化界面
voidinital()//建立作业控制块队列,先将其排成先来先服务的模式队列
voiddisp(JCB*q,intm)//显示作业运行后的周转时间及带权周转时间等
voidrunning(JCB*p,intm)//运行作业
voidsuper()//计算队列中作业的高响应比
voidfinal()//最后打印作业的平均周转时间,平均带权周转时间
voidhrn(intm)//高响应比算法
voidsjf(intm)//最短作业优先算法
voidfcfs(intm)//先来先服务算法
(2)多道批处理系统作业调度模块
voidinize()//初始化界面函数
voidwell()//对进入计算机的所有作业按从大到小的顺序排队
voidsort()//内存中运行完一次的作业插到队尾
voidinput()//输入要运行的各个作业的基本信息
voiddisp()//建立显示正在运行的作业的运行情况的函数
voiddisp2(PCB*pr)//建立显示内存就绪队列中所有作业的函数
voiddisp3(PCB*r)//建立显示输入井中作业情况的函数
voidcheck()//建立作业查看函数
voiddestroy()//建立作业撤销函数(对运行完的作业进行撤销)
voidchoose1()//建立从输入井中选择满足条件的作业的函数
voidchoose2()//建立再次从输入井中挑选满足条件的作业的函数
voidrunning()
voidduodao()
voidmenu()//菜单
voidmain()//主函数
4、代码
(1)单道批处理系统作业调度实现源代码
/*****************************************************************
*文件名:
Simple_Batch_Systems.c
*功能:
单道批处理系统的作业调度模拟程序
*******************************************************************/
#include<
stdio.h>
stdlib.h>
conio.h>
#definegetpch(type)(type*)malloc(sizeof(type))
//------------------------------------------------------------------------------------------------
printf("
\n\n\t\t********************************************\t\t\n"
);
\t\t\t\t实验二作业调度\n"
\t\t*********************************************\t\t\n"
\n\n\n\t\t\t计算机系802班\n"
\t\t\t姓名:
李雪娇\n"
\t\t\t学号:
08030043\n"
\t\t\t完成时间:
2010年12月15日\n\n\n\n"
\t\t\t\t\t请输入任意键进入演示过程\n"
getch();
}
inti;
//定义整型变量i
printf("
\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;
//如果就绪队列为空,将头指针指向p
else{//如果就绪队列不为空,将输入的作业插入到队尾
q->
next=p;
q=p;
}
if(m==3)//显示高响应比算法调度作业后的运行情况
\n作业%s正在运行,估计其运行情况:
\n"
q->
开始运行时刻:
%d\n"
starttime);
完成时刻:
finishtime);
周转时间:
%f\n"
cycletime);
带权周转时间:
cltime);
相应比:
super);
else//显示先来先服务,最短作业优先算法调度后作业的运行情况
if(p==ready)//先将要运行的作业从队列中分离出来
ready=p->
next;
//将ready指针后移
//将要运行的作业的链置空
else
q=ready;
while(q->
next!
=p)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;
T2+=p->
cltime;
disp(p,m);
//调用disp()函数,显示作业运行情况
times+=p->
//更新当前时间
F'
完成'
\n%shasbeenfinished!
\npressanykeytocontinue...\n"
free(p);
//释放运行后的作业
JCB*padv;
padv=ready;
do{
if(padv->
state=='
&
padv->
reachtime<
=times)
padv->
super=(float)(times-padv->
reachtime+padv->
needtime)/padv->
padv=padv->
}while(padv!
=NULL);
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;
//定义正型变量i,iden
system("
cls"
inital();
//调用inital()函数
for(i=0;
i++)//遍历作业控制块队列
p=min=ready;
iden=1;
super();
//调用super()函数,计算队列中作业的高响应比
if(p->
=times)//作业的状态为等待,且到达时间比当前时间早
if(iden)
min=p;
iden=0;
elseif(p->
super>
min->
super)min=p;
p=p->
//p指针后移
}while(p!
i--;
times++;
//printf("
\ntime=%d:
\tnoJCBsubmib...wait..."
time);
if(times>
1000){printf("
\nruntimeistoolong...error..."
getch();
running(min,m);
//调用running()函数
}//for
final();
//定义指针变量min,指向最短作业
//定义整形变量i,iden
//调用系统函数清屏
i++)
//将p,min指针指向就绪队列第一个作业,给标志变量赋值
=times)//如果作业状态为等待,且到达时间在现在时间之前
if(iden){
//iden等于一时,将min指向p所指作业,把0赋给iden
needtime<
needtime)min=p;
//当前作业需要时间小于最小需要时间时,将min指向p所指作业
//指针后移
=NULL);
//执行上述语句,到p为空时跳出循环
if(iden){
times++;
100){printf("
\nruntimeistoolong...error"
else{
//调用inital()函数,建立作业控制块队列
p=ready;
//将p指针指向队首作业,给iden赋1
=times)iden=0;
//p作业状态为'
w'
且到达时间在
//当前时间之前,给iden赋0,跳出循环
if(iden)p=p->
=NULL&
iden);
//运行满足条件的作业
if(iden)//没有满足条件的作业时,输出提示信息,当前时间加1
\n没有满足要求的进程,需等待"
\n时间过长"
}//时间过长提示
else
{
running(p,m);
}
//调用final()函数
voidmune()//主菜单
intm;
\n\n\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.退出程序."
\n\n\t\t\t\t选择所要操作:
m);
switch(m)
case1:
fcfs(m);
//先来先服务算法
//清屏
times=0;
//完成一次作业输入时,重置当前时间
mune();
//调用函数自身
break;
case2:
sjf(m);
//最短作业优先算法
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 作业 调度 实验