【操作系统进程调度】⽤C语⾔简单实现最⾼优先数优先算法
⼀,实验⽬的
⽤C语⾔编写⼀个进程调度程序,加深对进程概念与进程调度算法的理解
⼆,实验设备
计算机
三,实验原理
略
四,实验步骤
#include
typedefstructProcess
{
inttimeOfArrival;//到达时间
intpriority;//优先级
intduration;//CPU振发时间
intid;//进程ID
intcount;//剩余运⾏时间
intstart;//开始时间
intfinish;//结束时间
intturnaround;//周转时间
doublewTurnaround;//带权周转时间
}Process;
intmain(intargc,charconst*argv[])
{
//进程数组
Processt[]={
{0,0,8},
{2,1,5},
{4,3,7},
{0,2,3},
{5,7,2},
};
intsize=sizeof(t)/sizeof(Process);
inttime=0;
for(size_ti=0;i
{
t[i].start=-1;
t[i].id=i;
t[i].count=t[i].duration;
}
while(1)
{
Process*process=NULL;
intisAlive=0;
//选择这个时间⽚要调⽤的进程
for(size_ti=0;i
{
Process*p=&t[i];
if(p->duration>0)
{
isAlive=1;
if(p->timeOfArrival<=time)
if(p->timeOfArrival<=time)
process=process==NULL?p:(p->priority>process->priority?p:process);
}
}
if(!isAlive)
break;
printf("[%d]",process->id);
//进程⾸次被调⽤记录开始时间
if(process->start==-1)
process->start=time;
process->duration--;
time++;
//当进程结束时计算相应数据
if(process->duration==0)
{
process->finish=time;
process->turnaround=process->finish-process->timeOfArrival;
process->wTurnaround=(double)process->turnaround/(double)process->count;
}
}
doubleaTurnaround=0;
doubleaWTurnaround=0;
for(size_ti=0;i
{
printf("nID:[%d]t开始时间:[%d]t结束时间:[%d]t周转时间:[%d]t带权周转时间:[%.2lf]",
t[i].id,t[i].start,t[i].finish,t[i].turnaround,t[i].wTurnaround);
aTurnaround+=t[i].turnaround;
aWTurnaround+=t[i].wTurnaround;
}
aTurnaround/=size;
aWTurnaround/=size;
printf("n平均周转时间:[%.2lf]t平均带权周转时间:[%.2lf]",aTurnaround,aWTurnaround);
return0;
}
六,实验结果
这⾥是最后输出的结果
七,实验总结
略
本文发布于:2022-12-27 04:02:14,感谢您对本站的认可!
本文链接:http://www.wtabcd.cn/fanwen/fan/90/37979.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |