进程的调度算法主要有以下几种:
算法 | 解释 | 优点(特点) | 缺点 |
---|---|---|---|
先来先服务算法(FCFS) | 是最简单的调度算法,按先后顺序进行调度;按照作业提交或进程变为就绪状态的先后次序分派 CPU;当前作业或进程占用 CPU,直到执行完或阻塞,才让出 CPU,属于非抢占式调度 | 公平、有利于长作业、CPU 繁忙的作业 | 不利于I/O繁忙的工作,不利于短作业 |
轮转法(RR) | 轮转法就是让每个进程在就绪队列中的等待时间与享受服务的时间成正比。固定一个时间片,每个进程都会运行这个时间片大小的时间,运行完这段时间就将 CPU 切换到下一个进程(也就是雨露均沾的意思,让每个进程都能得到 CPU 的青睐),属于抢占式调度。 | 兼顾长短作业 | 平均等待时间较长,上下文切换较为费时 |
优先级调度算法(HPF) | 根据进程优先级来分配 CPU。优先级调度算法还可以分为抢占式和非抢占式: | ||
非抢占式优先级调度:操作系统将 CPU 分配给优先级高的进程后,就会一直执行下去,直到执行完成,或者中断后,CPU 才会闲下来分给别的次优先级进程。 | 主要用于批处理,或者实时性要求不严的实时系统中 | ||
抢占式优先级调度:操作系统同样先把 CPU 分配给优先级高的进程,让其执行,但是当有新的比正在运行的进程优先级更高的进程时,会立即中断当前的任务,去执行优先级更高的任务。每次系统中有新的就绪程序时,就会比较它与当前正在执行的进程的优先级,让优先级高的先运行 | 适用于更紧迫的作业的要求 | ||
多级反馈队列算法 | 将时间片轮转与优先级队列结合的算法:先运行优先级高的进程,当优先级相同时,采用时间片轮转的方式运行。 | 兼顾长短作业,有较好的响应时间,可行性强,适用于各种作业环境。 | |
高响应比优先调度算法 | 结合短作业优先调度算法 和 动态优先权制的算法 公式: 根据响应比,如果响应比越高,就先分配 CPU | 兼顾长短作业以及先后次序 | 计算响应比增加系统开销。 |
短进程优先调度算法(SPN) | 对短进程优先的算法,也就是说运行时间越短优先级越高,选一个估计运行时间最短的进程,分配 CPU,直到运行完或者受到中断 | 调度性能较好 | 难以准确的直到下一个 CPU 执行期,只能根据每一个进程的执行历史来预测。 |
先来先服务算法为什么不利于I/O繁忙的作业、短作业?
答:对于长作业以及CPU频繁作业来说,当进程占用了CPU,就会一直运行,也就是长时间占用CPU,而 I/O 繁忙型程序是频繁访问 I/O 接口,每次访问 I/O 接口都会放弃 CPU,等 I/O 接口访问完后又要重新等待下一次调度,就排到队尾了,又要等待很长时间,所以先来先服务算法不利于 I/O 繁忙型算法。