高级调度:作业调度,从外存里处于后备队列中的作业中选择一个调入内存。
调出只有在作业完成后才会调出,因此,高级调度主要指的就是调入问题。
中级调度:内存调度 就是挂起态相关的调度。决定将哪一个挂起态的进程重新调入内存。发生频率比高级调度高。
低级调度:进程调度。
挂起态:将暂时不能运行的进程调出内存,放在外存中等待,但PCB仍留在内存中。可以提高内存利用率和系统吞吐量。该进程的PCB会被放入挂起队列中。
挂起状态分为就绪挂起和阻塞挂起。因为内存不够用,所以需要挂起。
抢占式调度:
非抢占式调度:只允许进程主动放弃处理机,即便有更高优先级的进程,也不会调度它。
调度算法
以下三种算法,并不关心响应时间,也不区分任务紧急程度,交互性很糟糕,一般使用在批处理系统中。
先来先服务(作业/进程调度皆可):用于作业调度时,考虑哪个作业先到达后备队列,进程调度时,考虑哪个进程先到达就绪队列。非抢占式算法。
对长作业有例,对短作业不利。 但公平、算法实现简单。
不会导致饥饿。
短作业优先:追求更少的平均等待时间,最少的平均周转时间,最少的平均带权周转时间。题目中未提到,则默认为非抢占式的。
最短剩余时间优先算法的以上指标更短。(也就是抢占式短作业优先算法)
若所有进程几乎同时到达,则采用短作业有限SJF调度算法的平均等待时间、周转时间是最少的。
可能会导致饥饿。对于短作业有利,对于长作业不利。
高响应比优先:又考虑等待时间,又考虑作业运行时间。
在每次调度时,先计算各个作业的响应比,高的优先服务。
响应比=(等待时间+要求服务时间)/要求服务时间 >=1
非抢占式算法。
综合了上面两种,等待时间相同时,作业时间短的优先。作业时间相同,等待时间长的优先。
不会导致饥饿。
适用于交互性系统的调度算法
这里不再计算平均周转时间等,因为更关注用户响应时间。
时间片轮转调度算法(用于进程调度):公平、轮流的为各个进程服务,让每个进程在一定时间间隔内都可以得到响应。
按照进程到达就绪队列的顺序,轮流让各进程执行一个时间片,如果未在一个时间片内执行完毕,则将进程重新放到就绪队列队尾重新排队。
是抢占式算法,由时钟装置发出时钟中断来通知CPU时间片已到。
若时间片大小设置太大,则会退化为先来先服务算法。设置得太小,进程切换太过频繁,系统消耗很大。一般来说,切换进程开销占比不超过百分之一时,时间片大小设置合理。
不会导致饥饿。
缺点:不会区分任务的紧急程度。系统有一定开销。
优先级调度算法(作业/进程/IO调度皆可):每个作业/进程有一定优先级。
抢占/非抢占版本都有。抢占式,在就绪队列发生变化时,需要检查是否有优先级更高的进程。
多级反馈调度算法: