📄 hpf.cpp
字号:
#include "class.h"
void HPF::schedule()
{
int new_cpu_user;
search_new_arrProcess();//搜寻在当前这个时间点上新到达的进程
if(cpu_cur_user>=0&&cpu_cur_user<=ProcessNum){//当前cpu中有进程
if (Process[cpu_cur_user].remainTime==0)//但是已经完成
{
finsh_handle(cpu_cur_user);
if(!emptyQueue()){
new_cpu_user=Q.head->next->ID;
if (new_cpu_user>=0&&new_cpu_user<ProcessNum)//取队头进程进入
{
Process[new_cpu_user].status=RUN;
cout<<"进程"<<new_cpu_user<<"进入cpu"<<endl;
cpu_cur_user=new_cpu_user;
outQueue();
if(Process[new_cpu_user].remainTime==Process[new_cpu_user].reqTime){
Process[new_cpu_user].startTime=cur_time;
}
}
}
}
else{//当前cpu有进程,但是没有完成,只是一个时间片过去
if(!emptyQueue()){//如果队列非空并且队头的权大于cpu内的进程,队头进入cpu
new_cpu_user=Q.head->next->ID;
if (Process[new_cpu_user].priorityNum>Process[cpu_cur_user].priorityNum&&new_cpu_user>=0&&new_cpu_user<ProcessNum){//Process[new_cpu_user].status==READY&&
Process[cpu_cur_user].status=READY;//剔出旧的
cout<<"进程"<<cpu_cur_user<<"被别人踢出cpu"<<endl;
enterQueue(cpu_cur_user);//踢出后重新回到队列中去
Process[new_cpu_user].status=RUN;//进入新的
cout<<"进程"<<new_cpu_user<<"进入cpu"<<endl;
cpu_cur_user=new_cpu_user;
outQueue();
if(Process[new_cpu_user].remainTime==Process[new_cpu_user].reqTime){
Process[new_cpu_user].startTime=cur_time;
}
}
}
else{//否则继续然让cpu中的进程占有下一个时间片
}
}
}
else{//当前cpu中没有进程,直接看队列是否非空,
if(!emptyQueue()){
new_cpu_user=Q.head->next->ID;
Process[new_cpu_user].status=RUN;//进入新的
cout<<"进程"<<new_cpu_user<<"进入cpu"<<endl;
cpu_cur_user=new_cpu_user;
outQueue();
if(Process[new_cpu_user].remainTime==Process[new_cpu_user].reqTime){
Process[new_cpu_user].startTime=cur_time;
}
}
}
cur_time=cur_time+1;
if (cpu_cur_user>=0&&cpu_cur_user<ProcessNum)
{
Process[cpu_cur_user].remainTime=Process[cpu_cur_user].remainTime-1;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -