Linux任务调度策略
linux内核的三种调度方法
- SCHED_OTHER 分时调度策略
- SCHED_FIFO实时调度策略,先到先服务
- SCHED_RR实时调度策略,时间片轮转
当系统中只有三种调度方式中的一种时
所有任务都采用linux分时调度策略时(SCHED_OTHER)
创建任务指定采用分时调度策略,并指定优先级nice值(-20~19)。
将根据每个任务的nice值确定在cpu上的执行时间(counter)。
如果没有等待资源,则将该任务加入到就绪队列中。
调度程序遍历就绪队列中的任务,通过对每个任务动态优先级的计算(counter+20-nice)结果,选择计算结果最大的一个去运行,当这个时间片用完后(counter减至0)或者主动放弃cpu时,该任务将被放在就绪队列末尾(时间片用完)或等待队列(因等待资源而放弃cpu)中。
此时调度程序重复上面计算过程,转到第4步。
当调度程序发现所有就绪任务计算所得的权值都为不大于0时,重复第2步。当调度程序发现所有就绪任务计算所得的权值都为不大于0时,重复第2步。
所有任务都采用FIFO时
创建进程时指定采用FIFO,并设置实时优先级rt_priority(1-99)。
如果没有等待资源,则将该任务加入到就绪队列中。
调度程序遍历就绪队列,根据实时优先级计算调度权值(1000+rt_priority),选择权值最高的任务使用cpu,该FIFO任务将一直占有cpu直到有优先级更高的任务就绪(即使优先级相同也不行)或者主动放弃(等待资源)。相同优先级的任务在队列中