实时内核要求与Linux实时路径解析
1. 实时内核的常见要求
1.1 细粒度可抢占内核
实时行为要求系统能够尽早且正确地对内部和外部事件做出反应。因此,实时内核需要能够尽快从低优先级上下文切换到需要关注的高优先级任务。这个切换所需的时间被称为抢占粒度,而等待挂起的重新调度发生的最长时间则定义了内核的最坏情况调度延迟。
早期的Linux 2.4系列通过不同的补丁解决了这个问题,在核心代码中引入了任务调度的机会。此前,新任务只能在内核上下文退出时才能被调度。后来,Robert Love提出的可抢占内核支持方法在Linux 2.5开发阶段被合并到主线内核,并成为Linux 2.6的标准特性,平均而言,它显著提高了可抢占性。
然而,任务之间的并发仍然不够理想。只要系统上的任何任务持有独占资源,内核抢占就会全局禁用,即使没有其他任务会竞争相同的资源。这导致只有平均延迟有所改善,最坏情况延迟仍然不符合硬实时要求。可以用一个交通类比来说明这个限制:想象一个城市的所有汽车(任务)都会因为一个十字路口(独占资源)的单个交通灯(抢占禁用锁)而被阻挡。解决这个限制的方法是让每个独占资源的获取和释放真正独立于其他资源,这也是PREEMPT_RT努力的一个基本方面。
1.2 严格执行的任务优先级
即使使用细粒度可抢占内核,被抢占的低优先级任务可能会长时间持有独占资源,导致请求相同资源的高优先级任务严重延迟,这就是优先级反转的例子。由于独占资源在Linux内核中广泛分布,遇到优先级反转的可能性相当高。这个问题必须通过特定的操作系统技术来解决,例如优先级继承或优先级上限,以确保这种反转是短暂且有时间限制的,甚至不会发生。
超级会员免费看
订阅专栏 解锁全文
1554

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



