Lab Utilities

熟悉系统调用,实现一些小工具,简单,略过。

Lab Syscall

添加一个系统调用,简单,略过。

Lab pgtbl

最难的一部分。我做了大概有 24 小时左右。期间又去学习 riscv 手册,熟悉用 qemu monitor 和 gdb 调试 xv6 内核。踩了不少坑。

  1. arch 上 riscv 版本 gdb 的名字叫做riscv64-linux-gnu-gdb
  2. gdb 不能调试用户程序。在 si 执行 sret 进入用户空间时会无响应。
  3. gdb 中 info all-registers 可以看控制寄存器。qemu 中按 ctrl+x c 可以切换到 monitor,其中可以用 x 检查虚拟内存, xp 检查物理内存, info mem, info registers 等等,都非常有用。 ctrl+x c 再按一次切换回虚拟机。
  4. part2 部分不要求实现 deref 用户指针的功能。这里只是让学生给每个进程加一个内核页表的拷贝。part3 部分才需要把用户空间映射加到新加的页表中。