4. 星务任务管理基本概念
星务计算机(On-Board Computer, OBC)在轨运行时,星上软件并不是“想到哪跑到哪”,而是由一套任务管理机制把有限的计算、存储、总线与时间资源,分配给姿态控制、遥测采集、遥控处理、热控、电源管理、载荷数据管理等众多功能。理解任务管理,首先要建立一组彼此关联的基本概念:任务、作业、调度、优先级、周期、截止时间与资源约束。它们不是孤立术语,而是共同构成“谁在什么时候、用什么资源、必须完成到什么程度”的约束体系。
任务与作业:静态职责与动态实例
任务(Task)是星务软件中具有独立职责、可被调度器识别和管理的执行单元。它通常对应一个相对稳定的功能,例如“采集星敏感器数据”“处理遥控指令”“刷新热控输出”“打包遥测帧”。任务在软件设计阶段就被定义,拥有自己的入口函数、栈空间、优先级、周期或触发条件,以及所需的资源集合。可以把任务理解为一份“岗位说明书”:职责固定,但具体每次执行的内容会随输入变化。
作业(Job)则是任务的一次具体执行实例。一个周期任务在每个周期到来时产生一个作业;一个事件任务在每次事件触发时产生一个作业。例如,“遥测采集任务”每 200 ms 执行一次,那么每 200 ms 就产生一个作业,作业中携带本次采集的通道号、时间戳、缓冲区地址等运行期信息。任务与作业的关系类似“类与对象”:任务是模板,作业是实例。调度器实际调度的是作业,但决策依据来自任务属性。
区分任务与作业的意义在于:任务属性(优先级、周期、截止时间)是设计期确定的,而作业属性(到达时刻、剩余执行时间、是否超时)是运行期变化的。星务软件既要在设计期保证任务集合可调度,又要在运行期监控作业是否按时完成。
调度:把处理器时间分配给作业
调度(Scheduling)是决定“当前时刻哪个作业占用 CPU”的机制。星务计算机通常采用实时调度策略,常见的有固定优先级抢占式调度、时间片轮转、以及基于时间触发的静态调度表。以固定优先级抢占式调度为例:每个任务被赋予一个优先级,调度器总是运行就绪队列中优先级最高的作业;当更高优先级作业到达时,当前作业被抢占,CPU 切换给高优先级作业。
调度需要回答三个问题:何时做决策(作业到达、作业完成、时间片耗尽、资源释放)、选哪个作业(优先级最高、截止时间最近、或按静态表)、以及是否允许抢占。星务软件中,姿态控制、遥控指令处理等任务通常要求强实时,采用抢占式调度;而遥测打包、日志记录等可容忍一定延迟,可采用非抢占或低优先级方式。
优先级:表达相对紧迫程度
优先级(Priority)是任务紧迫程度的数值化表达。数值越大(或越小,取决于系统约定)表示越紧迫。星务软件中,优先级分配通常遵循以下原则:安全关键任务最高,如姿态失控保护、电源过流保护;实时控制任务次高,如姿态确定与控制周期任务;指令与遥测处理中等;数据存储、日志、非关键统计最低。
优先级不是孤立的,它必须与周期、截止时间、资源占用一起考虑。一个高优先级任务如果执行时间过长,会阻塞所有低优先级任务,造成“优先级反转”或“饥饿”。因此,星务软件中常采用优先级继承、优先级天花板等机制,并限制高优先级任务的单次执行时间。
周期与截止时间:时间维度的双重约束
周期(Period)是周期性任务两次释放之间的时间间隔。例如,姿态控制任务周期为 100 ms,意味着每 100 ms 必须产生一次控制输出。周期决定了任务的“节拍”,也决定了 CPU 利用率的上限。若任务执行时间为 C,周期为 T,则单个任务的 CPU 利用率为 C/T;所有任务利用率之和必须小于 1,并留有余量。
截止时间(Deadline)是作业必须完成的最晚时刻。对于周期任务,截止时间通常等于或小于周期。若截止时间等于周期,称为“隐式截止时间”;若小于周期,称为“约束截止时间”。星务软件中,控制律计算、遥控指令解析等任务通常要求截止时间严格小于周期,以保证控制回路稳定和指令及时响应。
周期与截止时间共同定义了任务的实时性要求。一个任务即使优先级很高,如果周期过短、执行时间过长,也可能无法满足截止时间。因此,设计阶段需要进行可调度性分析,例如使用利用率界限测试或响应时间分析。
资源约束:共享与互斥
资源约束指任务执行过程中对 CPU、内存、总线、外设、互斥锁、信号量等资源的依赖和限制。星务计算机资源有限:CPU 主频可能只有几十到几百 MHz,内存以 MB 计,总线带宽有限,外设通道固定。多个任务可能同时请求同一资源,例如两个任务都要通过 1553B 总线发送数据,或都要访问同一块遥测缓冲区。
资源约束带来两个核心问题:互斥与死锁。互斥要求同一时刻只有一个任务占用某资源;死锁则发生在多个任务循环等待对方释放资源时。星务软件中,常用互斥锁、信号量、消息队列来管理共享资源,并通过资源有序分配、超时释放、看门狗等机制避免死锁和资源泄漏。
下面这张图把任务、作业、调度、优先级、周期、截止时间与资源约束放在同一张关系图中,帮助建立整体认识。
概念之间的联动关系
从图中可以看出,任务通过“实例化”产生作业,作业提交给调度器;优先级、周期、截止时间、资源约束分别从不同维度影响调度决策。优先级决定“谁先运行”,周期决定“何时释放”,截止时间决定“最晚何时完成”,资源约束决定“能否同时运行”。四者缺一不可。
以星务软件中典型的姿态控制任务为例:设其周期 T=100 ms,执行时间 C=20 ms,截止时间 D=100 ms,优先级为最高。则其 CPU 利用率为 0.2。若同时存在遥测采集任务 T=200 ms、C=10 ms、D=200 ms,优先级中等,则利用率 0.05;遥控处理任务 T=50 ms、C=5 ms、D=50 ms,优先级高,利用率 0.1。三者总利用率 0.35,小于 1,且留有较大余量。若再加入一个 T=20 ms、C=15 ms 的低优先级任务,利用率将升至 0.35+0.75=1.10,超过 1,系统不可调度,必须调整周期或执行时间。
这个简单计算说明:任务管理不是“把功能都塞进去”,而是要在设计阶段用周期、执行时间、截止时间和优先级做定量权衡。星务软件中,通常要求总利用率不超过 0.7~0.8,以应对中断、总线等待和偶发事件带来的额外开销。
资源约束的实践要点
资源约束在星务软件中往往比 CPU 利用率更隐蔽。例如,两个任务都要通过同一路 CAN 总线发送数据,若不加互斥,可能出现帧交错或总线冲突;两个任务都要写同一块遥测缓冲区,若不加保护,可能读到半更新数据。实践中,常用以下方式处理:
- 互斥锁:任务访问共享资源前加锁,访问后解锁。锁的持有时间应尽量短,避免高优先级任务被长时间阻塞。
- 信号量:用于任务间同步或资源计数。例如,用计数信号量管理有限个遥测缓冲区。
- 消息队列:任务间传递数据,避免直接共享内存。队列深度和消息大小需根据星上内存预算确定。
- 优先级继承:当高优先级任务等待低优先级任务持有的锁时,临时提升低优先级任务的优先级,减少优先级反转的影响。
- 看门狗与超时:对可能长时间等待的资源操作设置超时,超时后释放并记录故障,防止死锁扩散。
小结
任务、作业、调度、优先级、周期、截止时间和资源约束,共同构成了星务任务管理的概念基础。任务是静态职责,作业是动态实例;调度器在优先级、周期和截止时间的约束下选择作业运行;资源约束则保证共享资源不被破坏。理解这些概念之间的定量关系,是后续进行任务设计、可调度性分析和在轨故障排查的前提。