借用、完成与 observer 生命周期¶
调用方拥有请求与缓冲区存储。已接受异步 I/O 借用存储;拒绝不借用。取消、deadline 或失败 stop 都不能撤销借用。这防止 IRQ/DMA 或 executor 访问已复用内存。生命周期合同和公共操作声明定义精确上下文与结果行为。
事件 |
存储责任 |
|---|---|
拒绝准入 |
不保留 request/buffer 引用或残留硬件效果 |
接受准入 |
保持请求和缓冲区有效,直到 acquire 观察 SETTLED |
Cancel 或 deadline |
请求终止;继续必要进度并保留借用 |
DMA 完成 |
内存引擎阶段完成;wire/publisher 引用可能仍存在 |
失败排空 / QUARANTINED |
保留存储与明确恢复责任 |
SETTLED 发布 |
必要引用排空后,provider 最终访问已结束 |
Observer/control 复用 |
还需 detach/drain 匹配 epoch,并 join observer |
FIG-06 不把 REJECTED/ACCEPTED 当成请求状态枚举。Core helper 不能观察外设物理排空;provider 必须先建立证明,才能发布结束。
三种不同的完成事实¶
FIG-07 分开内存完成、线上完成与最终发布。UART TC 不是 NDTR 为零;SPI idle 和 CS interval 不是 DMA 中断。Release 发布 SETTLED 前,必须关闭并解除实际 IRQ/DMA/queue 引用。调用方 acquire 观察后才能取得最终 result/count。Timeout 结果只有经过这一生命周期才能最终成立,不能在 deadline 到达时直接认定。
跨任务控制与连续流¶
远程控制使用稳定 slot 和单调递增 epoch。不得传递另一任务能够复用存储的裸指针。释放 slot 并准备下一请求前,必须解除 control/observer 引用并 join observer。代次计数可检测过期身份,但自身不会 join 任务。
连续接收与 ADC 使用调用方显式拥有的 block loan。消费者保持 block 不可变,直到匹配 release。Producer 发布旧硬件 bank 前需要 replacement target。没有 replacement 就可见地停止/背压,绝不能覆写消费者。Stop 等待 filling、ready 和 borrowed block,而不仅是 active DMA。流合同记录 loss counter 和软件 timestamp 能证明与不能证明的范围。
FIG-15 包括可见 loss 和 stop/drain 责任。容量与 service-latency 预算是明确的产品输入;不能承诺任意 IRQ 延迟或消费者速度下无损。教程执行拒绝和隔离;OS 停机说明等待与 join 责任。