处理机调度-短作业优先调度(SJF)

短作业优先调度,作业越短,优先级越高,先被调度。

输入:作业的数目,作业的到达时间与服务时间.

输出:作业的调用序列与其周转时间与结束时间。

运行结果:

所需数据结构:

//进程
struct Process
{
    int id;                         //进程标记
    int start_time;                 //进入时间
    int surves_time;                //服务时间
    int turnover_time;              //周转时间
    int end_time;                        //结束时间
    double priority;                //权值
};

辅助函数:

//按照服务时间进行排序,如果权值相等,则按照进入时间进行排序
bool cmp2(const Process &p1, const Process &p2)
{
    return (p1.surves_time<p2.surves_time) || (p1.surves_time==p2.surves_time && p1.start_time<p2.start_time);
}

实现方法:

void SJF(queue<int> &q, Process *p, int n)
{
    int i, j, finish;

    finish = 0;
    j = 0;                                                 //j为当前就绪队列的末尾指针
    sort(p, p+n, cmp1);
    for(i = 0; i < n; i++)
    {
        while(j<n && p[j].start_time <= finish)            //当有新的进程的进入时间小于当前时间,就加入就绪队列
            j++;
        sort(p+i, p+j, cmp2);                              //每次都按照作业长短排序,即服务时间长短。

        if(p[i].start_time > finish)
            p[i].end_time = p[i].start_time + p[i].surves_time;
        else
            p[i].end_time = finish + p[i].surves_time;
        p[i].turnover_time = p[i].end_time - p[i].start_time;
        finish = p[i].end_time;
        q.push(p[i].id);
    }
}

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值