#rcore #risc-v

no-std tg-rcore-tutorial-task-manage

Task and process management for rCore tutorial OS, including scheduling and relationships

13 releases

Uses new Rust 2024

new 0.4.8 Mar 11, 2026
0.4.7 Mar 11, 2026
0.4.4 Feb 20, 2026

#570 in Embedded development


Used in 5 crates

GPL-3.0 license

43KB
836 lines

tg-rcore-tutorial-task-manage

Crates.io Documentation License

任务管理模块,为 rCore 教学操作系统提供任务和进程管理功能,包括调度和关系管理。

设计目标

  • 提供章节内核可复用的任务管理抽象,避免将调度和关系逻辑散落在各章节。
  • 用 trait 统一“任务容器管理”和“调度队列策略”。
  • 用 feature 分层支持“仅进程”与“进程 + 线程”两种阶段。

总体架构

  • ID 层:ProcIdThreadIdCoroId
  • 抽象层:
    • Manage<T, I>:对象增删查改接口。
    • Schedule<I>:调度队列接口。
  • 关系层:
    • ProcRelproc
    • ProcThreadRelthread
  • 管理器实现:
    • PManager(进程)
    • PThreadManager(线程)

主要特征

  • 任务对象通过 ID 关联,降低结构体互相持有复杂度。
  • 调度策略通过 Schedule 可替换。
  • 关系管理支持 wait/waitpid/waittid 等语义需要。
  • feature:
    • proc:进程管理
    • thread:线程管理

功能实现要点

  • 关系容器维护“运行中”和“已结束”子任务列表,便于实现等待语义。
  • 管理器负责当前任务状态迁移与调度队列交互。
  • 尽量保持与章节内 PCB/TCB 结构解耦,便于教学增量演进。

对外接口

  • ID 类型:
    • ProcId
    • ThreadId
    • CoroId
  • trait:
    • Manage<T, I>
    • Schedule<I>
  • 结构体:
    • PManager, ProcRelproc
    • PThreadManager, ProcThreadRelthread

使用示例

use tg_task_manage::{Manage, Schedule, ProcId};

fn _touch_id(id: ProcId) -> ProcId {
    id
}
  • 章节内真实用法:
    • tg-rcore-tutorial-ch5/src/processor.rs 使用 PManager 管理进程调度。
    • tg-rcore-tutorial-ch8/src/processor.rs 使用 PThreadManager 管理线程调度。

与 tg-rcore-tutorial-ch1~tg-rcore-tutorial-ch8 的关系

  • 直接依赖章节:tg-rcore-tutorial-ch5tg-rcore-tutorial-ch8
  • 关键职责:提供进程/线程 ID、关系维护与调度抽象。
  • 关键引用文件:
    • tg-rcore-tutorial-ch5/Cargo.toml
    • tg-rcore-tutorial-ch5/src/processor.rs
    • tg-rcore-tutorial-ch8/src/processor.rs

License

Licensed under either of Apache License, Version 2.0 or MIT license at your option.

No runtime deps

Features