四种进程调度算法FCFS时间片轮换优先级调度最短作业优先Word下载.docx
《四种进程调度算法FCFS时间片轮换优先级调度最短作业优先Word下载.docx》由会员分享,可在线阅读,更多相关《四种进程调度算法FCFS时间片轮换优先级调度最短作业优先Word下载.docx(11页珍藏版)》请在冰点文库上搜索。
//把proc2赋值给proc1voidSort(Processpr[],intsize);
//此排序后按优先级从大到小排列voidsort1(Processpr[],intsize);
//此排序后按需要的cpu时间从小到大排列voidFcfs(Processpr[],intnum,intTimepice);
//先来先服务算法voidTimeTurn(Processprocess[],intnum,intTimepice);
//时间片轮转算法voidPriority(Processprocess[],intnum,intTimepice);
//优先级算法
//////////////////////////////////////////////////////////////////////////
voidmain()
inta;
cout<
<
endl;
"
选择调度算法:
"
1:
FCFS2:
时间片轮换3:
优先级调度4:
最短作业优先"
cin>
>
a;
constintSize=30;
Processprocess[Size];
intnum;
intTimePice;
输入进程个数:
num;
输入此进程时间片大小:
TimePice;
for(inti=0;
i<
num;
i++)
stringname;
intCpuTime;
intLeval;
输入第"
i+1<
个进程的名字、cpu时间和优先级:
name;
CpuTime>
Leval;
process[i].ProcessName=name;
process[i].Time=CpuTime;
process[i].leval=Leval;
}
for(intk=0;
k<
k++)
process[k].LeftTime=process[k].Time;
//对进程剩余时间初始化
(说明:
在本程序所列进程信息中,优先级一项是指进程运行后的优先级!
!
)"
;
cout<
进程名字"
共需占用CPU时间"
还需要占用时间"
优先级"
状态"
if(a==1)
Fcfs(process,num,TimePice);
elseif(a==2)
TimeTurn(process,num,TimePice);
elseif(a==3)
Sort(process,num);
Priority(process,num,TimePice);
}
else//最短作业算法,先按时间从小到到排序,再调用Fcfs算法即可
sort1(process,num);
/////////////////////////////////
voidCopy(Processproc1,Processproc2){
proc1.leval=proc2.leval;
proc1.ProcessName=proc2.ProcessName;
proc1.Time=proc2.Time;
/////////////////////////////////////////////
voidSort(Processpr[],intsize)//以进程优先级高低排序{//直接插入排序
for(inti=1;
i<
size;
i++)
Processtemp;
temp=pr[i];
intj=i;
while(j>
0&
&
temp.leval<
pr[j-1].leval)
pr[j]=pr[j-1];
j--;
pr[j]=temp;
}//直接插入排序后进程按优先级从小到大排列
for(intd=size-1;
d>
size/2;
d--)
temp=pr[d];
pr[d]
=pr[size-d-1];
pr[size-d-1]=temp;
}//此排序后按优先级从大到小排列
///////////////////////////////////////////////////
voidsort1(Processpr[],intsize)//以进程时间从低到高排序{//直接插入排序
temp.Time<
pr[j-1].Time)
////////////////////////////////////
////先来先服务算法的实现
/////////////////////////////////voidFcfs(Processprocess[],intnum,intTimepice)
{//process[]是输入的进程,num是进程的数目,Timepice是时间片大小
//
while(true)
if(num==0)
所有进程都已经执行完毕!
exit
(1);
if(process[0].LeftTime==0)
进程"
process[0].ProcessName<
已经执行完毕!
for(inti=0;
process[i]=process[i+1];
num--;
elseif(process[num-1].LeftTime==0)
process[num-1].ProcessName<
else
//输出正在运行的进程
process[0].LeftTime=process[0].LeftTime-Timepice;
process[0].leval=process[0].leval-1;
process[0].ProcessName<
process[0].Time
process[0].LeftTime<
process[0].leval<
运行"
for(ints=1;
s<
s++)
process[s].ProcessName<
process[s].Time<
process[s].LeftTime<
process[s].leval<
等待"
;
}//else
system("
pause"
);
}//while
///////////////////////////////////////////////////
///时间片轮转调度算法实现
//////////////////////////////////////////////
voidTimeTurn(Processprocess[],intnum,intTimepice){
if(process[num-1].LeftTime==0)
<
process[num-1].ProcessName<
已经执行完毕!
elseif(process[0].LeftTime>
0)
process[0]
.LeftTim
e<
process[s].leval;
if(s==1)
就绪"
等待"
temp=process[0];
for(intj=0;
j<
j++)
process[j]=process[j+1];
process[num-1]=temp;
/////////////////////////////////////////////////
///
///优先级调度算法的实现
////////////////////////////////////////////////
voidPriority(Processprocess[],intnum,intTimepice)
while(true)
所有进程都已经执行完毕!
process[0].ProcessName<
for(intm=0;
m<
m++)
process[m]=process[m+1];
//一个进程执行完毕后从数组中删除
//此时进程数目减少一个
if(num!
=1&
process[num-1].LeftTime==0)
if(process[0].LeftTime>
process[0].Time<
//输出其他进程
process[s].leval;
Sort(process,num);