广工操作系统实验报告Word文件下载.docx
- 文档编号:881680
- 上传时间:2023-04-29
- 格式:DOCX
- 页数:78
- 大小:1.31MB
广工操作系统实验报告Word文件下载.docx
《广工操作系统实验报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《广工操作系统实验报告Word文件下载.docx(78页珍藏版)》请在冰点文库上搜索。
{
PCB*first,*second;
intinsert=0;
if((ready==NULL)||((p->
super)>
(ready->
super)))/*优先级最大者,插入队首*/
{
p->
link=ready;
ready=p;
}
else/*进程比较优先级,插入适当的位置中*/
first=ready;
second=first->
link;
while(second!
=NULL)
if((p->
(second->
super))/*若插入进程比当前进程优先数大,*/
{/*插入到当前进程前面*/
link=second;
first->
link=p;
second=NULL;
insert=1;
else/*插入进程优先数最低,则插入到队尾*/
first=first->
second=second->
if(insert==0)first->
}
voidinput()/*建立进程控制块函数*/
inti,num;
//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->
super);
\n输入进程运行时间:
ntime);
rtime=0;
state='
w'
;
link=NULL;
sort();
/*调用sort函数*/
intspace()
intl=0;
PCB*pr=ready;
while(pr!
l++;
pr=pr->
return(l);
voiddisp(PCB*pr)/*建立进程显示函数,用于显示当前进程*/
\nqname\tstate\tsuper\tndtime\truntime\n"
|%s\t"
pr->
|%c\t"
state);
|%d\t"
rtime);
voidcheck()/*建立进程查看函数*/
PCB*pr;
\n****当前正在运行的进程是:
/*显示当前运行进程*/
disp(p);
pr=ready;
\n****当前就绪队列状态为:
/*显示就绪队列状态*/
disp(pr);
voiddestroy()/*建立进程撤消函数(进程运行结束,撤消进程)*/
\n进程[%s]已完成.\n"
free(p);
voidrunning()/*建立进程就绪函数(进程运行时间到,置就绪状态*/
(p->
rtime)++;
if(p->
rtime==p->
ntime)
destroy();
/*调用destroy函数*/
else
super)--;
/*调用sort函数*/
intmain()/*主函数*/
intlen,h=0;
charch;
input();
len=space();
while((len!
=0)&
&
(ready!
=NULL))
ch=getchar();
h++;
\nTheexecutenumber:
%d\n"
h);
p=ready;
ready=p->
R'
check();
running();
\n按任一键继续......"
\n\n进程已经完成.\n"
return0;
}
5、运行结果
6、体会心得
题目2
1、实验要求:
编写并调试一个模拟的进程调度程序,采用“轮转法”调度算法对五个进程进行调度。
2、实验原理:
轮转法可以是简单轮转法、可变时间片轮转法,或多队列轮转法。
简单轮转法的基本思想是:
所有就绪进程按FCFS排成一个队列,总是把处理机分配给队首的进程,各进程占用CPU的时间片相同。
如果运行进程用完它的时间片后还为完成,就把它送回到就绪队列的末尾,把处理机重新分配给队首的进程。
直至所有的进程运行完毕。
3、流程图:
4、源代码:
#definegetpch(type)(type*)malloc(sizeof(type))
//#defineNULL0
structpcb{/*定义进程控制块PCB*/
}*ready=NULL,*p;
voidsort()/*FCFS函数*/
{
PCB*loc;
PCB*re;
loc=ready;
if(ready==NULL)
ready=p;
else{
while(loc!
=NULL){
re=loc;
loc=loc->
re->
link=p;
voidinput()/*建立进程控制块函数*/
inti,num=5;
输入5个进程控制块:
i++)
{
printf("
p=getpch(PCB);
scanf("
p->
sort();
/*调用sort函数*/
}
intspace()
=NULL)
l++;
pr=pr->
voiddisp(PCB*pr)/*建立进程显示函数,用于显示当前进程*/
\nqname\tstate\tsuper\tndtimeruntime\n"
voidcheck()/*建立进程查看函数*/
/*显示当前运行进程*/
/*显示就绪队列状态*/
disp(pr);
voiddestroy()/*建立进程撤消函数(进程运行结束,撤消进程)*/
voidrunning()/*建立进程就绪函数(进程运行时间到,置就绪状态*/
ntime)
/*调用destroy函数*/
else
//(p->
/*调用sort函数*/
intmain()
len=space();
while((len!
=0)&
(ready!
=NULL))
ch=getchar();
\nTheexcutenumber:
%d\n"
p=ready;
ready=p->
link=NULL;
state='
5、运行结果:
6、体会心得:
实验二:
作业调度实验
1、实验要求
编写并调试一个单道处理系统的作业等待模拟程序。
作业等待算法:
分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。
对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,以比较各种算法的优缺点。
FCFS:
在计算机并行任务处理中,被视为最简单的任务排序策略,即是无论任务大小和所需完成时间,对先到的任务先处理,后到的任务后处理。
它是一种非抢占式策略。
SJF:
以进入系统的作业所要求的CPU时间为标准,总选取估计计算时间最短的作业投入运行。
HRN:
最高响应比优先法(HRN)是对FCFS方式和SJF方式的一种综合平衡。
FCFS方式只考虑每个作业的等待时间而未考虑执行时间的长短,而SJF方式只考虑执行时间而未考虑等待时间的长短。
因此,这两种调度算法在某些极端情况下会带来某些不便。
iostream>
string>
usingnamespacestd;
structjcb{/*定义作业控制块PCB*/
stringszJname;
//作业名
intiStime;
//提交时间
intiRtime;
//运行时间
intiBtime;
//开始运行时间
intiFtime;
//完成时间
floatfTtime;
//周转时间
floatfWtime;
//带权周转时间
charcState;
//作业状态
floatfSuper;
//优先权
structjcb*link;
intiRecord=0;
voidFCFS(intiCnt)
iRecord=0;
floatfATtime=0;
floatfAWtime=0;
jcb*q=ready;
cout<
<
"
作业名称\t开始运行时间\t完成时间\t周转时间\t带权周转时间"
<
endl;
for(;
q!
=NULL;
q=q->
link)
q->
iBtime=iRecord;
iFtime=q->
iBtime+q->
iRtime;
fTtime=q->
iFtime-q->
iStime;
fWtime=q->
fTtime/q->
szJname<
\t"
iBtime<
iFtime<
fTtime<
fWtime<
iRecord+=q->
fATtime+=q->
fTtime;
fAWtime+=q->
fWtime;
平均周转时间:
fATtime/iCnt<
平均带权周转时间:
fAWtime/iCnt<
voidSJF(intiCnt)
jcb*pshort,*q;
for(inti=0;
i<
iCnt;
++i)
if(i==iCnt-1)
q=ready;
do
if(q->
cState=='
W'
)
pshort=q;
pshort->
cState='
F'
break;
}while(q!
=NULL);
pshort=NULL;
if(q->
&
pshort==NULL&
iStime<
=iRecord)
elseif(q->
iRtime>
iRtime&
iFtime=pshort->
iBtime+pshort->
fTtime=pshort->
iFtime-pshort->
fWtime=pshort->
fTtime/pshort->
iRecord+=pshort->
fATtime+=pshort->
fAWtime+=pshort->
voidreset()//把作业的状态都重新设定为Wait
while(q!
=NULL)
voidHRN(intiCnt)
jcb*psuper,*q;
reset();
//把作业的状态都重新设定为Wait
psuper=q;
psuper->
psuper=NULL;
psuper==NULL&
((psuper->
iRtime-psuper->
iStime)+psuper->
iRtime)/psuper->
iRtime
>
((q->
iRtime-q->
iStime)+q->
iRtime)/q->
iFtime=psuper->
iBtime+psuper->
fTtime=psuper->
iFtime-psuper->
fWtime=psuper->
fTtime/psuper->
iRecord+=psuper->
fATtime+=psuper->
fAWtime+=psuper->
intnum;
jcb*loc;
输入作业数量:
cin>
>
num;
i<
p=newjcb;
作业"
i+1<
:
输入作业名:
szJname;
输入所需的运行时间:
iStime=i;
if(ready==NULL)
loc=p;
loc->
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 报告