处理机调度-先来先服务调度(FCFS)

在多道程序系统中,调度的实质是一种资源分配。处理机调度是对处理机资源进行分配。

处理调度算法是指根据处理机分配策略所规定的的处理机分配算法。

此系列都是实现的非抢占的调度算法。

先来先服务调度:
按照进程的先后进入次序进行调度

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

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

运行结果:

处理机调度-先来先服务调度(FCFS)_第1张图片

所需要的数据结构:

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

需要的辅助函数:

//按照进入时间进行比较
bool cmp1(const Process &p1,const Process &p2)
{
    return p1.start_time < p2.start_time;
}

实现方法:

q为服务进程队列,保存进程标记,便于输出调度队列。

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

    finish = 0;                                              //当前时间,初始化为0
    sort(p, p+n, cmp1);                                      //首先按照进入时间进行排序
    for(int i = 0; i < n; ++i)
    {
        //如果进程在当前时间没有到来,结束时间就是进入时间加服务时间
        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;
        //更新当前时间
        finish = p[i].end_time;
        //周转时间就是结束时间-进入时间
        p[i].turnover_time = p[i].end_time - p[i].start_time;
        //保存运行进程编号,用于输出。
        q.push(p[i].id);
    }
}

 

 

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