HRTOS 架构总览

内核架构总览(Kernel Architecture)

内核是HRTOS的核心控制层,负责调度执行、任务切换、中断响应与系统资源管理, 决定整个实时系统的运行行为。

核心模块 Kernel 系统控制层

模块概述

Kernel(内核层)是 HRTOS 的核心控制层,负责系统级任务调度、上下文切换、中断响应与资源分配。 它不执行业务逻辑,而是统一管理所有任务的执行顺序与系统运行状态。

在整个实时系统中,Kernel 决定“谁在运行、什么时候运行、运行多久”, 是系统确定性(Determinism)的基础来源。

如果把 HRTOS 看作一台可以被证明的状态机,内核就是负责更新状态机的唯一执行器。它并不拥有业务语义,却拥有全部时序语义,因此任何任务、驱动或通信对象的实时行为都必须经过内核的裁决。

从架构评审角度,内核总览页面承担的是“建立统一坐标系”的作用。它把调度、中断、通信和内存这些看似分散的技术点,统一解释为对同一控制核心的不同输入与约束。

从维护角度看,总览页还有一个作用:约束讨论边界。任何新功能都应该先回答它会给内核控制面增加什么状态、什么入口、什么最坏情况成本。

因此,“内核总览”真正概括的不是功能集合,而是系统赖以成立的控制假设集合。一个对象是否允许进入内核主路径,判断标准通常不是它是否常用,而是它是否能被稳定建模、是否拥有清晰所有权、是否会在极端场景下带来不可分析的等待传播。

内核执行闭环模型(Execution Loop)

HRTOS 内核不是线性流程,而是一个持续循环的控制闭环:

事件触发中断进入内核调度决策通信/同步唤醒 → 任务执行 → 返回内核

该闭环是 RTOS 实时性的本质来源:系统永远围绕“内核调度点”循环运行。

这个闭环之所以重要,是因为实时系统的错误通常不是出现在单个任务内部,而是出现在闭环节点之间的时间漂移。例如 ISR 过长会推迟调度入口,IPC 唤醒过慢会延后任务恢复,任何一个节点失去上界都会破坏整个循环的稳定节拍。

闭环中的每一个返回点都值得单独建模:系统调用返回强调状态一致性,中断返回强调抢占判定,超时返回强调时间基准确性。它们共同定义了内核能否稳定地重新获得控制权。

闭环分析的关键不在于描述“它会循环”,而在于确认每一种回到内核的路径都能在固定预算内完成状态归并。例如超时路径必须只修改有限对象,中断退出路径必须把是否需要抢占的判断压缩到极少分支,系统调用路径则必须保证对象状态在返回前已经收敛,不留下悬空状态。

内核在系统中的地位

在HRTOS中,所有模块最终都会回到内核调度点。 无论是中断、通信还是任务阻塞,本质都是“触发内核重新决策”。

因此内核不是执行单元,而是系统唯一的控制中心(Control Plane)。

从系统关系角度看,内核相当于控制平面,任务和驱动则是数据平面。控制平面决定谁可以运行、运行多久、何时让出 CPU;数据平面负责实际算法和 I/O。两者分离得越清晰,系统越容易做 worst-case analysis。

把内核放在系统中心并不意味着它承担所有运算,而是意味着所有关键决策都要经过它。驱动可以直接响应硬件,任务可以直接处理业务数据,但一旦涉及执行权变更、阻塞解除或时间预算重分配,就必须回到内核控制点,否则不同模块会形成各自的局部调度规则。

这也是内核在系统中的地位与“服务容器”完全不同的地方。它不是被动提供 API,而是主动维护一个统一的运行秩序。秩序越清楚,外围模块越容易并行开发;秩序越模糊,越容易在联调阶段暴露出优先级冲突和状态收敛问题。

为什么内核是RTOS核心

在实时系统中,内核决定了系统的确定性边界(Determinism Boundary)。 所有任务执行、通信与中断响应,最终都必须回到内核调度决策。

