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