计算机操作系统3Word文档格式.docx
- 文档编号:17152517
- 上传时间:2022-11-28
- 格式:DOCX
- 页数:10
- 大小:201.68KB
计算机操作系统3Word文档格式.docx
《计算机操作系统3Word文档格式.docx》由会员分享,可在线阅读,更多相关《计算机操作系统3Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
三,实验内容:
采用先来先服务算法和运行时间最短者优先算法模拟设计作业调度程序。
模拟批处理多道操作系统的作业调度
(1)写并调试一个作业调度模拟程序。
(2)作业调度算法:
分别采用先来服务(FCFS)调度算法和最短作业优先(SJF)的调度算法
(3)在批处理系统中,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求,所需要的资源是否得到满足。
(4)对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,并比较各种算法的优缺点。
作业调度程序负责从输入井选择若干个作业进入主存,为它们分配必要的资源,当它们能够被进程调度选中时,就可占用处理机运行。
作业调度选择一个作业的必要条件是系统中现有的尚未分配的资源可满足该作业的资源要求。
但有时系统中现有的尚未分配的资源既可满足某个作业的要求也可满足其它一些作业要求,那么,作业调度必须按一定的算法在这些作业中作出选择。
当作业正常运行完毕或因发生错误非正常终止时,作业进入完成状态,此时,系统将收回该作业所占用的全部资源,并清除有关的JCB。
并输出显示作业运行情况及作业输出结果。
四,实验步聚:
假设在单道批处理环境下有四个作业JOB1、JOB2、JOB3、JOB4,JOB5,已知它们进入系统的时间、估计运行时间。
分别采用先来先服务(FCFS),最短作业优先(SJF)调度算法,
1、先来先服务调度算法(FCFS):
每次调度都是从后备作业队列中,选择一个或多个最先进入该队列的作业,将它们调入内存,为它们分配资源、创建进程,然后放入就绪队列。
在进程调度中采用FCFS算法时,这每次调度是从就绪队列中,选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。
该进程一直运行到完成或发生某事件阻赛后,才放弃处理机。
2、最短作业优先(SJF):
每次从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。
对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,并比较各种算法的优缺点。
3、多道作业调度算法:
将作业按FCFS原则排好队,在输入井中按作业到达的先后次序来挑选作业,先进入输入井的作业优先被挑选,当系统中现有的尚未分配的资源不能满足先进入输入井的作业时,那么顺序挑选后面的作业,把不能满足要求的放回输入井尾部等待,当作业执行结束进入完成状态时,做好释放资源等善后工作。
算法的程序流程图如下图所示:
五,实验结果:
六,实验总结:
通过本实验我模拟作业调度的实现,用高级语言编写和调试一个或多个作业调度的模拟程序,了解了作业调度在操作系统中的作用,加深了对作业调度算法的理解。
七,附录
#include<
stdio.h>
stdlib.h>
string.h>
#defineJOBSIZE5//job的个数
#defineINITIAL-1//初始值
typedefstruct{
charname[5];
//JOB名
intatime;
//到达时间
intntime;
//服务时间
intbtime;
//开始运行时间
intftime;
//完成时间
intttime;
//周转时间
doublewtime;
//带权周转时间
}JOB;
typedefstructNode{
JOB*job;
structNode*next;
}Node,*QNode;
/*将job的开始时间、完成时间、服务时间、带权周转时间初始化*/
voidvoluation(JOB*job)
{
for(inti=0;
i<
JOBSIZE;
i++)
{
job[i].btime=INITIAL;
job[i].ftime=INITIAL;
job[i].ttime=INITIAL;
job[i].wtime=INITIAL;
}
}
/*初始化JOB*/
JOB*InitJOB(
JOB*job=(JOB*)malloc(JOBSIZE*sizeof(JOB));
inti;
printf("
JOBname"
);
/*自动生成进程名*/
for(i=0;
strcpy(job[i].name,"
job"
itoa(i+1,&
job[i].name[3],10);
%s"
job[i].name);
\n"
/*初始化到达时间*/
atime"
scanf("
%d"
&
job[i].atime);
/*初始化服务时间*/
ntime"
job[i].ntime);
voluation(job);
returnjob;
}
/*打印JOB信息*/
voidPrintJOB(JOB*job,char*way)
doublej=0,k=0;
---------------------------------------------"
------------------------\n%sbtime"
way);
for(i=0;
i<
JOBSIZE;
%d"
job[i].btime);
\nftime"
job[i].ftime);
\nttime"
job[i].ttime);
j+=job[i].ttime;
%.2f(average)\nwtime"
j/5);
%.2f"
job[i].wtime);
k+=job[i].wtime;
%.2f(average)\n"
k/5);
/*运行队首job*/
voidRunJOB(QNodefirst,inttime)
JOB*firstjob;
QNodeq;
if(first->
next)
firstjob=first->
next->
job;
/*队首job的开始时间未赋值*/
if(firstjob->
btime==INITIAL)
firstjob->
btime=time;
elseif(firstjob->
btime+firstjob->
ntime==time)/*队首job完成*/
/*计算完成时间、服务时间、带权周转时间*/
ftime=time;
ttime=firstjob->
ftime-firstjob->
atime;
wtime=1.0*firstjob->
ttime/firstjob->
ntime;
/*将下一个job置于队首,并设置开始时间*/
q=first->
next;
first->
next=first->
if(first->
job->
free(q);
/*先来先服务调度算法*/
voidFCFS(JOBjob[])
intcount=0;
//用于存放已进入队列的JOB数量
inttime=0,i;
QNodefirst=(QNode)malloc(sizeof(Node)),last,q;
job=NULL;
next=NULL;
while(count!
=JOBSIZE||first->
/*若调入队列中的JOB数量不足JOBSIZE,将到达时间为time的job调入队列*/
if(count!
=JOBSIZE)
if(job[i].atime==time)
for(last=first;
last->
last=last->
next);
q=(QNode)malloc(sizeof(Node));
q->
job=&
job[i];
next=q;
count++;
RunJOB(first,time);
time++;
PrintJOB(job,"
FCFS"
/*短作业(进程)优先调度算法*/
voidSJF(JOB*job)
if(!
first->
next||first->
btime==INITIAL)
for(last=first;
next&
&
ntime<
job[i].ntime;
else
for(last=first->
next=last->
RunJOB(first,time);
SJF"
intmain()
JOB*job=InitJOB();
FCFS(job);
SJF(job);
return0;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 计算机 操作系统
![提示](https://static.bdocx.com/images/bang_tan.gif)