系统边界(System Boundary)定义的是:内核系统与外部世界之间的可计算分割条件。
形式化表达为:
System = Kernel + Boundary + Environment
其中: Boundary 决定 Kernel 是否“可成立”
边界不是抽象修辞,而是系统能够被建模的前提。只要存在无法归入 Boundary 的执行路径,Kernel 对系统状态的控制就不再闭合,所谓“实时性”也就失去了统一判定标准。
系统边界可以抽象为约束集合:
B = {Tb, Rb, Ib}
Tb = 时间约束边界(Timing Bound)
Rb = 资源约束边界(Resource Bound)
Ib = 不确定性边界(Uncertainty Bound)
系统成立条件:
∀ event ∈ System → event ∈ B
👉 超出 B 的行为 = 非RTOS行为
Tb、Rb、Ib 可以分别映射到截止时间、资源容量和不确定性来源清单。工程上做架构审查时,往往需要为每一项建立量化上界,否则边界集合只能停留在概念层,无法进入可验证设计流程。
在RTOS语义中,Kernel不是系统组件,而是“边界执行器”。
传统 OS:
Kernel = 调度 + 管理 + 抽象
HRTOS:
Kernel = Boundary Enforcement Engine(边界执行器)
它的任务不是“运行系统”,而是:
👉 防止系统行为突破可分析空间
因此 Kernel 的首要职责不是提供更多服务,而是拒绝那些会破坏可分析空间的行为,例如无界阻塞、不可控动态分配和越权访问。它像一道主动收敛的控制闸门,而不是被动承载所有功能的容器。
Scheduling Domain 是时间边界在 CPU 上的投影:
SD ⊆ Time × Tasks
调度器只能在 SD 内做决策:
✔ 不允许未知执行路径
✔ 不允许时间不可界定行为
否则:
❌ Determinism collapse(确定性崩塌)
调度域可以理解为 CPU 上被 Boundary 裁剪后的合法执行区域。只有进入该区域的任务、ISR 和共享对象,才配得上进入可调度性分析;域外行为即使偶然运行成功,也不属于可证明系统的一部分。
系统边界具有一个关键特性:
👉 一旦突破,无法恢复可证明性
例如:
• 动态内存导致时间漂移
• cache miss 引入非确定路径
• 中断嵌套破坏执行序列
这些不是 bug,而是: 边界不可逆破坏
不可逆性强调的是证明失效,而不是程序崩溃。系统可能继续运行,但一旦最坏情况模型被破坏,任何实时保证都失去法律效力和工程意义,后续观测到的“正常运行”只能被视作偶然样本。
系统边界通过以下机制实现:
• Time isolation(时间隔离)
• Memory isolation(内存隔离)
• Interrupt gating(中断门控)
• Priority ceiling(优先级封顶)
目标不是“安全”,而是: 控制系统可分析空间
因此隔离机制的价值在于把复杂系统切成可分别证明的子空间,例如用 MPU 约束地址边界、用中断门控限制异步入口、用优先级天花板限制阻塞传播深度。隔离做得越清晰,边界条件越容易写成明确规则。
当边界失效时:
• WCET 不再成立
• 调度理论失效
• 延迟无法界定
• 系统变为“概率系统”
本质变化:
RTOS → GPOS = 从确定性系统 → 非确定性系统
系统边界决定:
✔ 系统是否可证明 ✔ 系统是否属于 RTOS ✔ 系统是否可做 worst-case analysis
没有边界 → 没有 RTOS
对于硬实时项目,系统边界往往也是需求边界。只要需求方提出的功能会突破既有边界,团队就必须同步调整任务模型、资源预算和验证方法,而不是仅靠局部编码补丁去弥补架构前提的变化。