FIFO
FIFO全称是first in first out,是操作系统里面常见的一种算法,他就好比是一堆人在排一个队伍,按照先进先出的规则,谁首先排队谁就可以第一个出去。
它的缺点显而易见,如果第一个进去的家伙任务量过大,就会导致处理时间过长,以至于其他人都在他后面排队等待,这样就会导致平均处理任务时间过长。显然,当遇到任务量之间差别过大的情况下,使用FIFO不是一个机智的选择。
SJF
SJF的全称是shortest job first,它的理念与上面的FIFIO恰好相反,不讲究先来后到了,为了效率,先让任务量小的处理,这样就能缩短总等待时间和平均等待时间。
以下图为例,处理ABC三个程序,显然A的任务量过大,在考虑平均周转时间的前提下,SJF算法显然优于FIFO算法。但是,由于现代的调度程序几乎都是抢占式的,假设有这样一种情况,目前系统刚接受的一批任务,经过SJF算法的筛选,选出来最小的那个正在处理,这时候又来了一批程序,按照抢占式的调度规则,后面来的那一批程序选出一个在它们那一批中最小的,但是仍然比之前SJF算法选出来的任务要大得多,这种情况该如何处理?这里就要涉及到下一个我们要介绍的STCF算法;
STCF算法
如果我们可以解决每当有新的任务加入的时候比较加入的任务与之前处理的任务的大小这个问题,那我我们就不用担心后面来一个很大的任务的时候,由于现代操作系统的调度机制,而造成后来居上从而引发堵塞的情况出现。
响应时间
说完以上三种便会发现,我们在比较以上三种算法调度时间的快慢的时候用到了平均执行时间与单次执行时间来作为指标进行比较,但是这种算法往往会受限于特定的任务场景造成误差,我们在这里使用了响应时间来作为我们判断操作系统调度快慢的一种方式,响应时间指的是一个任务进入系统直到开始处理的时间之差,它能够较好的客观反映出这个操作系统的调度快慢,但是拿它也不要作为唯一的指标去批判一个操作系统的调度能力,那么我们刚刚的STCF算法便不会那么占优势,但是它确实在防止抢占式系统的调度方式上功勋卓越。