基于优先数的时间片轮转调度算法调度处理器Word下载.docx
- 文档编号:16006602
- 上传时间:2022-11-17
- 格式:DOCX
- 页数:13
- 大小:18.08KB
基于优先数的时间片轮转调度算法调度处理器Word下载.docx
《基于优先数的时间片轮转调度算法调度处理器Word下载.docx》由会员分享,可在线阅读,更多相关《基于优先数的时间片轮转调度算法调度处理器Word下载.docx(13页珍藏版)》请在冰豆网上搜索。
4、此程序是模拟处理器调度,因此,被选中的进程并不实际启动运行,而是执行
已运行时间+1
来模拟进程的一次运行,表示进程已经运行过一个单位时间。
.5、在所设计的程序中应有显示或打印语句,能显示或打印每次被选中的进程名以及运行一次后进程队列的变化。
6、为进程任意确定要求运行时间,运行所设计的处理器调度程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。
7、设有一个就绪队列,就绪进程按优先数(优先数范围0-100)由小到大排列(优先数越小,级别越高)。
当某一进程运行完一个时间片后,其优先级应下调(如优先数加2或3)。
8、例如一组进程如下表:
A
B
C
D
E
F
G
H
J
K
L
M
1
2
3
6
8
12
18
25
服务时间
4
10
5
15
三、实验报告
1、程序中使用的数据结构及符号说明。
2、给出主要算法的流程图
3、给出程序清单并附上注释
4、打印程序运行时的初值和运行结果。
(运行一个进程输出一次结果)
三、实验代码
#include<
stdio.h>
#include<
stdlib.h>
conio.h>
#definegetpch(type)(type*)malloc(sizeof(type))//为进程创建一个空间
structworktime{
floatTb;
//作业运行时刻
floatTc;
//作业完成时刻
floatTi;
//周转时间
floatWi;
//带权周转时间
};
structjcb{
charname[10];
//作业名
floatsubtime;
//作业到达时间
floatruntime;
//作业所需的运行时间
charresource;
//所需资源
floatRp;
//后备作业响应比
charstate;
//作业状态
intworked_time;
//已运行时间
structworktimewt;
intneed_time;
//要求运行时间
intflag;
//进程结束标志
structjcb*link;
//链指针
}*ready=NULL,*p;
typedefstructjcbJCB;
floatT=0;
intN;
JCB*front,*rear;
//时间轮转法变量
voidsort()
{
JCB*first,*second;
intinsert=0;
//插入数
if((ready==NULL)||((p->
subtime)<
(ready->
subtime)))
{
p->
link=ready;
ready=p;
T=p->
subtime;
Rp=1;
}
else
first=ready;
second=first->
link;
while(second!
=NULL)
if((p->
(second->
subtime))
link=second;
first->
link=p;
second=NULL;
insert=1;
first=first->
second=second->
if(insert==0)first->
}
voidSJFget()
JCB*front,*mintime,*rear;
intipmove=0;
mintime=ready;
rear=mintime->
while(rear!
if((rear!
=NULL)&
&
(T>
=rear->
subtime)&
(mintime->
runtime)>
(rear->
runtime))
front=mintime;
mintime=rear;
rear=rear->
ipmove=1;
if(ipmove==1)
front->
link=mintime->
mintime->
ready=mintime;
voidHRNget()
Rp)<
Rp))
if(ipmove==1){
voidcreatJCB()//为每个作业创建一个JCB并初始化形成一个循环链队列
{
JCB*p,*l;
inti=0;
l=(JCB*)malloc(sizeof(JCB));
printf("
\n请输入作业的个数:
"
);
scanf("
%d"
&
N);
\n作业号No.%d:
\n"
i);
\n请输入作业的名字:
%s"
l->
name);
\n请输入作业的时间:
l->
need_time);
l->
state='
r'
;
//作业初始状态为就绪
worked_time=0;
link=NULL;
flag=0;
front=l;
for(i=1;
i<
N;
i++)
p=(JCB*)malloc(sizeof(JCB));
p->
p->
state='
worked_time=0;
l=l->
rear=l;
rear->
link=front;
}
voidoutput()//进程输出函数
intj;
nameruntimeneedtimestate\n"
for(j=1;
j<
=N;
j++){printf("
%-4s\t%-4d\t%-4d\t%-c\n"
front->
name,front->
worked_time,front->
need_time,front->
state);
front=front->
intjudge(JCB*p)//判断所有进程运行结束
intflag=1,i;
for(i=0;
if(p->
state!
='
e'
)
flag=0;
break;
p=p->
returnflag;
voidRRget()//时间片轮转算法
JCB*s;
intflag1=0;
s=(JCB*)malloc(sizeof(JCB));
s=front;
\n--------------------------------------------\n"
output();
请输入任意一键继续\n"
getch();
//按任意键继续
while(flag1!
=1)
if(s->
state=='
s->
worked_time++;
need_time--;
need_time==0)
请输入任意一键继续...\n"
s->
flag==0)
进程%s已经运行完成!
\n\n"
s->
flag=1;
s=s->
flag1=judge(s);
--------------------------------------------\n"
voidinput()
inti,num;
num);
num;
p=getpch(JCB);
\n输入作业名:
\n输入作业到达时刻:
%f"
subtime);
\n输入作业运行时间:
runtime);
w'
sort();
intspace()
intl=0;
JCB*jr=ready;
w
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 基于 优先 时间 轮转 调度 算法 处理器