4. 分区与调度配置实战

在INTEGRITY实时操作系统中,分区(Partition)是空间隔离与时间隔离的基本单位。每个分区拥有独立的地址空间、独立的执行上下文,并在一个预先定义的主时间框架(Major Time Frame, MTF)内按固定顺序获得CPU时间窗口。本节以某型综合航电显控系统为例,完整走一遍从分区定义到调度参数配置的实战过程。示例中的参数均为教学假设值,不代表任何真实机型的实际配置。

一、明确分区划分与调度需求

假设该显控系统需要承载三个功能:主飞行显示(PFD)、导航显示(ND)和系统状态监控(STATUS)。按照DO-297的任务划分原则,三个功能分属不同分区,各自独立编译、独立加载。调度需求如下:PFD刷新率最高,要求每20ms执行一次;ND每40ms执行一次;STATUS每100ms执行一次。所有分区必须在同一个主时间框架内完成一轮调度,且PFD的时间窗口不能被ND或STATUS挤占。

在INTEGRITY中,这些需求最终映射为三类参数:分区周期(Period)、分区优先级(Priority)和CPU时间窗口(Time Window)。周期决定分区被激活的频率,优先级决定同一时刻多个分区就绪时的仲裁顺序,时间窗口决定分区单次执行可占用的CPU时长上限。

二、在配置工具中定义分区

打开INTEGRITY的配置工具(通常为INTEGRITY Configuration Editor或集成在MULTI IDE中的工程配置视图),在“Partitions”节点下依次创建三个分区。每个分区需要填写的关键属性包括:分区名称、入口点(Entry Point)、内存区域(Memory Region)、周期、优先级和时间窗口。

以PFD分区为例,配置如下:

Partition Name: PFD_Partition
Entry Point: pfd_main
Memory Region: MR_PFD (Base: 0x80000000, Size: 2MB)
Period: 20 ms
Priority: 10
Time Window: 6 ms

ND分区配置为:Period = 40 ms,Priority = 20,Time Window = 4 ms;STATUS分区配置为:Period = 100 ms,Priority = 30,Time Window = 3 ms。优先级数值越小表示优先级越高,因此PFD优先级最高,ND次之,STATUS最低。这一约定必须在整个工程中保持一致,避免后续调度分析时出现方向性错误。

在INTEGRITY中,分区优先级通常与调度策略配合使用。若采用固定优先级抢占调度,高优先级分区就绪时会立即抢占低优先级分区;若采用时间触发调度,则优先级主要用于同一时间窗口内的仲裁。本节示例采用时间触发为主、优先级为辅的混合策略。

三、设置主时间框架与时间窗口分配

主时间框架是INTEGRITY调度器循环执行的最小完整周期。所有分区的周期必须是主时间框架的整数倍或约数,且主时间框架必须能容纳所有分区在各自周期内的执行需求。本例中,PFD周期20ms、ND周期40ms、STATUS周期100ms,取最小公倍数200ms作为主时间框架。在200ms内,PFD执行10次,ND执行5次,STATUS执行2次。

接下来分配每个分区的时间窗口。时间窗口的起点和长度决定了分区在MTF中的具体位置。分配原则是:高优先级、高刷新率的分区靠前放置,且窗口长度要覆盖最坏执行时间(WCET)并留有一定余量。假设经过WCET分析,PFD最坏执行时间为5ms,ND为3ms,STATUS为2ms,则分配如下:

分区周期(ms)优先级时间窗口起点(ms)时间窗口长度(ms)MTF内执行次数
PFD_Partition20100610
ND_Partition4020645
STATUS_Partition100301032

在配置工具中,这些参数通过“Schedule”或“Time Frame”视图设置。INTEGRITY通常提供图形化的时间轴编辑器,可以直接拖拽窗口边界,也可以输入精确数值。配置完成后,工具会生成调度表并检查是否存在窗口重叠或超界。

主时间框架 200ms 内分区时间窗口分配示意 0 40 80 120 160 200 PFD 20ms 6ms 6ms 6ms 6ms 6ms 6ms 6ms 6ms 6ms 6ms ND 40ms 4ms 4ms 4ms 4ms 4ms STATUS 100ms 3ms 3ms PFD_Partition(优先级10,周期20ms,窗口6ms) ND_Partition(优先级20,周期40ms,窗口4ms) STATUS_Partition(优先级30,周期100ms,窗口3ms) MTF = 200ms PFD: 10次 × 6ms = 60ms ND: 5次 × 4ms = 20ms STATUS: 2次 × 3ms = 6ms

四、配置分区周期与优先级的注意事项

周期配置不是简单的数值填写,需要满足几个约束。第一,所有分区的周期必须是主时间框架的整数分之一,即MTF能被每个周期整除。本例中200÷20=10,200÷40=5,200÷100=2,均满足。第二,分区的执行次数与时间窗口长度的乘积之和不能超过MTF总时长。本例中PFD占用60ms,ND占用20ms,STATUS占用6ms,合计86ms,剩余114ms为空闲或预留时间,满足要求。

优先级的配置需要与调度策略匹配。在时间触发调度中,优先级主要用于处理窗口内的多个就绪任务;在抢占式调度中,优先级决定抢占关系。INTEGRITY允许为每个分区设置独立的调度策略,但同一分区内通常采用统一的策略。建议将高刷新率、安全关键的分区设为高优先级,但不要将所有分区都设为高优先级,否则优先级机制将失去意义。

时间窗口长度必须大于等于分区的最坏执行时间(WCET),否则分区会在窗口结束时被强制挂起,导致功能异常。WCET应通过静态分析或实测获得,并留出至少20%的余量。本例中PFD的WCET为5ms,窗口设为6ms,余量20%,符合要求。

五、配置验证与结果观察

配置完成后,INTEGRITY配置工具会执行一致性检查,包括:周期与MTF的整除关系、时间窗口是否重叠、窗口总和是否超界、优先级是否重复等。若检查通过,工具会生成调度表文件(通常为.sch或.xml格式),供系统加载时使用。

在实际运行中,可以通过INTEGRITY的调试接口观察调度行为。常用的观察点包括:每个分区的实际执行时间、窗口溢出次数、分区切换次数、MTF实际周期与理论周期的偏差。若发现某个分区频繁触发窗口溢出,说明WCET估计不足或窗口分配过紧,需要调整窗口长度或优化分区内代码。若MTF实际周期大于理论值,说明调度开销过大或存在未预期的阻塞,需要检查中断处理和共享资源访问。

以下是一个简化的调度配置检查清单,可用于配置完成后的快速核对:

  • 所有分区周期是否整除MTF?
  • 每个分区的时间窗口长度是否大于其WCET并留有合理余量?
  • 时间窗口之间是否存在重叠?
  • 所有窗口长度之和是否小于MTF?
  • 优先级数值是否唯一且与调度策略一致?
  • 分区内存区域是否独立且无重叠?
  • 入口点函数是否已正确链接到分区镜像?

完成上述配置后,三个分区即可在INTEGRITY的调度器管理下,按照预定的时间窗口和周期稳定运行。PFD每20ms获得一次6ms的执行窗口,ND每40ms获得一次4ms的窗口,STATUS每100ms获得一次3ms的窗口,三者互不干扰,满足显控系统对实时性和隔离性的要求。