操作系统实验六.docx
- 文档编号:4687411
- 上传时间:2022-12-07
- 格式:DOCX
- 页数:13
- 大小:195.48KB
操作系统实验六.docx
《操作系统实验六.docx》由会员分享,可在线阅读,更多相关《操作系统实验六.docx(13页珍藏版)》请在冰豆网上搜索。
操作系统实验六
实验六作业调度试验
由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的CPU时限等因素。
作业调度算法:
采用先来先服务(FCFS)调度算法,即按作业提交的先后次序进行调度。
总是首先调度在系统中等待时间最长的作业。
每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:
作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。
作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。
每个作业的最初状态总是等待W。
各个等待的作业按照提交时刻的先后次序排队,总是首先调度等待队列中队首的作业。
每个作业完成后要打印该作业的开始运行时刻、完成时刻、周转时间和带权周转时间,这一组作业完成后要计算并打印这组作业的平均周转时间、带权平均周转时间。
调度算法的流程图如下:
三.实习题:
1、编写并调试一个单道处理系统的作业等待模拟程序。
a)采用先来先服务(FCFS)
思路:
根据先来先服务的原则,将就绪的进程排成一个就绪队列,根据就绪队列来进行进程的调度。
源码:
#include"stdio.h"
#include"stdlib.h"
#definegetjcb(type)(type*)malloc(sizeof(type))
#defineNULL0
structjcb{
charname[10];
inthtime;
intntime;
charstate;
structjcb*link;
}*ready=NULL,*p;
typedefstructjcbJCB;
intinput()
{
intnum,i,t=0;
voidsort();
printf("\n请输入作业个数:
");
scanf("%d",&num);
for(i=1;i<=num;i++)
{
printf("\n作业%d",i);
p=(JCB*)malloc(sizeof(JCB));
printf("\n作业名:
");
scanf("%s",p->name);
printf("\n作业运行时间:
");
scanf("%d",&p->ntime);
p->htime=t;p->state='w';p->link=NULL;
sort();
t++;
}
returnt;
}
voidsort()
{
JCB*flag;
if(ready==NULL)
ready=p;
else{
flag=ready;
while(flag->link!
=NULL)
flag=flag->link;
flag->link=p;
}
}
voidshow()
{
JCB*pr;
printf("\n***正在运行的作业是:
%s",p->name);
printf("\nname\thtime\tntime\tstate\n");
printf("%s\t",p->name);
printf("%d\t",p->htime);
printf("%d\t",p->ntime);
printf("%c\t",p->state);
printf("\n\n***就绪队列");
for(pr=ready;pr!
=NULL;pr=pr->link)
{
printf("\nname\thtime\tntime\tstate\n");
printf("%s\t",pr->name);
printf("%d\t",pr->htime);
printf("%d\t",pr->ntime);
printf("%c\t",pr->state);
}
}
voidrunning()
{
printf("\n作业[%s]已经完成\n",p->name);
}
voidmain()
{
charc;
intt=0;inttb,tc,ti,wi;
inttis=0,wis=0,i=0;
t=input();
while(ready!
=NULL)
{
c=getchar();
++i;
p=ready;
ready=p->link;
p->link=NULL;
p->state='r';
tb=t;
show();
c=getchar();
running();
tc=tb+p->ntime;//完成时间
ti=tc-p->htime;//周转时间
tis+=ti;
wi=ti/p->ntime;//平均带权周转
wis+=wi;
printf("\n周转时间:
%d\n",ti);
printf("\n带权周转时间:
%d\n",wi);
t=t+p->ntime;
c=getchar();
}
printf("\n***所有作业都已经完成");
printf("\n总周转时间:
%d\n",tis/i);
printf("\n总带权周转时间:
%d\n",wis/i);
c=getchar();
}
测试结果如下:
b)采用最短作业优先(SJF)
思路:
根据最短作业优先的原则,将就绪的进程根据作业的长短排成一个就绪队列,根据队列进行进程的调度。
源码:
#include
#include
#include
structjcb
{
charname[10];
intreadytime;
intruntime;
charstate;
structjcb*next;
};
typedefstructjcbJCB;
voidinsertJCB(JCB*head,JCB*jcb)
{
JCB*p,*p1;
if(head->next)
{
p=head->next->next;
p1=head->next;
}
else
{
p=head->next;
p1=head;
}
while(p!
=NULL&&(jcb->runtime>=p->runtime))
{
p1=p;
p=p->next;
}
jcb->next=p;
p1->next=jcb;
}
voidinput(JCB*head)
{
intnum=0,i;
JCB*jcb1;
cout<<"请输入作业的个数:
"< cin>>num; for(i=0;i { jcb1=newJCB(); jcb1->readytime=i; cout<<"输入作业名称: "< cin>>jcb1->name; cout<<"输入作业运行时间"< cin>>jcb1->runtime; jcb1->state='w'; jcb1->next=NULL; insertJCB(head,jcb1); } } voidshowRunning(JCB*p) { cout<<"正在运行的作业是: "< cout<<"名称就绪时间运行时间状态"< cout< } voidshowReady(JCB*p) { JCB*p1=p; cout<<"就绪作业是: "< while(p1) { cout<<"名称就绪时间运行时间状态"< cout< p1=p1->next; } } voidmain() { JCB*head=newJCB(),*pready,*p; charc; intnum=0; doublecirculateTime=0,averCTime=0,fTime=0,wTime,TotalCTime=0,TotalWCTime=0; head->next=NULL; input(head); pready=head->next; c=getchar(); while(pready) { c=getchar(); num++; p=pready; pready=p->next; p->next=NULL; p->state='r'; showRunning(p); fTime=fTime+p->runtime; circulateTime=fTime-p->readytime; wTime=circulateTime/p->runtime; TotalCTime+=circulateTime; TotalWCTime+=wTime; c=getchar(); showReady(pready); c=getchar(); cout<<"当前运行作业已完成,时间情况如下: "< cout<<"就绪时间完成时间周转时间带权周转时间"< cout< deletep; } cout<<"所有作业已经完成: "< if(num! =0) { cout<<"总周转时间平均值: "< cout< cout<<"总带权周转时间平均值: "< cout< } else { cout<<"总周转时间平均值: "< cout<<0< cout<<"总带权周转时间平均值: "< cout<<0< } deletehead; } 测试结果如下: c)采用响应比高者优先(HNR) 思路: 根据就绪的时间进行排序,当运行一个进程后,对其后的进程计算响应比,并进行比较,重新对其按照响应比的大小由大到小进行排序。 然后继续运行。 源码: 测试结果如下: 2、编写并调度一个多道程序系统的作业调度模拟程序。 作业调度算法: 采用基于先来先服务的调度算法。 可以参考课本中的方法进行设计。 对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验