如果调度不可预测,则系统实时性无法保证,因此内核是整个HRTOS的唯一“控制权中心”。

这也是为什么安全关键系统总是首先审查内核路径。相比单个应用逻辑,内核路径更短却影响面更大,一次错误的优先级判断或一次不可控的临界区扩张,都可能让所有任务的响应界限同时失效。

一旦内核路径稳定,许多上层功能即使继续增加,也只是向既有控制平面施加新的输入;反之如果内核本身不可预测,再少的功能也无法真正构成 RTOS。

在工程案例中,很多“系统越做越慢”的根因并不是单个任务变重,而是新增功能不断侵蚀内核主路径,例如在调度点附近添加统计逻辑、在中断退出时链式唤醒多个对象、或在关键系统调用里引入动态分配。只要这些行为落在内核路径内,系统可预测性就会优先退化。

内核核心职责

调度控制 / 上下文切换 / 中断响应 / 系统资源管理 / 实时性保证

更具体地说,内核职责不仅包含上下文切换,还包含时基维护、超时处理、阻塞队列组织、中断退出判定以及系统对象生命周期协调。这些职责共同构成一条最短但最关键的实时控制链。

很多 RTOS 事故最终都可追溯到这些职责中的边界模糊,例如超时对象和唤醒对象分属不同路径、或中断退出和任务恢复共享过长临界区。把职责拆清,往往比单纯优化代码更重要。

如果进一步展开,内核核心职责其实可以理解为五条并行的治理线:运行权治理、时间治理、中断治理、对象治理和恢复治理。运行权治理决定谁持有 CPU,时间治理负责 tick 或下一到期事件,中断治理负责异步入口排序,对象治理负责等待和唤醒关系,而恢复治理则负责把状态切换还原为可继续执行的上下文。

相关模块

阅读相关模块时,可以把它们都映射回同一个问题:它们如何把局部事件带回内核调度点。只要这个映射关系清楚,架构图上的每个模块就都能落到可解释的执行链路上。

因此阅读总览时,最好不要把这些模块当作横向目录,而应把它们视为围绕内核展开的不同约束来源:中断提供事件压力,调度提供选择规则,IPC 提供阻塞与唤醒通道,内存提供访问边界。

若一个模块无法明确说明自己如何回到内核调度点,它通常也不适合进入硬实时主路径。

总览的价值,正在于让这种回路一眼可见。

因此,相关模块区并不是简单推荐阅读,而是一张内核周边约束图。调度器模块提供时间排序原则,中断模块提供异步扰动入口,IPC 模块提供阻塞与唤醒桥梁,内存模块提供对象放置和访问边界。只有把这些约束一并放回内核语境,系统设计才不会在局部看似正确、整体却不可证明。

从工程案例角度,可以把相关模块理解为围绕同一控制核心的三类压力源。中断模块带来突发性压力,调度模块带来选择性压力,IPC 和内存模块则带来传播性压力。优秀的内核之所以稳定,不是因为它消除了这些压力,而是因为它能把不同来源的压力统一转换成有限、短小、可恢复的状态变化。

因此,内核总览页最重要的任务并不是“介绍完所有模块”,而是帮助团队建立一个共同问题框架:每个模块会在什么时刻进入控制面、对哪些状态产生影响、对最坏情况预算施加什么成本、是否会把局部复杂度扩散到全局调度链。只要这个框架稳定,系统扩展就有明确落脚点;若框架缺失,功能越多,联调越困难。

因此,内核总览页真正提供的不是结论,而是一套持续有效的提问方式。只要团队还能用这套问题框架解释新增模块如何进入、如何影响、如何退出内核控制面,系统整体就仍然处在可管理的增长轨道上。

而一旦某个新增能力无法被这套框架自然解释,它通常就意味着内核边界需要重新审视,而不是简单把功能继续往里叠加。