菜单

任务调度 (WAITLIST)

相关源文件

WAITLIST 子系统是阿波罗制导计算机 (AGC) 的任务调度系统,它能够延迟执行程序任务。这种基于时间的调度机制允许 AGC 在特定时间间隔执行任务,在计算资源有限的实时环境中优先处理操作。WAITLIST 管理需要在特定延迟后执行的操作,从几厘秒到几分钟不等。

有关任务执行环境的信息,请参阅核心运行时系统;有关执行许多调度任务的解释器的信息,请参阅解释器和扩展动词

系统概览

任务调度系统由三个主要组件组成:WAITLIST、T3RUPT 和 TASKOVER。WAITLIST 管理在指定延迟后执行的任务排队,T3RUPT 处理常规中断服务以检查和分派任务,TASKOVER 管理任务的完成。

来源:Comanche055/WAITLIST.agc37-63 Comanche055/WAITLIST.agc378-438

关键系统约束

WAITLIST 系统在以下几个重要约束下运行

约束描述
时间范围1到16250厘秒延迟时间必须在0.01到162.5秒之间
最大任务数9最多只能同时调度9个任务
中断处理必须在中断被禁止的情况下调用任务在中断被禁止的情况下注册
任务完成必须以 TC TASKOVER 结束任务必须通过调用 TASKOVER 终止

来源:Comanche055/WAITLIST.agc57-62

数据结构

WAITLIST 系统维护两个主要数据结构

  1. LST1 - 连续任务之间的时间差列表
  2. LST2 - 待执行的任务地址列表 (2CADR 格式)

这些结构协同工作,以维护一个按时间排序的待处理任务队列。

来源:Comanche055/WAITLIST.agc39-55

任务注册

当程序需要在延迟后调度一个任务执行时,它会调用 WAITLIST 并传入延迟时间和任务地址。

调用序列

L-1   CA    DELTAT      (Time in centiseconds to task start)
L     TC    WAITLIST
L+1   2CADR DESIRED TASK
L+2   (Minor of 2CADR)
L+3   RELINT            (Returns here)

对于与调用者在同一 EBANK 和 FBANK 中的任务,可以使用更高效的 TWIDDLE 例程

L-1   CA    DELTAT
L     TC    TWIDDLE
L+1   ADRES DESIRED TASK
L+2   RELINT            (Returns here)

来源:Comanche055/WAITLIST.agc64-82

任务插入过程

当新任务注册到 WAITLIST 时,系统会

  1. 计算任务应何时执行
  2. 找到时间排序列表中的正确位置
  3. 使用新的时间差更新 LST1
  4. 将任务地址存储在 LST2 中

来源:Comanche055/WAITLIST.agc138-144 Comanche055/WAITLIST.agc201-271

任务分派机制

T3RUPT 中断处理程序负责在任务到期时分派它们执行。

T3RUPT 流程

来源:Comanche055/WAITLIST.agc378-418 Comanche055/WAITLIST.agc423-438

用于延长延迟的 LONGCALL

对于超过 162.5 秒的延迟,LONGCALL 功能将等待时间分解为更小的间隔。

来源:Comanche055/WAITLIST.agc441-557

实现细节

时间表示

WAITLIST 系统使用独特的时间表示方式

  • TIME3 寄存器包含16384 - (T1 - T)厘秒,其中 T 是当前时间,T1 是第一个任务的时间
  • LST1 条目包含连续任务之间的负时间差

这种表示方式能够高效地检查任务是否就绪,并维护一个按时间排序的列表。

来源:Comanche055/WAITLIST.agc39-49

任务执行时序

任务的实际执行时间可能与请求的延迟略有不同,原因如下:

  1. 设置任务中断所需的时间
  2. 设置期间计数器递增
  3. 其他任务可能禁止中断
  4. T3RUPT 处理时间

来源:Comanche055/WAITLIST.agc104-121

错误处理

WAITLIST 包含对常见问题的错误检测

错误条件响应
零或负延迟时间使用代码 1204 中止
列表溢出 (>9 个任务)使用代码 1203 中止

来源:Comanche055/WAITLIST.agc151-152 Comanche055/WAITLIST.agc338-340

WAITLIST 初始化

WAITLIST 系统在 AGC “新启动” 过程中进行初始化

  • LST2 插槽使用 ENDTASK 地址进行初始化
  • LST1 条目使用 NEG1/2 进行初始化

来源:Comanche055/WAITLIST.agc95-96

优化技术

WAITLIST 代码采用了多种优化技术,以减少内存使用并提高性能

  1. TWIDDLE 例程 - 当任务位于同一存储体时,节省一个字
  2. 高效时间表示 - 使用负时间差来简化计算
  3. 列表压缩 - 仅维护活动任务条目

来源:Comanche055/WAITLIST.agc72-82 Comanche055/WAITLIST.agc39-55

在 AGC 系统中的使用

WAITLIST 是 AGC 执行系统的基本组成部分,并在整个软件中广泛用于定时操作,例如

  1. 调度导航更新
  2. 管理推进器点火
  3. 协调传感器读数
  4. 定时任务阶段转换
  5. 管理显示更新

来源:Comanche055/WAITLIST.agc31-36 Comanche055/DOWNLINK_LISTS.agc76-154