浙江大学操作系统课程仓库:文档¶
Estimated time to read: 3 minutes
本文档适用于 季江明、王海帅 老师授课的班级,助教为 朱宝林、张恒斌。
引言¶
欢迎来到《操作系统》课程实验。按照培养方案,你已经完成了《数字逻辑设计》《计算机组成》《计算机体系结构》等硬件课程的学习,了解了 RISC-V 指令集架构和计算机系统的基本组成。现在,我们将进入软件部分,动手实现一个运行在 RISC-V 架构下的简易操作系统内核。
OS 实验主要考察工程实践能力,核心要点是按照 RISC-V 指令集规范,以 Linux 为参考完成自己的操作系统内核。这需要你具备阅读大型项目的英文文档和源代码,理解相关内容并动手实现的能力。左侧导航栏中列出的规范、文档和源码将伴随你的整个实验过程,它们会解答你所有的困惑。
后续的实验文档会指引同学们去阅读相应原始资料,而不会进行翻译和复述,这是为了避免上游更新导致实验文档过时、笔者水平有限产生歧义和误导等情况。我们会在每个文档指引下放置一个折叠的要点,强烈建议同学们在自行阅读原始资料后再对照总结进行自测。如果你实在不愿意、没时间或看不懂原始资料,可以直接看要点。但遇到不明白的点或者产生问题时,还是要回去认真看原始资料。
你可以通过前人的笔记快速入门,例如:
但笔记存在上述的问题,而且它们就像 Cache,虽然快但总会 Miss,实验过程中一定要常看原始资料。
下面是实验文档的格式介绍:
考点
希望同学们能掌握的知识点,会在验收时提问。
动手做
需要你动手做的内容,要求完成并记录到实验报告中,也会在验收时提问。
实验¶
安排和分数占比¶
- 未发布的实验安排可能调整
- 将鼠标悬停在进度条上可查看具体起止日期
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 后可以运行下面的命令在本地渲染文档:
致谢¶
感谢以下各位老师和助教的辛勤付出!
申文博、周亚金、徐金焱、周侠、管章辉、张文龙、刘强、孙家栋、周天昱、庄阿得、王琨、沈韬立、王星宇、朱璟森、谢洵、潘子曰、朱若凡、季高强、郭若容、杜云潇、吴逸飞、李程浩、朱家迅、王行楷、陈淦豪、赵紫宸、王鹤翔、许昊瑞、杨沛山、朱宝林、张恒斌。