操作系统作业调度实验Word格式文档下载.docx

上传人:b****5 文档编号:16455980 上传时间:2022-11-23 格式:DOCX 页数:32 大小:239.29KB
下载 相关 举报
操作系统作业调度实验Word格式文档下载.docx_第1页
第1页 / 共32页
操作系统作业调度实验Word格式文档下载.docx_第2页
第2页 / 共32页
操作系统作业调度实验Word格式文档下载.docx_第3页
第3页 / 共32页
操作系统作业调度实验Word格式文档下载.docx_第4页
第4页 / 共32页
操作系统作业调度实验Word格式文档下载.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

操作系统作业调度实验Word格式文档下载.docx

《操作系统作业调度实验Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《操作系统作业调度实验Word格式文档下载.docx(32页珍藏版)》请在冰豆网上搜索。

操作系统作业调度实验Word格式文档下载.docx

最短作业优先算法;

高响应比算法流程图:

(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);

//最短作业优先算法

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 初中教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1