目录
先来先服务调度算法
非抢占式的先来先服务算法
就像队列一样,先进先出,这似乎很公平
但是当一个长作业先运行了,那么后面的短作业等待的时间就会很长,不利于短作业。
先来先服务: 对长作业有利,适用于 CPU 繁忙型作业的系统,而不适用于 I/O 繁忙型作业的系统。
CPU繁忙型作业:是指那些需要大量的CPU时间进行计算,而很少请求I/O操作的作业。
而先来先服务,对长作业有利,也就是利于大量CPU时间进行计算
I/O繁忙型作业:是指那些在执行过程中需要频繁进行I/O操作的作业,那么进行IO的话,
肯定等待I/O操作完成,那么CPU只能干等,白白浪费CPU的资源
最短作业优先调度算法
优先选择运行时间最短的进程来运行,这有助于提高系统的吞吐量。
这显然对长作业不利,那么会造成什么问题呢?
比如,一个长作业在就绪队列等待运行,而这个就绪队列加入了非常多的短作业,
那么就会使得长作业不断的往后推,周转时间变长,致使长作业长期不会被运行。
高响应比优先调度算法
每次进行进程调度时,先计算 响应比优先级,然后把 响应比优先级 最高的进程投入运行,
那么 是如何计算 响应比优先级:
对短作业:要求服务时间小, 那么值肯定更大
对长作业:要求服务时间大,那么值肯定就越小,但是随着 等待时间增加优先级会越来越高
但是 我们怎么知道 要求服务时间呢? 所以这个算法太理想了,难以实际应用
时间片轮转调度算法
每个进程都被分配一个时间片,在规定的时间内完成,没有完成就重新插入到 就绪队列 末尾
但是又引出两个问题:
一,如果时间片设得太短会导致过多的进程上下文切换,降低了 CPU 效率;
二, 如果设得太长又可能引起对短作业进程的响应时间变长。
通常时间片设为 20ms~50ms 通常是一个比较合理的折中值。
最高优先级调度算法
从就绪队列中选择最高优先级的进程进行运行,这称为最高优先级调度算法。
两种优先级:
静态优先级:创建进程时候,就已经确定了优先级了,然后整个运行时间优先级都不会变化;
动态优先级:根据进程的动态变化调整优先级,比如 如果进程运行时间增加,则降低其优先级,如果进程等待时间增加,则升高其优先级
两种处理优先级高的方法:
非抢占式:当就绪队列中出现优先级高的进程,运行完当前进程,再选择优先级高的进程。(谦让)
抢占式:当就绪队列中出现优先级高的进程,当前进程挂起,调度优先级高的进程运行。(霸道)
多级反馈队列调度算法
多级 表示有多个队列,每个队列优先级从高到低,同时优先级越高时间片越短。
反馈 表示如果有新的进程加入优先级高的队列时,立刻停止当前正在运行的进程,转而去运行优先级高的队列;
短作业:可能可以在第一级队列很快被处理完,因为只需要很小的时间片
长作业:如果在第一级队列处理不完,可以移入下次队列等待被执行,
虽然等待的时间变长了,但是运行时间也会更长了