Skip to content

浙江大学操作系统课程仓库:文档

Estimated time to read: 3 minutes

本文档适用于 季江明、王海帅 老师授课的班级,助教为 朱宝林张恒斌

引言

欢迎来到《操作系统》课程实验。按照培养方案,你已经完成了《数字逻辑设计》《计算机组成》《计算机体系结构》等硬件课程的学习,了解了 RISC-V 指令集架构和计算机系统的基本组成。现在,我们将进入软件部分,动手实现一个运行在 RISC-V 架构下的简易操作系统内核。

OS 实验主要考察工程实践能力,核心要点是按照 RISC-V 指令集规范,以 Linux 为参考完成自己的操作系统内核。这需要你具备阅读大型项目的英文文档和源代码,理解相关内容并动手实现的能力。左侧导航栏中列出的规范、文档和源码将伴随你的整个实验过程,它们会解答你所有的困惑。

后续的实验文档会指引同学们去阅读相应原始资料,而不会进行翻译和复述,这是为了避免上游更新导致实验文档过时、笔者水平有限产生歧义和误导等情况。我们会在每个文档指引下放置一个折叠的要点,强烈建议同学们在自行阅读原始资料后再对照总结进行自测。如果你实在不愿意、没时间或看不懂原始资料,可以直接看要点。但遇到不明白的点或者产生问题时,还是要回去认真看原始资料。

你可以通过前人的笔记快速入门,例如:

但笔记存在上述的问题,而且它们就像 Cache,虽然快但总会 Miss,实验过程中一定要常看原始资料

下面是实验文档的格式介绍:

考点

希望同学们能掌握的知识点,会在验收时提问。

动手做

需要你动手做的内容,要求完成并记录到实验报告中,也会在验收时提问。

实验

安排和分数占比

  • 未发布的实验安排可能调整
  • 将鼠标悬停在进度条上可查看具体起止日期

浙江大学 2025—2026 学年校历

2025
Q3
Q4
Sep
Oct
Nov
Dec
W36W37W38W39W40W41W42W43W44W45W46W47W48W49W50W51W52W1

Lab0 - Linux 内核调试(5%)

验收

Lab1 - 启动引导与时钟中断(15%)

代码、报告
验收

Lab2 - 抢占式内核线程调度(15%)

代码、报告
验收

Lab3 - 虚拟内存(15%)

代码、报告
验收

Lab4 - 用户模式与系统调用(20%)

代码、报告
验收

Lab5 - 缺页异常与进程创建(30%)

代码、报告
验收

BonusA - 磁盘与文件系统(10%)

代码、报告
验收

BonusB - 多核处理器与调度算法(10%)

代码、报告
验收

Lab3-5 允许两人组队完成,组队政策如下:

  • 主要目的是防止只有一个人干活的情况,要求组队的同学参与到每个实验中
  • 代码
    • 要求两位同学都有提交记录。根据 Git Commit 中的邮箱判定,请将提交邮箱设置为自己的学号邮箱。
    • 若无提交记录则视为未完成该实验。
  • 验收
    • 要求两位同学同时到场。需要说明分工情况,讲清楚各自负责的部分。
    • 若无法讲清楚代码在干什么则视为未完成该实验。
  • 报告:要求两位同学各自撰写。需要说明分工情况,讲清楚自己负责的部分,由队友负责的部分可以简单描述。

BonusA 和 Bonus B 任选其一,两个都做也只能拿最高的一个分数

要求和评分标准

部分 占比 基本要求 满分
代码 25% 提交:ZJU Git
通过流水线评测和查重
编译无 Error 和 Warning
报告 50% 提交:学在浙大
格式:提交 PDF 文件
内容:是人写的且人能读懂
语言:中文
格式:推荐使用标记语言编写
例如 LaTeX、Typst、MarkDown
内容:展示出分析实验任务、思考实现方法的过程
验收 25% 能讲清楚代码在干什么 (经过提示)能正确回答助教的问题
  • 报告:
    • 应当且仅应当包含的内容:
      • 各 Task(实验任务)的实现思路与过程
      • 「动手做」部分的实验过程和问题解答
      • 你的实现亮点(如有)
      • 心得与吐槽(如有)
    • 不需要的内容:实验目标(实验文档已描述清楚)、实验环境(已统一为容器环境)、实验结果(已使用自动化测试)
    • 建议:尽可能精简,比如不要整片贴代码,展示关键语句即可
    • 推荐作业:如果你认为自己的实现有独到之处,请在报告中说明,或许会被选为推荐作业
  • 请假: 如果你因疾病、竞赛、不可抗力因素等原因无法按时完成实验的各个环节,请向任课教师请假并获得批准。然后向助教展示请假证明,助教会帮你延后截止日期,不影响分数
  • 补交:
    • 分数:在截止日期后,每迟一天扣 10%,扣完为止。代码、报告、验收分别计算扣除比例。
    • 代码:在截止日期后,对应分支的 Push 权限关闭。请在完成实验后及时推送到远程仓库的对应分支。补交代码请推送到补交分支,以补交分支最后一次提交为准。
    • 报告:在截止日期后,联系助教开通学在浙大的补交通道。

