第二十四周工作总结
概述
本周在 executor 核心调度器上完成了 JoinHandle 异步任务句柄机制,并制定了 双内核架构(Starry OS + RTOS) 的完整项目计划路线图。rt-async 从「能调度」正式迈向「能通信、能协作」的阶段。
核心工作
1. JoinHandle 异步任务句柄
提交:b265918 — 2026-05-18
为 spawn 添加返回值 JoinHandle<T>,使 spawn 出去的任务可以被 await,获取其返回值。
核心设计:
TaskStorage<F>新增JoinState<F::Output>字段(resultslot +wakerslot),利用#[repr(C)]布局通过偏移量访问JoinHandle<T>实现Future<Output = T>:poll 时检查 result slot,若已有值则Poll::Ready,否则注册 waker 返回Pending- 任务完成时将 output 写入 result slot,并 wake 已注册的 JoinHandle waker
Spawner::spawn返回值从()改为JoinHandle<S::Output>
并发安全:基于优先级抢占模型的单写者假设——高优先级任务在 spawn 期间已完成(result 直接就绪),同/低优先级无法抢占 poll,因此 result 和 waker 无并发竞争。
测试覆盖:
| 测试 | 内容 |
|---|---|
单元:join_handle_ready_immediately | 高优先级任务 spawn 后立即完成,JoinHandle 直接 Ready |
单元:join_handle_pending_then_ready | 低优先级任务先 Pending,执行完毕后唤醒 JoinHandle |
单元:join_handle_value_correctness | 验证返回值的正确传递 |
集成:join_handle | QEMU 上的抢占场景验证(中优先级 await 低/高优先级、混合抢占) |
2. 双内核架构项目计划
提交:8251c44 — 2026-05-18
基于 5 月 12 日研讨会成果,制定 Starry OS + RTOS 双内核架构的三阶段计划:
- 阶段一(5/12 – 6/15):RTOS 内核完善——同步原语(Mutex 优先级继承)、JoinHandle、信号量等
- 阶段二(6/1 – 6/30):双内核通信——无锁队列、共享内存协议、Notification / Message Queue / RPC,6/30 初赛交付
- 阶段三(7/1 – 8/12):星光二实体板移植、驱动适配(CLINT/UART/GPIO/PLIC)、实时性优化,8/12 决赛交付
3. AGENTS.md 操作指引
提交:58cbcd0 — 2026-05-20
添加 Agent.md,为 AI 编程助手提供项目结构、构建命令、测试方法等操作指引,提升协作效率。
模块变更
modules/executor/src/task/
├── join_handle.rs # 新增 — JoinHandle<T> 实现
├── storage.rs # 变更 — 新增 JoinState、result/waker 写入逻辑
└── mod.rs # 变更 — 导出 JoinHandle
modules/executor/src/
└── spawner.rs # 变更 — spawn 返回 JoinHandle
apps/test/src/bin/
└── join_handle.rs # 新增 — QEMU 集成测试
blogs/项目计划/
└── 项目计划-20260512.md # 新增 — 双内核架构路线图