📄 mfq.cpp
字号:
#include "class.h"
void MFQ::schedule()
{
search_new_arrProcess();//搜寻在当前这个时间点上有没有新到达的进程
cpu_user p;
search_first_process(p);//寻找所有就绪进程中优先权最高且在队首的进程
if(cpu_cur_user.ID>=0&&cpu_cur_user.ID<ProcessNum)//如果前一个单位时间1里cpu有进程
{
if (Process[cpu_cur_user.ID].remainTime<=0)//如果该进程刚好完成
{
finsh_handle(cpu_cur_user);//对该进程进行完成处理-撤离系统
if (p.ID>=0&&p.ID<ProcessNum)
{
cpu_cur_user=p;//cpu外有第一优先权的进程p成为了新的cpu使用者
come_into_cpu(cpu_cur_user);//p进入cpu
cpu_cur_user.picRemain--;
Process[cpu_cur_user.ID].remainTime--;
}
}
else{//如果该进程没有完成
if (cpu_cur_user.picRemain==0)//但是给予它的时间片刚好用完
{
kit_out_cpu(cpu_cur_user);//它被踢出cpu
if (p.ID>=0&&p.ID<ProcessNum)
{
cpu_cur_user=p;//cpu外有第一优先权的进程p成为了新的cpu使用者
come_into_cpu(cpu_cur_user);//p进入cpu
cpu_cur_user.picRemain--;
Process[cpu_cur_user.ID].remainTime--;
}
}
else{//如果给予它的时间片还没有用完
if (p.exQueue<cpu_cur_user.exQueue)//判断p和cpu_cur_user的优先权大小
{//如果p的优先权大于cpu_cur_user
kit_out_cpu(cpu_cur_user);//cpu_cur_user被踢出cpu
cpu_cur_user=p;//cpu外有第一优先权的进程p成为了新的cpu使用者
come_into_cpu(cpu_cur_user);//p进入cpu
cpu_cur_user.picRemain--;
Process[cpu_cur_user.ID].remainTime--;
}
else{//如果cpu 外部的进程优先权都低于cpu_cur_user,继续让它占有cpu
cpu_cur_user.picRemain--;
Process[cpu_cur_user.ID].remainTime--;
}
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -