写在前面:
这一部分学习调度方式的若干准则。在一个操作系统的设计中,应如何选择调度方式和算法,在很大程度上取决于操作
系统的类型及其目标。例如,在批处理系统、分时系统和实时系统中,通常都采用不同的调度方式和算法。选择调度方式和算法的准则,有的是面向用户的,有的是面向系统的。在系统学习这些知识之前,可以先看一个生活中常见的故事。
用打开水来理解这些算法
一栋楼里有一个开水间,大家都要去开水间打水,大家每个人拿的接水的容器都不一样,有的那水库,有的拿水杯。开水间放水的速率一样,那么拿水壶接水的时间就长,拿水杯接水的时间就短。
现在,大家都来接水了,按照先来后到的顺序排队,一个用完水龙头换下一个,那么这就是FCFS算法。谁先来,谁先用,即先来先服务,first come first serve。
后来,大家发现一个问题,只拿水杯的人万一前面有拿水壶的,就要等拿水壶的打完才能用,而自己就是一个水杯,很快就能用完水龙头,却被迫等了好长时间,所以,规定,大家用水杯的可以先去打水,那么这就是SPF或SJF算法。
再后来,大家发现让打水杯的先去接水确实照顾了只占用水龙头一会的人,但是,虽然那些拿水壶的人不是特别着急,但是,这个方法说白了,还是经常让拿水杯的去插拿水壶的人的队。插队是不好的,尤其是在某些人着急用开水的情况,所以,大家又出了一个规定,根据大家用水的优先权来判断谁先来用水龙头。这就是FPF算法。
有一天,一个拿水壶的人刚来打水,打了一会,来了一个拿水杯的人,如果他不急,就等水壶接满再换人,如果他很着急,那么水壶就先暂停接水,让水杯接满就走了,然后继续接水。这就是非抢占式与抢占式调度算法。
这个算法比之前就复杂一些了。大家刚开始就制定优先权嘛,比如,根据用水需求来分,需要服务会议的人可以先接水,需要烧水做饭的人先接水等等。还根据接水的多少来确定,少的先接,多的后接。还根据用水的紧迫性来分,有的人好几天没喝水了就先接,有的人家里还有水就后接。这就是采用静态优先权来判断了,
但是楼里的人越来越多,大家用水的情况也越来越复杂,人们发现就算是这样,也会总有人用不上水,于是就通过判断等待用水的时间来优先,比如有的人等了好几天,就不能再被插队了,就优先用水,这就是动态优先权了。
面向用户的准则
为了满足用户的需求所应遵循的一些准则。
(1)周转时间短
通常把周转时间的长短作为评价批处理系统的性能、选择作业调度方式与算法的重要准则之一。周转时间,是指从作业被提交给系统开始,到作业完成为止的这段时间间隔(称为作业周转时间)。
包括四部分时间:作业在外存后备队列上等待(作业)调度的时间,进程在就绪队列上等待进程调度的时间,进程在 CPU 上执行的时间,以及进程等待 I/O 操作完成的时间。
平均周转时间描述为: