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

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



