操作系统:C++实现SJF(短作业优先调度算法)

算法描述:

短作业(进程)优先调度算法(SJF),是指对短作业或短进程优先调度的算法。它们可以分 别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个 估计运行时间最短的作业,将它们调入内存运行。而短进程优先(SPF)调度算法则是从就绪队 列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完 成,或发生某事件而被阻塞放弃处理机时再重新调度

代码:

#include 
#include
#include
#include
#include

using namespace std;

class PCB
{
public:
    int pid;
    int arrivalTime;
    int needTime;
    int leaveTime;

    PCB()
    {
    }
    PCB(int pid,int arriveTime,int needTime)
    {
        this->pid=pid;
        this->arrivalTime=arriveTime;
        this->needTime=needTime;
        leaveTime=0;
    }

    bool operator < (const PCB &a)const
    {
        return needTime>a.needTime;
    }
    bool operator == (const PCB &a)const
    {
////        if(pid==a.pid){
////            return true;
////        }
////        else
////            return false;
        return pid==a.pid?true:false;
    }
};

class SJF
{
public:
    priority_queue pq;
    list allNeedList;
    list allFinishList;

    void prepareProcess(int pid,int arriveTime,int needTime);
    void schedule();
    void printFinishList();
};
void SJF::schedule()
{
    int currentTime=0,finishTime=-1;
    bool isBusy=false;
    PCB currentProcess;
    while (true)
    {

        if(currentTime==finishTime)  //这里是每秒都做。currentTime++,故==
        {
            isBusy=false;
            currentProcess.leaveTime=currentTime;
            allFinishList.push_back(currentProcess);
            cout<<"已结束 ";
            cout<<"周转时间:"<::iterator i=allNeedList.begin(); i!=allNeedList.end();)
        {
            if((*i).arrivalTime<=currentTime)
            {
                pq.push(*i);
                allNeedList.erase(i++);
            }
            else
            {
                i++;
            }
        }
        if(!isBusy&&!pq.empty())
        {
            currentProcess=pq.top();
            pq.pop();
            finishTime=currentProcess.needTime+currentTime;
            isBusy=true;
            cout<<"进程"<::iterator i=allFinishList.begin(); i!=allFinishList.end(); i++)
    {
        cout<

注意事项

1.将程序信息使用PCB的类存储,接近操作系统工作原理
2.程序写的比较顺,但是对基本的语法有些不熟,比如stl中的priority_queue,list。优先队列是从大到小排列,要从小到大排列故重载<运算符,用erase函数,故重载==运算符
3.#include setw \n不一样

你可能感兴趣的:(操作系统:C++实现SJF(短作业优先调度算法))