- 可以把 的 master 分支作为起点,逐步完成所有 8 个实验;也可以按照 tutorial 一步一步完善内核的功能,每完成若干个章节,去做实验作为练习。两种做实验的方式都是允许的,只要能够通过评测脚本的测试即可。
-
,使用 markdown 格式编写实验报告并命名为(如
lab1.md
),在项目根目录下创建report
文件夹并将该实验报告放在其中。不接受其他命名/格式的实验报告。 - 不要在报告里大段粘贴代码,讲清楚实验过程和思路即可。
- 有需要的话可以新建分支或者保留 commit ,独立检查每个功能。
- 每道题的报告均会进行字数统计,字数超过
平均字数 * 3
或低于平均字数 / 3
的同学可能被酌情扣分。(求求你们别卷了) - 提交到
git.tsinghua
。
目前为止(2020-03-07):
- lab1/4 不进行任何测试
- lab2/3/7 进行内核态测试
- lab5/6/8 进行用户态测试
我们将测试流程打包成了一个脚本方便同学们自我检测。
,可以自动完成代码的替换工作(内核态、用户态的替换方式的细节参见下面)并进行评测,最后将运行结果放在 文件中。如果这个过程没有出现错误(如编译错误、或环境配置有问题等),评测脚本还会直接打开 labX.result
文件查看运行结果。不必担心替换会污染代码,脚本会自动完成备份和恢复工作。
在运行内核态测试 (lab2/3/7) 之前,请确保 os/src/init.rs
存在且完成的是内核初始化的工作。 评测脚本会直接将 os/src/init.rs
替换为对应的内核态测试程序 test/XX_test.rs
并 make run
。
在运行用户态测试 (lab5/6/8) 之前,请确保 os/src/process/mod.rs
存在,且在 process::init()
函数中会通过 会将用户终端加载到内存并放入进程池。 如果用户态测试程序为 test/usr/XX_test.rs
,评测脚本会将上述提到的 rust/user_shell
替换为 rust/XX_test
,即不经过用户终端直接 make run
运行用户程序。目前脚本的功能并不完善,无法在所有进程结束后自动退出,因此我们等待数秒钟通过 C-a + x
退出 Qemu 让脚本继续运行。
注意到,
execute
直到第九章的第三小节才完全实现。然而做 lab5/6 只要求做完前八章。为了支持用户态测试,一种可行的方法是:
- 完成第九章第一小节;
- 然后跳过第九章第二小节,直接把第九章第三小节的
execute
函数移植过来;- 最后将代码略作修改,调用
execute
函数完成 ,使得 lab5/6 的用户态测试可以正常运行。