借用、完成与观察者生命周期¶
调用方拥有请求与缓冲区存储。已接受异步 I/O 借用存储;拒绝不借用。取消、截止时间或失败停止都不能撤销借用。这防止 IRQ/DMA 或执行者访问已复用内存。生命周期合同和公共操作声明定义精确上下文与结果行为。
事件 |
存储责任 |
|---|---|
拒绝准入 |
不保留请求/缓冲区引用或残留硬件效果 |
接受准入 |
保持请求和缓冲区有效,直到 acquire 观察 SETTLED |
Cancel 或截止时间 |
请求终止;继续必要进度并保留借用 |
DMA 完成 |
内存引擎阶段完成;wire/发布者引用可能仍存在 |
失败排空 / QUARANTINED |
保留存储与明确恢复责任 |
SETTLED 发布 |
必要引用排空后,提供者最终访问已结束 |
观察者/控制复用 |
还需 detach/drain 匹配 epoch,并 join 观察者 |
FIG-06 不把 REJECTED/ACCEPTED 当成请求状态枚举。Core 辅助函数不能观察外设物理排空;提供者必须先建立证明,才能发布结束。
三种不同的完成事实¶
FIG-07 分开内存完成、线上完成与最终发布。UART TC 不是 NDTR 为零;SPI 空闲和 CS 区间不是 DMA 中断。Release 发布 SETTLED 前,必须关闭并解除实际 IRQ/DMA/队列引用。调用方 acquire 观察后才能取得最终 result/count。超时结果只有经过这一生命周期才能最终成立,不能在截止时间到达时直接认定。
跨任务控制与连续流¶
远程控制使用稳定槽和单调递增 epoch。不得传递另一任务能够复用存储的裸指针。释放槽并准备下一请求前,必须解除控制/观察者引用并 join 观察者。代次计数可检测过期身份,但自身不会 join 任务。
连续接收与 ADC 使用调用者显式拥有的块借用。消费者必须保持块不可变,直到匹配释放成功。生产者发布旧硬件 bank 前,必须取得替换目标;无法替换时显式停止或施加背压,绝不能覆盖消费者。停止需等待正在填充、就绪及已借用的块,而不只是活动 DMA。流合同说明丢失计数与软件时间戳能够证明及不能证明的范围。
FIG-15 包括可见丢失和停止/drain 责任。容量与服务延迟预算是明确的产品输入;不能承诺任意 IRQ 延迟或消费者速度下无损。教程执行拒绝和隔离;OS 停机说明等待与 join 责任。