Linux实时调度与内存管理全解析
实时调度策略
实时调度策略旨在实现确定性。实时调度器会始终运行优先级最高且准备好执行的实时线程,并且实时线程总是会抢占分时线程。选择实时调度策略而非分时调度策略,意味着你对线程的预期调度有深入了解,并希望覆盖调度器的内置假设。
实时调度策略类型
实时调度策略主要有两种:
- SCHED_FIFO :这是一种运行至完成的算法。线程一旦开始运行,就会持续执行,直到被更高优先级的实时线程抢占、在系统调用中被阻塞或终止。
- SCHED_RR :这是一种轮询算法。如果同一优先级的线程超出了其时间片(默认值为100ms),调度器会在这些线程之间循环调度。从Linux 3.9开始,可以通过 /proc/sys/kernel/sched_rr_timeslice_ms 来控制时间片的值。除了时间片机制外,它的行为与SCHED_FIFO相同。
每个实时线程的优先级范围是1到99,其中99为最高优先级。要为线程赋予实时调度策略,需要 CAP_SYS_NICE 权限,默认情况下只有root用户拥有该权限。
实时调度的问题及解决方法
实时调度存在一个问题,即当某个线程因计算密集而陷入无限循环时,会阻止低优先级的实时线程和所有分时线程运行,导致系统不稳定甚至完全锁定。可以通过以下两种方法来防范这种情况:
1. 预留CPU时间 :从Linux 2.6.25开始,调度器默认会为非实时线程预留5%的CPU时
超级会员免费看
订阅专栏 解锁全文
1644

被折叠的 条评论
为什么被折叠?



