在多道程序系统中,调度的实质是一种资源分配。处理机调度是对处理机资源进行分配。
处理调度算法是指根据处理机分配策略所规定的的处理机分配算法。
此系列都是实现的非抢占的调度算法。
先来先服务调度:
按照进程的先后进入次序进行调度
输入:作业的数目,作业的到达时间与服务时间.
输出:作业的调用序列与其周转时间与结束时间。
运行结果:
所需要的数据结构:
//进程
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<int> &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);
}
}