第 16 章 在实时内核和解决方案中调度问题
实时内核中的调度有时可能会导致。通过使用提供的信息,您可以了解调度策略、调度程序节流和线程不足状态的问题,以及潜在的解决方案。
16.1. 实时内核的调度策略
实时调度策略共享一个主要特征:它们运行直到高优先级线程通过休眠或执行 I/O 中断线程或线程等待。
对于 SCHED_RR
,操作系统会中断一个正在运行的线程,以便相同 SCHED_RR
优先级的另一个线程可以运行。在这两种情况下,POSIX
规格不会进行置备,该规范定义了允许较低优先级线程获得任何 CPU 时间的策略。实时线程的这种特性意味着,可轻松编写应用程序,这会对给定 CPU 的 100% 进行单调。但是,这会导致操作系统出现问题。例如,操作系统负责管理系统范围和每个 CPU 资源,必须定期检查描述这些资源的数据结构,并使用它们执行内务操作。但是,如果内核被 SCHED_FIFO
线程 monopolized,则无法执行其内务任务。最终,整个系统变得不稳定,并可能导致崩溃。
在 RHEL for Real Time 内核中,中断处理程序作为具有 SCHED_FIFO
优先级的线程运行。默认优先级为 50。高于中断处理器线程的 SCHED_FIFO
或 SCHED_RR
策略的 cpu-hog 线程可能会阻止中断处理程序运行。这会导致程序等待这些中断信号的数据,并失败。