Linux实时调度策略

 Linux提供了两种实时调度策略: SCHED_FIFO和SCHED_RR。 而普通的、非实时的调度策略是SCHED_NORMAL。

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任务,即使它的时间片耗尽。
这两种实时调度算法实现的都是静态优先级。内核不为实时进程计算动态优先级。这能保证给定优先级别的实时进程总能抢占优先级比它低的进程。
实时优先级范围从0到MAX_RT_PRIO-1。默认情况下,MAX_RT_PRIO为100 -- 所以默认的实时优先级范围从0到99。 SCHED_NORMAL级进程的nice值共享了这个取值空间;它的取值范围从MAX_RT_PRIO到(MAX_RT_PRIO+40)。 也就是说, 默认情况下,nice值从-20到+19直接对应的是从100到139的实时优先级范围。


实时进程           普通进程
0 ---------- 99 100 ---------- 139  

实时进程的优先级范围为0~99,其中99的优先级最高


     /|/ prio
      |           +
      |          /|
      |         / |
      |        /  |
      |       /   |
      |      /    |
      |     /     |
      |    /      |
      |   /       |
      |  /        |
      | /         |
      |/          |
      +-----------+-+
      |             |/
      |             | /
      |             |  /
      |             |   /
      |             |    /
      +-----------+-+-----+-----------------> prio value
      0          99 100   139 





+--------------+<-- priority low
|              |
|              |
|              | Process Context
|              |
|              |
| schedule()   |
+--------------+---
|              |
|              |
|              |
|              |
|              |Interrupt Context  
|              |  
| do_softirq() |
+--------------+
|              |
| do_IRQ()     |
+--------------+<--  priority high
|              |
|Exception    |
+--------------+
系统优先级示意图,优先级自下而上,有高到低
异常、中断、软中断、进程 优先级示意图

需要继续分析:
中断优先级;
软中断优先级;
任务优先级;


说明:中断是一种异常(或者说,中断使用异常机制实现),异常的发生不受关中断的影响。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值