鼓励同学们使用 AI 辅助编程,良好的使用方式有:

  • AI 辅助,我主导编写:我自己写大部分代码,只在遇到 bug 或不懂的地方才请 AI 帮忙。
  • 用 AI 学习编程概念:我主要用 AI 来学习语法、概念、算法原理,而不是直接写项目。
  • 和 AI 协同调试:我让 AI 帮我分析报错信息,提供解决思路,自己来修改代码。
  • 代码优化和重构:我会让 AI 帮我检查已有代码的性能、可读性,并提出优化建议。
  • 生成文档或注释:我让 AI 帮我为代码写注释、生成文档、补充使用说明。

与考试的联系

考试重在原理而不会考察技术细节。下面这些 Lab 的整体流程希望你通过实验牢牢掌握,其他内容用过就忘也没关系:

  • Lab3 Sv39 虚拟内存系统
  • Lab4 用户态与系统调用
  • Lab5 缺页异常与 Fork

Example

24 秋冬《操作系统》考试的最后一道大题是:手工完成 Sv39 虚拟内存到物理内存的翻译流程。如果你认真实现了 Lab3,那么这道题非常简单。

寻求帮助

如果在课程实验过程中遇到了困难,请按以下顺序寻求帮助:

  • 身边的同学
  • AI
  • 助教

寻求帮助时的一些建议:

  • 提供日志/输出:建议不要使用截图,而是粘贴文本,这样可以方便他人复制其中的内容。如果需要提供的日志/输出内容比较多,建议将其保存为文件发送,比如通过 Shell 的 >log.txt 2>&1 将输出重定向保存到文件中。
  • 推送代码并附带链接:如果是代码相关的问题,建议将代码推送到远程仓库,并附带链接,这样他人可以方便地查看你的完整代码

反馈与贡献

如果你发现课程文档、代码有错误、缺陷、值得进一步完善的地方等,请向助教反馈。如果你有改进的想法,欢迎你在 ZJUGit 上向课程仓库提交 Merge Request,注意不要提交自己的私有代码。

导航

本教学班资源:

GitHub ZJU Git
在线文档 ZJU-OS/doc os/doc
文档仓库 ZJU-OS/doc os/doc
代码仓库 ZJU-OS/code os/code
助教工具 ZJU-OS/tool os/tool

本课程其他教学班:

本校课程:

其他:

历史

操作系统课程实验的历史情况如下:

学期 情况
23 秋冬 JuniorSNy/os24fall-stu-full
24 秋冬 部分教学班统一使用 ZJU-SEC/os24fall-stu
25 秋冬 因为各教学班变更方向不同,各自 fork 了

25 年秋冬学期,本教学班向 《编译原理》课程实验 看齐,相比之前的版本、其他教学班主要有以下改动:

  • 拆分课程文档和代码仓库
  • 学生统一使用 ZJU Git 上分配的仓库进行实验
  • 使用容器化的实验环境
  • 使用自动化评测

本地构建

本仓库使用 uv 管理 Python 依赖,安装 uv 后可以运行下面的命令在本地渲染文档:

uv run mkdocs serve

致谢

感谢以下各位老师和助教的辛勤付出!

申文博周亚金、徐金焱、周侠、管章辉、张文龙、刘强、孙家栋、周天昱、庄阿得、王琨、沈韬立、王星宇、朱璟森、谢洵、潘子曰、朱若凡、季高强、郭若容、杜云潇、吴逸飞、李程浩、朱家迅、王行楷、陈淦豪、赵紫宸、王鹤翔、许昊瑞、杨沛山、朱宝林张恒斌