Linux(内核剖析):11---进程调度之实时调度策略(SCHED_FIFOSCHED_RRMAX_RT_PRIO实时优先级)

Posted 董哥的黑板报

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux(内核剖析):11---进程调度之实时调度策略(SCHED_FIFOSCHED_RRMAX_RT_PRIO实时优先级)相关的知识,希望对你有一定的参考价值。

  • Linux提供了两种实时调度策略:SCHED_FIFO和SCHED_RR
  • 普通的、非实时的调度策略是SCHED__NORMAL
  • 借助调度类的框架,这些实时策略并不被完全公平调度器来管理, 而是被一个特殊的实时调度器管理。具体的实现定义在文件kernel/sched_rt.c中,在接下来的内容中我们将讨论实时调度策略和算法
一、SCHED_FIFO
  • SCHED_FIFO实现了一种简单的、先入先出的调度算法:它不使用时间片
  • 特点:
    • 处于可运行状态的SCHED_FIFO级的进程会比任何SCHED_NORMAL级的进程都先得到调用
    • 一旦一个SCHED_FIFO级进程处于可执行状态,就会一直执行,直到它自己受阻塞或显式地释放处理器为止,它不基于时间片,可以一直执行下去
    • 只有更高优先级的SCHED_FIFO或者SCHED_RR任务才能抢占SCHED_FIFO任务
    • 如果有两个或者更多的同优先级的SCHED_FIFO级进程,它们会轮流执行,但是依然只有在它们愿意让出处理器时才会退出
    • 只要有SCHED_FIFO级进程在执行,其他级别较低的进程就只能等待它变为不可运行态后才有机会执行
二、SCHED_RR
  • SCHED_RR与SCHED_FIFO大体相同,只是SCHED_RR级的进程在耗尽事先分配给它的时间后就不能再继续执行
  • 也就是说,SCHED_RR是带有时间片的SCHED_FIFO——这是一 种实时轮流调度算法
  • 特点:
    • 当SCHED_RR任务耗尽它的时间片时,在同一优先级的其他实时进程被轮流调度
    • 时间片只用来重新调度同一优先级的进程
    • 对于SCHED_FIFO进程, 优先级总是立即抢占低优先级,但低优先级进程决不能抢占SCHED_RR任务,即使它的时间片耗尽
三、软实时
  • 上面介绍的这两种实时算法实现的都是静态优先级。内核不为实时进程计算动态优先级。这能保证给定优先级別的实时进程总能抢占优先级比它低的进程
  • Linux的实时调度算法提供了一种软实时工作方式
  • 软实时的含义是:内核调度进程,尽力使进程在它的限定时间到来前运行,但内核不保证总能满足这些进程的要求。相反,硬实时系统证在一定条件下,可以满足任何调度的要求。Linux对于实时任务的调度不做任何保证。虽然不能保证硬实时工作方式,但Linux的实时调度算法的性能还是很不错的。2.6版的内核可以满足严格的时间要求
四、实时优先级(MAX_RT_PRIO)
  • 实时优先级范围从0到MAX_RT_PRIO减1
  • 默认情况下,MAC_RT_RTIO为100——所以默认的实时优先级范围从0到99
  • SCHED_NORMAL级进程的noce值共享了这个取值空间。它的取值范围从MAC_RT_PRIO到(MAC_RT_PRIO+40)。也就是说,在默认情况下,nice值从-20到+19直接对应的是从100到139的实时优先级范围

以上是关于Linux(内核剖析):11---进程调度之实时调度策略(SCHED_FIFOSCHED_RRMAX_RT_PRIO实时优先级)的主要内容,如果未能解决你的问题,请参考以下文章

Linux(内核剖析):12---进程调度之与调度相关的系统调用

Linux(内核剖析):07---进程调度总体概述(多任务系统策略时间片)

Linux(内核剖析):09---进程调度之Linux调度的实现(struct sched_entityschedule())

linux内核源码分析之实时调度

linux内核源码分析之进程调度

Linux 内核实时调度类 ① ( 进程分类 | 实时进程普通进程 | Linux 内核 SCHED_FIFOSCHED_RR 调度策略 | 实时调度实体 sched_rt_entity )