1、“先来先服务”调度算法
编程思路:
对各进程按照到达时间进行排序,挑选最先到达的进程一次性执行完毕,判断是否所有进程都被调度,若是则结束,否则返回挑选最先到达的进程一次性执行完毕步骤,继续执行后续程序。按照进程进入的先后次序来分配处理器。先进入就绪队列的进程优先被挑选,运行进程一旦占有处理器将一直运行下去,直到运行结束或者被阻塞,这是非抢占式调度。
代码如下:
//排序: 按照进程的arrivetime(从小到大)对pcb数组中的N个进程进行排序
void sort(pcb *p, int N)
{
for(int i=0; i < N-1; i++)
{
for(int j=0; j<N-1-i; j++)
{
if(p[j].arrivetime > p[j+1].arrivetime)
{
pcb temp;
temp=p[j];
p[j]=p[j+1];
p[j+1]=temp;
}
}
}
}
//运行
void run(pcb *p, int N)
{
int k;
for(k=0; k<N; k++)
{
if(k==0) //第1个进程
{
p[k].starttime = p[k].arrivetime; //第1个进程到达之后即可执行
p[k].finishtime = p[k].starttime + p[k].servicetime;
}
else
{
p[k].starttime = (p[k-1].finishtime >= p[k].arrivetime)? p[k-1].finishtime: p[k].arrivetime;
p[k].finishtime = p[k].starttime + p[k].servicetime;
}
}
for(k=0; k<N; k++)
{
p[k].zztime = p[k].finishtime - p[k].arrivetime;
p[k].dqzztime = p[k].zztime / p[k].servicetime;
}
}
//显示
void Print(pcb*p, int N)
{
int k;
printf("调用先来先服务算法以后进程运行的顺序是: ");
printf("%s"