FisrtComeFirstServe——先到先服务算法
按照进程进入就绪队列的顺序,来执行进程。用一个队列维护即可。
ShortestJobFirst——短作业优先算法
我实现的是非抢占式SJF,可以通过优先队列来判断已ready且cpu burst最短的进程,但我不太熟,就写了一个getnext()来实现。
RoundRobin——轮询算法
用队列来维护,具体看代码吧。
=。=没加注释,完了补上。
#include <iostream>
#include <fstream>
#include <iomanip>
#include <algorithm>
#include <queue>
using namespace std;
struct PCB{
int id;
int exectime;
int readytime;
int start;
int end;
int prio;
int index;
bool operator < (PCB a)const
{
return exectime > a.exectime;
}
}pcb[10];
int pAmt;
int timeslice;
bool cmpfcfs(PCB a, PCB b){
if(a.readytime!=b.readytime)
return a.readytime <b.readytime;
return a.prio<b.prio;
}
void fcfs(){
ofstream f2("./outputFCFS.txt", ios::app);
f2<<"fcfs-------------"<<endl;
sort(pcb, pcb+pAmt,cmpfcfs);
for(int i=0;i<10;i++){
pcb[i].index=i;
}
int cputime=0;
for(int i=0;i<pAmt;i++){
pcb[i].start=cputime;
pcb[i].end=pcb[i].start+pcb[i].exectime;
cputime+=pcb[i].exectime;
f2<<pcb[i].id<< " ";
}
f2&