🌟 动机与目标
在 SMP 系统中,每个 CPU 需要独立处理定时器中断,用于时间片轮转和本地任务调度。
当前状态:
- 定时器初始化和处理假设单核
kernel/timer.rs 管理全局定时事件
目标:
- 每个 CPU 独立接收定时器中断
- Per-CPU 时间片管理
- 全局定时事件与本地定时器协调
💡 建议的解决方案
核心思路
- Per-CPU 定时器初始化: 每个 CPU 在启动时独立初始化定时器中断
- Per-CPU 时间片管理: 每个 CPU 独立管理本地任务的时间片计数
- 全局定时器协调: 全局定时事件由主核处理,或通过 IPI 分发
实现要点
- 在从核启动函数中调用定时器初始化
- 修改定时器中断处理为 Per-CPU 模式
- 实现 Per-CPU 时间片计数和重置
- 全局定时器事件在 CPU 0 处理或通过 IPI 通知
📋 实现任务
替代方案 (可选)
方案 B: 分布式定时器队列
- 每个 CPU 维护本地定时器事件队列
- 添加事件时选择负载最低的 CPU
- 更复杂但负载更均衡
额外的上下文
相关文件:
os/src/arch/riscv/timer.rs - 架构相关定时器
os/src/kernel/timer.rs - 定时器管理
os/src/kernel/time.rs - 时间相关
依赖于:
被依赖于:
参考:
🌟 动机与目标
在 SMP 系统中,每个 CPU 需要独立处理定时器中断,用于时间片轮转和本地任务调度。
当前状态:
kernel/timer.rs管理全局定时事件目标:
💡 建议的解决方案
核心思路
实现要点
📋 实现任务
reset_time_slice()接口set_need_resched()机制替代方案 (可选)
方案 B: 分布式定时器队列
额外的上下文
相关文件:
os/src/arch/riscv/timer.rs- 架构相关定时器os/src/kernel/timer.rs- 定时器管理os/src/kernel/time.rs- 时间相关依赖于:
被依赖于:
参考: