tg-kernel-context
Kernel context management for the rCore tutorial operating system.
设计目标
- 提供 RISC-V 上下文切换的统一抽象,简化章节内核对 trap/调度的实现。
- 支持用户态与内核态切换(
LocalContext)。 - 在需要跨地址空间切换时提供
foreign扩展能力。
总体架构
LocalContext:封装通用寄存器、sepc、sstatus等上下文状态。- 裸汇编执行路径:负责寄存器保存/恢复与
sret相关切换流程。 feature = "foreign":ForeignContextForeignPortal/PortalCacheMultislotPortal
主要特征
LocalContext::user(pc):创建用户态执行上下文。LocalContext::thread(pc, interrupt):创建内核线程上下文。execute():执行一次上下文切换(unsafe)。move_next():系统调用返回时推进sepc。foreign:支持跨地址空间切换相关工具。
功能实现要点
- 切换过程中直接操作关键 CSR(如
sscratch、sepc、sstatus、stvec)。 execute()为 unsafe:调用方必须保证上下文内容、栈、入口地址与页表状态有效。- 面向教学场景提供较清晰的寄存器访问接口(
a(i)、sp_mut()等)。
对外接口
- 结构体:
LocalContext
- 关键方法:
empty()user(pc)thread(pc, interrupt)a(i),a_mut(i)sp(),sp_mut()pc(),pc_mut()move_next()execute()
foreign模块(按 feature):ForeignContextForeignPortalPortalCacheMultislotPortal
使用示例
use LocalContext;
let mut ctx = user;
*ctx.sp_mut = user_stack_top;
unsafe ;
- 章节内真实用法:
ch2/src/main.rs使用LocalContext::user与execute跑用户程序。ch4/src/process.rs在foreign场景下进行地址空间相关切换。
与 ch1~ch8 的关系
- 直接依赖章节:
ch2到ch8。 - 关键职责:承接 trap 返回、系统调用返回与任务切换的上下文管理。
- 关键引用文件:
ch2/src/main.rsch3/src/task.rsch4/src/process.rsch8/src/process.rs
License
Licensed under either of MIT license or Apache License, Version 2.0 at your option.