Skip to content

第二十四周工作总结

概述

本周在 executor 核心调度器上完成了 JoinHandle 异步任务句柄机制,并制定了 双内核架构(Starry OS + RTOS) 的完整项目计划路线图。rt-async 从「能调度」正式迈向「能通信、能协作」的阶段。

核心工作

1. JoinHandle 异步任务句柄

提交b265918 — 2026-05-18

spawn 添加返回值 JoinHandle<T>,使 spawn 出去的任务可以被 await,获取其返回值。

核心设计

  • TaskStorage<F> 新增 JoinState<F::Output> 字段(result slot + waker slot),利用 #[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_handleQEMU 上的抢占场景验证(中优先级 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  # 新增 — 双内核架构路线图