操作系统进程控制和调度实验报告Word下载.docx
- 文档编号:8316193
- 上传时间:2023-05-11
- 格式:DOCX
- 页数:21
- 大小:471.32KB
操作系统进程控制和调度实验报告Word下载.docx
《操作系统进程控制和调度实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《操作系统进程控制和调度实验报告Word下载.docx(21页珍藏版)》请在冰点文库上搜索。
及
步
骤
创建和显示进程状态算法:
PCB*CreatPCB(intn)
FCFS调度算法
功能:
根据进程到达的顺序进行调度,先到达的进程先执行。
在就绪队列中排的越靠前越先执行
算法:
voidFCFS(PCB*head,PCB*over)
SJ调度算法
从就绪队列中选出剩余执行时间最短的就绪进程进行执行。
执行结束后继续从就绪队列中选出剩余执行时间最短的。
直到所有进程都被执行完。
voidSJF(PCB*head,PCB*over)//sjf算法
优先调度算法(Prio):
从就绪队列中选出优先级别最高的进程进行执行。
重复进行。
直到所有的所有的进程执行完毕。
voidPrio(PCB*head,PCB*over)
RR调度算法:
根据时间片的大小,对每个进程依次执行。
时间片用完之后进程进入阻塞的状态,重新得到时间片后接着执行。
直到完成。
voidRR(PCB*head,PCB*over,intt,intk)//时间片轮转法
调
试
过
程
结
果
先来先服务算法(FCFS调度法):
短作业(进程)优先调度算法(SJ调度算法):
最高优先权优先调度算法(优先调度算法):
时间片轮转算法(RR调度算法):
总
优点:
程序中的数组采用了动态开辟的方法,有效地减少了对于空间的占用。
提高了空间的利用率。
输出的界面比较的简洁,直接给出了分配资源的顺序。
资源请求算法则直接给出了请求后造成的情况,比较的明了。
缺点:
程序仍然存在很多地方可以改进。
比如输出界面,可以做的更漂亮。
部分地方可以采用其他的方法。
附
录
#include<
stdio.h>
stdlib.h>
#defineReady0
#defineRunning1
#defineBlock3
#defineOver4
typedefstructPCBNode
{
intID;
intPriority;
intCPUtime;
intAlltime;
intArrivetime;
intstate;
intcounter;
structPCBNode*next;
}PCB;
//定义数据结构
PCB*run;
PCB*ready;
PCB*over;
PCB*head;
//定义状态量
intMin(PCB*head)//挑选出队列中的拥有最小alltime值的块,返回块号,用于sjf算法
PCB*p;
//q用来记录这个块的地址
intmin,id;
//记录最小值和块号
p=head->
next;
if(p)
{
min=p->
Alltime;
id=p->
ID;
while(p->
next)
if(min>
p->
next->
Alltime)
{
min=p->
id=p->
p=p->
}
else
}
returnid;
}
intMax(PCB*head)//挑选出队列中的拥有最大优先级的块,返回块号,用于prio算法
intmax,id;
//记录最大和块号
max=p->
Priority;
if(max<
=p->
Priority)
max=p->
inti;
PCB*p,*q;
head=(PCB*)malloc(sizeof(PCB));
head->
next=NULL;
p=head;
for(i=1;
i<
=n;
i++)
q=(PCB*)malloc(sizeof(PCB));
q->
ID=i;
CPUtime=0;
Alltime=rand()%200;
Priority=rand()%10;
state=Ready;
q->
Arrivetime=0;
p->
next=q;
p=q;
Priority=0;
returnhead;
}//创建pcb块
voidDisplay(PCB*head)
printf("
IDArrivetimeCPUtime(已占用)AlltimePrioritystate\n"
);
while(p)
{
printf("
%d"
p->
ID);
Arrivetime);
CPUtime);
Alltime);
Priority);
%d\n"
state);
p=p->
}//显示PCB块
intj=0;
intn=0,s=0;
doublem;
ready=head;
p=ready->
q=over;
state=Running;
ready->
next=p->
n=p->
Alltime+n;
CPUtime=p->
Alltime=0;
s=s+n;
next=p;
state=Over;
q=q->
p=head->
j++;
第%d次执行算法后的就绪队列:
\n"
j);
Display(head);
}
m=(double)s/j;
完成顺寻为:
Display(over);
每个进程等待的平均时间为:
%lf\n"
m);
所有进程等待的总时间为:
%d"
s);
PCB*p,*q,*b,*o;
//b用来记录该块的地址
ints;
//记录块号
intm,n,h=0,d=0,j=0;
doublef;
o=head;
m=p->
n=p->
s=Min(head);
b=p->
%d:
while(head->
while(s!
ID)
o=p;
d=p->
Alltime+d;
p->
h=d+h;
b=p;
next=b;
o->
b->
o=head;
f=(double)h/j;
f);
h);
当前拥有最大优先级的块号为:
s=Max(head);
o=p;
每个进程等待的平均时间为%lf\n"
{//k用来记录剩余要执行的进程数目
PCB*p,*q,*r,*o,*tail;
//o用来记录当前块的地址
intn=0,s=0,f;
doubleh;
f=k;
tail=p;
p=p->
执行顺序为:
tail=p;
//前驱
tail->
next=head->
while(k>
0)
r=head->
if(p->
Alltime>
t)//该进程还未执行完成
p->
Alltime=p->
Alltime-t;
n=n+t;
s=s+n;
printf("
执行进程%d"
该进程的Alltime变为%d\n"
else//该进程可以完成了
完成进程:
n=n+p->
o->
q->
q=q->
p=o->
k--;
h=(double)s/f;
voidmain()
intn,m,t;
|------------------------------------------------------------------------------|"
|进程调度的模拟|"
\t\t\t|----选项--------------------|\n"
\t\t\t|1.FCFS调度法|\n"
\t\t\t|----------------------------|\n"
\t\t\t|2.SJF调度算法|\n"
\t\t\t|3.优先调度算法|\n"
\t\t\t|4.RR调度算法|\n"
请输入要创建的进程数目:
"
scanf("
&
n);
head=CreatPCB(n);
创建的就绪队列为:
Display(head);
请选择要进行的操作:
m);
over=(PCB*)malloc(sizeof(PCB));
over->
switch(m)
case1:
system("
CLS"
FCFS(head,over);
break;
case2:
SJF(head,over);
case3:
Prio(head,over);
case4:
请输入时间片的大小:
scanf("
t);
RR(head,over,t,n);
//Release(head);
}
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 进程 控制 调度 实验 报告