多级反馈队列调度算法是目前公认的较好的一种进程调度算法,它能较好的满足各类进程的需要。
MFQ算法首先设置多个就绪队列。队列的优先级递减,且各队列时间片大小也不同。例如我实现的算法里,设置了3个队列,第一队列优先级>第二队列>第三队列,且后一个队列的时间片大小是前一个的2倍。
每个队列都采用FCFS策略排列。首先调度高优先级队列内的进程,如果此进程在时间片内不能运行完,则将它加入下一个队列。这样到了最后一个队列,就成了RR算法。
如果有高优先级的进程到达,则放弃正在调度的进程,转向调度最高优先级的进程。这里我的实现不是很完美,我的算法里当高优先级进程到达时,如果有进程正在运行,则需要等到这个进程时间片结束才能转到高优先级进程。需要进一步修改,今晚困了,改不动了
//main.cpp
#include "MFQ.h"int main()
{std::vector<PCB> PCBList;int timeslice;//输入时间片大小,作业信息InputPCB(PCBList, timeslice);//MFQ算法MFQ(PCBList, timeslice);//显示结果show(PCBList);return 0;
}//MFQ.h
#ifndef MFQ_H_
#define MFQ_H_#include <iostream>
#include <algorithm>
#include <iomanip>
#include <vector>
#include <queue>//作业结构体
typedef struct PCB
{int ID; //标识符int ComeTime; //到达时间int ServerTime; //服务时间int FinishTime; //完成时间int TurnoverTime; //周转时间double WeightedTurnoverTime; //带权周转时间
}PCB;/*
函数功能:输入作业信息
参数说明:
PCBList std::vector<PCB>& PCB链
timeslice int 第一队列时间片
*/
void InputPCB(std::vector<PCB> &PCBList, int ×lice);/*
函数功能:MFQ算法
参数说明:
PCBList std::vector<PCB>& PCB链
timeslice int 第一队列时间片
*/
void MFQ(std::vector<PCB> &PCBList, int timeslice);/*
函数功能&#x