多级队列调度算法(含实例分析)
在进程容易分成不同组的情况下,可以有另一类调度算法。例如,进程通常分为前台进程(或交互进程)和后台进程(或批处理进程)。这两种类型的进程具有不同的响应时间要求,进而也有不同调度需要。另外,与后台进程相比,前台进程可能要有更高的优先级(外部定义)。
多级队列调度算法将就绪队列分成多个单独队列(图 1)。根据进程属性,如内存大小、进程优先级、进程类型等,一个进程永久分到一个队列,每个队列有自己的调度算法。
例如,可有两个队列分别用于前台进程和后台进程。前台队列可以采用 RR 调度算法,而后台队列可以采用 FCFS 调度算法。
此外,队列之间应有调度,通常采用固定优先级抢占调度。例如,前台队列可以比后台队列具有绝对的优先。
现在,我们看一个多级队列调度算法的实例,这里有五个队列,它们的优先级由高到低:
图 1 多级队列调度
每个队列与更低层队列相比具有绝对的优先。例如,只有系统进程、交互进程和交互编辑进程队列都为空,批处理队列内的进程才可运行。如果在一个批处理进程运行时有一个交互进程进入就绪队列,那么该批处理进程会被抢占。
另一种可能是,在队列之间划分时间片。每个队列都有一定比例的 CPU 时间,可用于调度队列内的进程。例如,对于前台-后台队列的例子,前台队列可以有 80% 的 CPU 时间,用于在进程之间进行 RR 调度,而后台队列可以有 20% 的 CPU 时间,用于按 FCFS 算法来调度进程。
多级队列调度算法将就绪队列分成多个单独队列(图 1)。根据进程属性,如内存大小、进程优先级、进程类型等,一个进程永久分到一个队列,每个队列有自己的调度算法。
例如,可有两个队列分别用于前台进程和后台进程。前台队列可以采用 RR 调度算法,而后台队列可以采用 FCFS 调度算法。
此外,队列之间应有调度,通常采用固定优先级抢占调度。例如,前台队列可以比后台队列具有绝对的优先。
现在,我们看一个多级队列调度算法的实例,这里有五个队列,它们的优先级由高到低:
图 1 多级队列调度
每个队列与更低层队列相比具有绝对的优先。例如,只有系统进程、交互进程和交互编辑进程队列都为空,批处理队列内的进程才可运行。如果在一个批处理进程运行时有一个交互进程进入就绪队列,那么该批处理进程会被抢占。
另一种可能是,在队列之间划分时间片。每个队列都有一定比例的 CPU 时间,可用于调度队列内的进程。例如,对于前台-后台队列的例子,前台队列可以有 80% 的 CPU 时间,用于在进程之间进行 RR 调度,而后台队列可以有 20% 的 CPU 时间,用于按 FCFS 算法来调度进程。
所有教程
- C语言入门
- C语言编译器
- C语言项目案例
- 数据结构
- C++
- STL
- C++11
- socket
- GCC
- GDB
- Makefile
- OpenCV
- Qt教程
- Unity 3D
- UE4
- 游戏引擎
- Python
- Python并发编程
- TensorFlow
- Django
- NumPy
- Linux
- Shell
- Java教程
- 设计模式
- Java Swing
- Servlet
- JSP教程
- Struts2
- Maven
- Spring
- Spring MVC
- Spring Boot
- Spring Cloud
- Hibernate
- Mybatis
- MySQL教程
- MySQL函数
- NoSQL
- Redis
- MongoDB
- HBase
- Go语言
- C#
- MATLAB
- JavaScript
- Bootstrap
- HTML
- CSS教程
- PHP
- 汇编语言
- TCP/IP
- vi命令
- Android教程
- 区块链
- Docker
- 大数据
- 云计算