本文实现了操作系统的调度算法的模拟,使用c++语言实现,主要有先到先服务算法,最短作业优先,最高相应比,循环轮转算法。对于刚学操作系统的同学十分有帮助。
#include<iostream>
#include<string>#include<vector>
#include<list>
#include<ctime>
#include<cstdlib>
#include<algorithm>
#include<utility>
#include<functional>
using namespace std;
const int constCpuChip = 1;//时间片
int dynamicCpuChip = 1;//动态CPU事件片
//class process;
//寄存器信息
class registerInfo{
public:
int psw;//程序状态字
int pc;//程序计数器
//others
public:
registerInfo(){}//default
registerInfo(int psw, int pc){//constructor
this->psw = psw;
this->pc = pc;
}
void set(int psw, int pc){//set info
this->psw = psw;
this->pc = pc;
}
void switchRegister(registerInfo&p){
cout << "register is being switched..." << endl;
cout << "current CPU register info is:" << endl;
cout << *this;
this->psw = p.psw;
this->pc = p.pc;
cout << "register finished switch." << endl;
cout << "current CPU register info is:" << endl;
cout << *this;
}
friend ostream& operator<<(ostream&cout, registerInfo&r){
cout << "psw:" << r.psw << endl;
cout << "pc: " << r.pc << endl;
return cout;
}
};
registerInfo cpuRegister(0,0);//设置一个cpu寄存器用来交换
class userProgram{
public:
string userCode;//用户代码
string userData;//用户数据
public:
userProgram(string userCode="userCode",string userData="userData"){
this->userCode = userCode;
this->userData = userData;
}
friend ostream& operator<<(ostream&cout, userProgram&u){
cout << "userCode:" << u.userCode << endl;
cout << "userData:" << u.userData << endl;
return cout;
}
void set(string userCode, string userData){
this->userCode = userCode;
this->userData = userData;
}
};
class process{
public:
class PCB{
public:
int processID;//进程ID
int priority;//优先级
string processStatus;//进程状态
registerInfo processRegister;//寄存器级上下文
userProgram processProgram;//用户级上下文
}processPCB;
public:
int arriveTime;//进程到达时间
int burstTime;//进程阵发时间
int turnaroundTime;//一个进程的周转时间
int remainigTime;//剩余时间
public:
process(string s){}
process(int processID=0,int priority=0,string processStatus="ready",int psw=0,int pc=0,string userCode="userCode",string userData="userData",int arriveTime=0,int burstTime=0){
processPCB.processID = processID;
processPCB.priority = priority;
processPCB.processStatus = processStatus;
processPCB.processRegister.set(psw, pc);
processPCB.processProgram.set(userCode, userData);
this->arriveTime = arriveTime;
this->burstTime = burstTime;
this->remainigTime = burstTime;//创建进程的时候剩余时间就是阵发时间
this->turnaroundTime = 0;
cout << "=======================================================================================================================" << endl;
cout << "create a process..." << endl;
cout << "process is created." << endl;
cout << "process info is:" << endl;
cout << *this;