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调度器循环执行的最小完整周期。所有分区的周期必须是主时间框架的整数倍或约数,且主时间框架必须能容纳所有分区在各自周期内的执行需求。本例中,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_Partition | 20 | 10 | 0 | 6 | 10 |
| ND_Partition | 40 | 20 | 6 | 4 | 5 |
| STATUS_Partition | 100 | 30 | 10 | 3 | 2 |
在配置工具中,这些参数通过“Schedule”或“Time Frame”视图设置。INTEGRITY通常提供图形化的时间轴编辑器,可以直接拖拽窗口边界,也可以输入精确数值。配置完成后,工具会生成调度表并检查是否存在窗口重叠或超界。
四、配置分区周期与优先级的注意事项
周期配置不是简单的数值填写,需要满足几个约束。第一,所有分区的周期必须是主时间框架的整数分之一,即MTF能被每个周期整除。本例中200÷20=10,200÷40=5,200÷100=2,均满足。第二,分区的执行次数与时间窗口长度的乘积之和不能超过MTF总时长。本例中PFD占用60ms,ND占用20ms,STATUS占用6ms,合计86ms,剩余114ms为空闲或预留时间,满足要求。
优先级的配置需要与调度策略匹配。在时间触发调度中,优先级主要用于处理窗口内的多个就绪任务;在抢占式调度中,优先级决定抢占关系。INTEGRITY允许为每个分区设置独立的调度策略,但同一分区内通常采用统一的策略。建议将高刷新率、安全关键的分区设为高优先级,但不要将所有分区都设为高优先级,否则优先级机制将失去意义。
五、配置验证与结果观察
配置完成后,INTEGRITY配置工具会执行一致性检查,包括:周期与MTF的整除关系、时间窗口是否重叠、窗口总和是否超界、优先级是否重复等。若检查通过,工具会生成调度表文件(通常为.sch或.xml格式),供系统加载时使用。
在实际运行中,可以通过INTEGRITY的调试接口观察调度行为。常用的观察点包括:每个分区的实际执行时间、窗口溢出次数、分区切换次数、MTF实际周期与理论周期的偏差。若发现某个分区频繁触发窗口溢出,说明WCET估计不足或窗口分配过紧,需要调整窗口长度或优化分区内代码。若MTF实际周期大于理论值,说明调度开销过大或存在未预期的阻塞,需要检查中断处理和共享资源访问。
以下是一个简化的调度配置检查清单,可用于配置完成后的快速核对:
- 所有分区周期是否整除MTF?
- 每个分区的时间窗口长度是否大于其WCET并留有合理余量?
- 时间窗口之间是否存在重叠?
- 所有窗口长度之和是否小于MTF?
- 优先级数值是否唯一且与调度策略一致?
- 分区内存区域是否独立且无重叠?
- 入口点函数是否已正确链接到分区镜像?
完成上述配置后,三个分区即可在INTEGRITY的调度器管理下,按照预定的时间窗口和周期稳定运行。PFD每20ms获得一次6ms的执行窗口,ND每40ms获得一次4ms的窗口,STATUS每100ms获得一次3ms的窗口,三者互不干扰,满足显控系统对实时性和隔离性的要求。