广工操作系统实验报告Word下载.docx
《广工操作系统实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《广工操作系统实验报告Word下载.docx(39页珍藏版)》请在冰豆网上搜索。
![广工操作系统实验报告Word下载.docx](https://file1.bdocx.com/fileroot1/2022-11/16/685b3d67-2b5c-4ba0-9639-4a085f645e5f/685b3d67-2b5c-4ba0-9639-4a085f645e5f1.gif)
在多道程序系统中,一个作业被提交后必须经过处理机调度后,方能获得处理机执行。
对调度的处理又都可采用不同的调度方式和调度算法。
调度算法是指:
根据系统的资源分配策略所规定的资源分配算法。
短进程优先调度算法是指对短进程优先调度的算法,它是从后备队列中选择一个或者若干个进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。
四、重要数据结构或源程序中疑难部分的说明,需附详细注释
#include"
stdio.h"
#include<
stdlib.h>
conio.h>
#definegetpch(type)(type*)malloc(sizeof(type))
#defineNULL0
structpcb
{/*定义进程控制块PCB*/
charname[10];
//进程名
charstate;
//状态
intsuper;
//优先数
intntime;
//需要运行时间
intrtime;
//运行时间
structpcb*link;
}*ready=NULL,*p;
typedefstructpcbPCB;
intnum;
sort()/*建立对进程进行短进程优先排列函数*/
{
PCB*first,*second;
intinsert=0;
if((ready==NULL)||((p->
ntime)<
(ready->
ntime)))/*需要运行时间最小者,插入队首*/
{
p->
link=ready;
ready=p;
}
else/*进程比较需要运行时间,插入适当的位置中*/
first=ready;
second=first->
link;
while(second!
=NULL)
if((p->
(second->
ntime))/*若插入进程比当前进程需要运行时间小,*/
{/*插入到当前进程前面*/
p->
link=second;
first->
link=p;
second=NULL;
insert=1;
}
else/*插入进程需要运行时间最大,则插入到队尾*/
first=first->
second=second->
if(insert==0)first->
}
voidinput()/*建立进程控制块函数*/
inti;
//clrscr();
/*清屏*/
printf("
\n请输入进程数:
"
);
scanf("
%d"
&
num);
for(i=0;
i<
num;
i++)
\n进程号No.%d:
\n"
i);
p=getpch(PCB);
\n输入进程名:
%s"
p->
name);
\n输入进程需要运行时间:
p->
ntime);
rtime=0;
state='
w'
;
link=NULL;
sort();
/*调用sort函数*/
voidmain()/*主函数*/
inti,len,h=0;
charch;
input();
ch=getchar();
\n调度序列为:
p=ready;
for(i=num;
i>
0;
i--)
{printf("
%s"
p=p->
printf("
\n\n进程已经完成.\n"
五、程序运行结果
七、结果分析与实验小结
结果正确。
短进程优先需要把进程按左右运行时间排序,然后让其按顺序执行即可。
实验二作业调度
一、实验目的:
用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。
二、实验内容:
1.写并调试一个单道处理系统的作业等待模拟程序。
2.作业等待算法:
分别采用先来先服务(FCFS)、响应比高者优先(HRN)的调度算法。
3.由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的CPU时限等因素。
4.每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:
作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。
作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。
每个作业的最初状态总是等待W。
5.对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间。
5、重要数据结构或源程序中疑难部分的说明,需附详细注释
编写一个程序将输入的进程按其提交时间进行排列,按排列顺序进行调度,计算其开始时间、完成时间、周转时间等数值
先来先服务
#include"
intctime;
//提交时间
intstime;
//开始时间
intftime;
//完成时间
intttime;
//周转时间
floatdtime;
//带权周转时间
voidsort()/*建立对进程先来先服务排列函数*/
ctime)<
ctime)))/*达到时间最小者,插入队首*/
else/*进程比较到达时间,插入适当的位置中*/
ctime))/*若插入进程比当前进程到达时间小,*/
else/*插入进程到达时间最大,则插入到队尾*/
\n输入提交时间:
ctime);
{PCB*first,*second;
inti,x,y;
floats1=0,s2=0;
//输出
进程名\t开始时间\t完成时间\t周转时间\t带权周转时间\n"
second=ready;
first->
ftime=0;
{if(second->
ctime>
first->
ftime)/*计算完成时间,周转时间等*/
second->
stime=second->
ctime;
else
stime=first->
ftime;
ftime=(second->
ntime)+(second->
stime);
ttime=(second->
ftime)-(second->
x=second->
ttime;
y=second->
ntime;
dtime=(float)x/(float)y;
%s\t%d\t%d\t%d\t%f\n"
second->
name,second->
stime,second->
ftime,second->
ttime,second->
dtime);
s1=s1+second->
s2=s2+second->
dtime;
if(se