HZNU OS Lab

实验四 · 进程调度

在 xv6-riscv 内核中补全上下文切换,实现 RR 和 Stride 两种调度算法

实验概览

本实验基于 xv6-riscv。你会沿着一条很短的路径理解进程调度:

  1. 一个进程被切走时,CPU 寄存器要保存到哪里?
  2. 调度器如何从多个 RUNNABLE 进程中选出下一个?
  3. 如果不同进程应该获得不同 CPU 份额,算法该怎么表达这种比例?
章节主题主要文件验证命令
ch1上下文切换与 RRkernel/arch/riscv/swtch.Skernel/sched/rr.cuser/schedtest.cmake qemu SCHED=RR CPUS=1
ch2Stride 步长调度kernel/proc.hkernel/sched/stride.cuser/stridetest.cuser/schedtrace.cmake qemu SCHED=STRIDE CPUS=1
ch3调度问答reports/lab4.md

推荐完成顺序

顺序先做什么用什么看结果
1补全 swtch.S、RR、yield()sched_countschedtest
2补全 ticketsstridepass 和 stride 选择逻辑stridetest
3实现 getpinfo(),把内核调度状态暴露给用户态stridetest
4观察多个进程的调度时间序列schedtrace
5完成调度问答reports/lab4.md

三个用户程序怎么分工?

schedtest 是 ch1 的练习入口,重点是补全用户态 pipe -> fork -> read -> wait 结构。stridetest 是 ch2 的正确性检查,重点是 tickets、getpinfo1:2:4 趋势。schedtrace 是已经写好的观察工具,只负责打印时间序列,不作为判题程序。

提交

全部完成后,在仓库根目录执行:

make submit

会生成 submit.tar.gz,包含需要提交的文件。

环境要求

需要什么?

  • RISC-V 交叉编译器:riscv64-unknown-elf-gcc 或等价工具链
  • QEMU:qemu-system-riscv64,版本至少为 7.2
  • makeperlgcc
系统安装命令
Ubuntu / Debiansudo apt install gcc-riscv64-unknown-elf qemu-system-misc
Fedorasudo dnf install gcc-riscv64-linux-gnu qemu-system-riscv
Archsudo pacman -S riscv64-elf-gcc qemu-system-riscv
macOSbrew install riscv64-elf-gcc qemu

尝试一下最先进的工具吧!(这一步是可选,并不是实验内容的一部分!)

试试在 Claude Code 中使用 DeepSeek API,十块钱的额度就能用很久!

以下配置适用于 Linux 系统,Windows 中需要先装 Git for Windows(安装时可配置的选择很多,全默认就好)。

获取 API Key

打开 platform.deepseek.com/usage,注册账号后在页面中:

  • 查看使用额度计费明细
  • 使用前需先充值
  • 在左侧 API Keys 页面点击创建 API Key,复制得到的 sk- 开头的字符串。

安装与配置

# 安装
# 先设置国内镜像避免遇到网络问题(推荐全局设置,后面所有 npm 都快)
npm config set registry https://registry.npmmirror.com/
npm install -g @anthropic-ai/claude-code

# 配置(直接执行 / 持久化配置需写入 ~/.bashrc)
export ANTHROPIC_BASE_URL=https://api.deepseek.com/anthropic
export ANTHROPIC_AUTH_TOKEN=sk-你的-key                  # ← 替换成你的真实 Key
export ANTHROPIC_MODEL=deepseek-v4-pro[1m]              # ← [1m] 开启 1M 上下文
export ANTHROPIC_DEFAULT_OPUS_MODEL=deepseek-v4-pro[1m]
export ANTHROPIC_DEFAULT_SONNET_MODEL=deepseek-v4-pro[1m]
export ANTHROPIC_DEFAULT_HAIKU_MODEL=deepseek-v4-pro[1m]
export CLAUDE_CODE_SUBAGENT_MODEL=deepseek-v4-pro[1m]
export CLAUDE_CODE_EFFORT_LEVEL=max
export CLAUDE_CODE_DISABLE_NONESSENTIAL_TRAFFIC=1
export CLAUDE_CODE_DISABLE_NONSTREAMING_FALLBACK=1
# 使用
cd xv6-riscv
claude                    # 启动
claude --resume           # 恢复上次会话
进入会话输入/resume        # 选择需要恢复的对话
claude --dangerously-skip-permissions   # 开启全自动不需要确认的模式

API 额度

以上配置走的是 DeepSeek API(非 Anthropic 官方),需要在 DeepSeek 平台先充值才能调用。