?? 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 + -