Linux内核深度解析
上QQ阅读APP看书,第一时间看更新

2.8 进程调度

2.8.1 调度策略

Linux内核支持的调度策略如下。

(1)限期进程使用限期调度策略(SCHED_DEADLINE)。

(2)实时进程支持两种调度策略:先进先出调度(SCHED_FIFO)和轮流调度(SCHED_RR)。

(3)普通进程支持两种调度策略:标准轮流分时(SCHED_NORMAL)和空闲(SCHED_IDLE)。以前普通进程还有一种调度策略,称为批量调度策略(SCHED_BATCH), Linux内核引入完全公平调度算法以后,批量调度策略被废弃了,等同于标准轮流分时策略。

限期调度策略有3个参数:运行时间runtime、截止期限deadline和周期period。如图2.23所示,每个周期运行一次,在截止期限之前执行完,一次运行的时间长度是runtime。

图2.23 限期调度策略

先进先出调度没有时间片,非常霸道,如果没有更高优先级的实时进程,并且它不睡眠,那么它将一直霸占处理器。

轮流调度有时间片,进程用完时间片以后加入优先级对应运行队列的尾部,把处理器让给优先级相同的其他实时进程。

标准轮流分时策略使用完全公平调度算法,把处理器时间公平地分配给每个进程。

空闲调度策略用来执行优先级非常低的后台作业,优先级比使用标准轮流分时策略和相对优先级为19的普通进程还要低,进程的相对优先级对空闲调度策略没有影响。