处理机调度-优先级调度(PSA)

优先级调度,按照给定的优先级调度,优先级越高,优先被调度。

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

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

运行结果:

处理机调度-优先级调度(PSA)_第1张图片

所需数据结构:

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

辅助函数:

//按照权值进行排序,如果权值相等,则按照进入时间进行排序
bool cmp3(const Process &p1, const Process &p2)
{
    return (p1.priority > p2.priority) || (p1.priority==p2.priority && p1.start_time

实现方法:

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

    finish = 0;
    j = 0;
    sort(p, p+n, cmp1);
    for(i = 0; i < n; i++)
    {
        while(j 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);
    }
}

 

你可能感兴趣的:(操作系统)