1. 可以把 的 master 分支作为起点,逐步完成所有 8 个实验;也可以按照 tutorial 一步一步完善内核的功能,每完成若干个章节,去做实验作为练习。两种做实验的方式都是允许的,只要能够通过评测脚本的测试即可。
  1. ,使用 markdown 格式编写实验报告并命名为(如 lab1.md),在项目根目录下创建 report 文件夹并将该实验报告放在其中。不接受其他命名/格式的实验报告。

  2. 不要在报告里大段粘贴代码,讲清楚实验过程和思路即可。
  3. 有需要的话可以新建分支或者保留 commit ,独立检查每个功能。
  4. 每道题的报告均会进行字数统计,字数超过 平均字数 * 3 或低于 平均字数 / 3 的同学可能被酌情扣分。(求求你们别卷了)
  5. 提交到 git.tsinghua

目前为止(2020-03-07):

  • lab1/4 不进行任何测试
  • lab2/3/7 进行内核态测试
  • lab5/6/8 进行用户态测试

我们将测试流程打包成了一个脚本方便同学们自我检测。

练习题 - 图2

,可以自动完成代码的替换工作(内核态、用户态的替换方式的细节参见下面)并进行评测,最后将运行结果放在 文件中。如果这个过程没有出现错误(如编译错误、或环境配置有问题等),评测脚本还会直接打开 labX.result 文件查看运行结果。不必担心替换会污染代码,脚本会自动完成备份和恢复工作。

在运行内核态测试 (lab2/3/7) 之前,请确保 os/src/init.rs 存在且完成的是内核初始化的工作。 评测脚本会直接将 os/src/init.rs 替换为对应的内核态测试程序 test/XX_test.rsmake 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 只要求做完前八章。为了支持用户态测试,一种可行的方法是:

  1. 完成第九章第一小节;
  2. 然后跳过第九章第二小节,直接把第九章第三小节的 execute 函数移植过来;
  3. 最后将代码略作修改,调用 execute 函数完成 ,使得 lab5/6 的用户态测试可以正常运行。