操作系统 轮转调度 优先级调度
实验要求
多道系统中,必须按照某种策略决定选取哪些进程占用处理器。本实验模拟实现进程调度,进一步加深对低级调度算法的理解。
实验内容
选择某种调度算法,设计一个实现进程调度的程序
-
轮转调度
首先明确,当一个进程的时间片结束时,另一个进程刚好到达,这时新到达的进程优先。
当有进程到达时,将其加入到就绪队列,等待正在执行的进程结束后,调用就绪队列中的第一个进程即可。 -
优先级调度
每次将到达的队列与就绪队列中的第一个进行比较,如果新到达的进程优先级高,则将新到达的进程加入到就绪队列开头,否则加入到就绪队列末尾。
每当一个进程结束时,就调用就绪队列中的第一个元素执行。
主函数中的进程按顺序加入到链表中,两个算法的参数均采用了引用的形式,可以直接在函数外部添加进程,函数内部也能马上响应。
//PCB.h
#pragma once
#include <iostream>
using namespace std;
struct PCB
{
string processName;//进程名
int priority;//优先数
int servedTime;//服务时间
int arrivedTime;//到达时间
int startTime;//开始时间
int completeTime;//完成时间
int turnaroundTime;//周转时间
float weightedTurnaroundTime;//加权周转时间
PCB()
{
this->processName = "";
this->priority = 0;
this->servedTime = 0;
this->arrivedTime = 0;
this->startTime = 0;
this->completeTime = 0;
}
PCB(string processName, int priority, int servedTime, int arrivedTime)
{
this->processName = processName;
this->priority = priority;
this->servedTime = servedTime;
this->arrivedTime = arrivedTime;
this->startTime = 0;
this->completeTime = 0;
}
};
//SchedulingAlgorithm.h
#pragma once
#include <iostream>
#include <string>
#<