课程设计处理器调度算法模拟Word文档下载推荐.docx
- 文档编号:16940440
- 上传时间:2022-11-27
- 格式:DOCX
- 页数:29
- 大小:147.46KB
课程设计处理器调度算法模拟Word文档下载推荐.docx
《课程设计处理器调度算法模拟Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《课程设计处理器调度算法模拟Word文档下载推荐.docx(29页珍藏版)》请在冰豆网上搜索。
floatkaishitime;
//开始运行时间
floatyunxingtime;
//运行时间
floatjieshutime;
//运行结束时间
intshengyutime;
//剩余时间
intfuwutime;
//服务时间
intorder;
//运行次序
intrun_flag;
//调度标志
intpriority;
//优先级
structef*next;
}
先来先服务算法
intfcfs()//先来先服务
{
floattp=0;
inti;
intzx;
tp=ef[0].daodatime;
for(i=0;
i<
c;
i++)
{
ef[i].kaishitime=tp;
ef[i].jieshutime=ef[i].kaishitime+ef[i].yunxingtime;
ef[i].run_flag=1;
tp=ef[i].jieshutime;
zx=i;
ef[zx].order=i+1;
}
return0;
}
短作业优先
intsjf()//短作业优先
floattemp_time=0;
inti=0,j;
intzx,tc;
floatyunxingtime;
yunxingtime=ef[i].yunxingtime;
j=1;
while((j<
c)&
&
(ef[i].daodatime==ef[j].daodatime))
if(ef[j].yunxingtime<
ef[i].yunxingtime)
{
yunxingtime=ef[j].yunxingtime;
i=j;
}
j++;
}//查找第一个被调度的进程
//对第一个被调度的进程求相应的参数
zx=i;
ef[zx].kaishitime=ef[zx].daodatime;
ef[zx].jieshutime=ef[zx].kaishitime+ef[zx].yunxingtime;
ef[zx].run_flag=1;
temp_time=ef[zx].jieshutime;
ef[zx].order=1;
tc=1;
while(tc<
c)
for(j=0;
j<
j++)
if((ef[j].daodatime<
=temp_time)&
(!
ef[j].run_flag))
{
yunxingtime=ef[j].yunxingtime;
zx=j;
break;
}
if(ef[j].yunxingtime<
yunxingtime)
{
yunxingtime=ef[j].yunxingtime;
zx=j;
}
//查找下一个被调度的进程
//对找到的下一个被调度的进程求相应的参数
ef[zx].kaishitime=temp_time;
ef[zx].jieshutime=ef[zx].kaishitime+ef[zx].yunxingtime;
ef[zx].run_flag=1;
temp_time=ef[zx].yunxingtime;
tc++;
ef[zx].order=tc;
}return0;
响应比高优先
inthrrf()//响应比高优先
intj,zx,tc;
floattemp_time,respond_rate,max_respond_rate;
//第一个进程被调度
ef[0].kaishitime=ef[0].daodatime;
ef[0].jieshutime=ef[0].kaishitime+ef[0].yunxingtime;
temp_time=ef[0].jieshutime;
ef[0].run_flag=1;
ef[0].order=1;
//调度其他进程
max_respond_rate=0;
for(j=1;
respond_rate=(temp_time-ef[j].daodatime)/ef[j].yunxingtime;
if(respond_rate>
max_respond_rate)
max_respond_rate=respond_rate;
zx=j;
//找响应比高的进程
temp_time=ef[zx].jieshutime;
tc+=1;
时间片轮
structef*input()
intN,i;
//定义队首、队尾
structef*head,*rear;
//p是队尾指针,q是队首指针,t是执行时间
structef*p,*q,*t;
//初始化队首和队尾为空
head=rear=NULL;
cout<
<
"
请输入进程数目:
"
endl;
cin>
>
N;
i<
//初始化一个空间给进程
p=(structef*)malloc(sizeof(structef));
cout<
请输入第"
<
i+1<
个进程的名字\n"
cin>
p->
name;
i+1<
个进程的编号:
\n"
endl;
p->
number;
个进程的到达时间:
daodatime;
个进程的服务时间:
fuwutime;
p->
shengyutime=p->
next=NULL;
//当输入结束时,把p的数据放到队首,以便下一步执行
if(rear==NULL)
head=p;
p->
rear=p;
//否则执行时间为空,队首变成q
else
t=NULL;
q=head;
//当q和q的到达时间小于p的到达时间时,把执行时间给q
while(q&
q->
daodatime<
daodatime)
t=q;
q=q->
next;
//当q是队首时,则下一个队首变成p,以便每个进程都能够得到时间片
if(q==head)
p->
next=head;
head=p;
//当执行时间片到达队尾时(执行完成),返回给队首p
elseif(t==rear)
rear->
next=p;
rear=p;
//否则给队首p占用执行时间,p执行完后到q
else
t->
next=q;
//返回队首
returnhead;
voidrun(structef*head)
structef*p,*t,*r;
intnum;
//运行过程
vector<
string>
vec_out;
cout<
请输入时间片:
num;
//当队首不为空时,把p给队首
while(head!
=NULL)
r=p=head;
//把执行时间给队首
while(p!
t=head;
//p的剩余时间=剩余时间-时间片
shengyutime-num;
jieshutime=p->
kaishitime+p->
strings=p->
vec_out.push_back(s);
//当p运行完,即剩余时间小于0时,仍然把它当做0处理
if(p->
shengyutime<
0)
shengyutime=0;
cout<
进程编号到达时间服务时间剩余时间完成时间\n"
//时间不为空时,输出当前进程的信息,并把时间片交给下一个进程
while(t!
cout<
t->
name<
t->
number<
fuwutime<
jieshutime<
t=t->
//当队首的剩余时间为0时,先把队首改成p的下一个,然后释放内存,删除队首节点
shengyutime==0)
if(p==head)
head=p->
free(p);
p=head;
//否则返回执行,把队尾的下一个指针变成p的下一个指针,队尾的位置移动到队首
else
r->
next=p->
p=r->
r=p;
//否则把队首的位置给队尾,把队首的状态显示为“就绪”状态
r=p;
p=p->
执行顺序:
vec_out[0].c_str()<
for(inti=1;
vec_out.size();
vec_out[i].c_str()<
voidyunxing()
//定义时间片的队首结构体
structef*head;
//队首执行的时间
head=input();
run(head);
6、流程图
7、程序源代码
#include"
stdafx.h"
#include<
iostream>
#include<
vector>
usingnamespacestd;
#defineMAX10
intc;
//实际进程个数
intfcfs();
//先来先服务
intsjf();
//短作业优先
inthrrf();
//响应比高优先
intyxj();
//优先级调度
intin();
//进程参数输入
intout();
//调度结果输出
}ef[MAX];
intfcfs()//先来先服务
intyxj()//优先级调度
intmax_priority;
max_priority=ef[i].priority;
if(ef[j].priority>
ef[i].priority)
max_priority=ef[j].priority;
//对第一个被调度的进程求相应的参数
ef[zx].kaishitime=ef[zx].kaishitime;
max_priority=0;
if(ef[j].priority>
max_priority)
max_priority=ef[j].priority;
//查找下一个被调度的进程//
intsjf()//短作业优先
inthrrf()//响应比高优先
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 处理器调度算法模拟 处理器 调度 算法 模拟