Skip to content

[FEAT] 多核定时器支持 #215

@ZIYAN137

Description

@ZIYAN137

🌟 动机与目标

在 SMP 系统中,每个 CPU 需要独立处理定时器中断,用于时间片轮转和本地任务调度。

当前状态:

  • 定时器初始化和处理假设单核
  • kernel/timer.rs 管理全局定时事件

目标:

  • 每个 CPU 独立接收定时器中断
  • Per-CPU 时间片管理
  • 全局定时事件与本地定时器协调

💡 建议的解决方案

核心思路

  1. Per-CPU 定时器初始化: 每个 CPU 在启动时独立初始化定时器中断
  2. Per-CPU 时间片管理: 每个 CPU 独立管理本地任务的时间片计数
  3. 全局定时器协调: 全局定时事件由主核处理,或通过 IPI 分发

实现要点

  • 在从核启动函数中调用定时器初始化
  • 修改定时器中断处理为 Per-CPU 模式
  • 实现 Per-CPU 时间片计数和重置
  • 全局定时器事件在 CPU 0 处理或通过 IPI 通知

📋 实现任务

  • 创建 Per-CPU 定时器状态结构
  • 修改定时器中断处理为 Per-CPU
  • 实现 Per-CPU 时间片管理
  • 在从核启动时初始化定时器
  • 全局定时器事件在 CPU 0 处理
  • 实现 reset_time_slice() 接口
  • 实现 set_need_resched() 机制
  • 测试多核调度公平性

替代方案 (可选)

方案 B: 分布式定时器队列

  • 每个 CPU 维护本地定时器事件队列
  • 添加事件时选择负载最低的 CPU
  • 更复杂但负载更均衡

额外的上下文

相关文件:

  • os/src/arch/riscv/timer.rs - 架构相关定时器
  • os/src/kernel/timer.rs - 定时器管理
  • os/src/kernel/time.rs - 时间相关

依赖于:

被依赖于:

参考:

Metadata

Metadata

Assignees

Labels

P-High优先级较高,应尽快处理。T-Feature一个新的功能请求或实现。
No fields configured for Feature.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions