实时任务中的关键技术


实时任务中的关键技术

在当今的嵌入式和实时系统中,实时性是一个关键的性能指标。为了满足严格的时间约束,系统需要以确定性和低延迟的方式运行。本文将深入探讨 SinssgyeMetaOS 中的关键技术,特别是它的双内核模式、线程的两种运行模式、动态模式切换机制,以及如何优化应用程序以充分利用实时内核的能力。


双内核模式

SinssgyeMetaOS 采用了双内核架构,运行两个独立但协同工作的内核:

这种双内核模式的设计,使得系统能够同时满足实时任务和非实时任务的需求,实现了性能和功能的平衡。


线程的两种模式

  1. 实时模式:
  2. 非实时模式:

通过允许线程在两种模式下运行,系统能够充分利用实时核心的性能,同时保留 Linux 的丰富功能。


动态模式切换

线程可以根据调用的服务类型,动态地在实时模式和非实时模式之间切换。这种机制使得线程可以灵活地使用不同的服务,而不影响系统的实时性。

模式切换规则

graph TD;
    A[线程在非实时模式运行] --> B{线程调用 Cobalt 的实时服务?};
    B -- 是 --> C[线程请求实时服务,系统检测到这是一个实时调用];
    C --> D[线程的调度从 Linux 内核切换到 Cobalt 实时核心];
    D --> E[线程进入实时模式,享受低延迟的调度];
    B -- 否 --> F[继续在非实时模式运行];

    E --> G{线程调用非实时的 Cobalt 服务或任何 Linux 服务(包括页面错误)?};
    G -- 是 --> H[线程请求非实时服务,可能会导致阻塞或不可预知的延迟];
    H --> I[为了不影响实时调度器的确定性,线程被切换回 Linux 内核];
    I --> J[线程进入非实时模式,由 Linux 内核调度];
    G -- 否 --> K[继续在实时模式运行];

模式切换的影响


应用优化目标

为了充分利用 Cobalt 实时内核的能力,开发者需要对应用程序进行优化,确保关键的实时任务始终在实时模式下运行。

找到性能受限的循环

确保线程不退出实时模式


识别问题服务调用的方法

为了防止实时线程意外地退出实时模式,需要识别和消除导致模式切换的服务调用。

  1. 静态代码分析
  1. 运行时检查

最佳实践