课程实验
‼️ 学术诚信
独立完成实验是对自己最好的训练。在这一过程中,你可以从网上搜索或者向 AI 询问 API 的使用方式和示例、以及对相关概念和技术的介绍,但要主动避免去网上「搜索」和「参考」已有的代码实现、或者让 AI 来直接生成代码。
‼️ 实验分数
实验分数是课程总评成绩构成的一部分,没有提交实验将导致缺少相应分数。 对于完成全部实验确有困难的同学,可以仅提交部分完成的代码。
本学期的课程实验包括:
- 编程实验 (基于 Linux): 利用操作系统提供的典型系统调用 (APIs) 来实现某些功能
- 系统实验 (基于 xv6): 实现操作系统内核的某些功能
💻 实验环境准备
完成实验需要准备一个可用的 Linux 系统 (我们推荐使用 Ubuntu 24.04,和 OJ 运行环境一致),并在其中安装包括编辑器、gcc 等在内的必要软件。可采用的方式包括:
- 物理机直接安装 Linux
- Windows Subsystem for Linux (WSL)
- 虚拟机安装 Linux (e.g., VirtualBox 等)
编程实验可以直接在上述 Linux 系统上完成。对于基于 xv6 的系统实验,请按照如下流程来设置。
实验环境安装和测试
我们的实验环境依赖 RISC-V 版本的 QEMU 7.2+, GDB 8.3+, GCC 和 Binutils,运行如下命令来安装必要工具:
Debian 或 Ubuntu
sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu
Arch Linux
sudo pacman -S riscv64-linux-gnu-binutils riscv64-linux-gnu-gcc riscv64-linux-gnu-gdb qemu-emulators-full
WSL (Windows Subsystem for Linux):注意仅支持在 WSL2 上进行实验,不支持 WSL1。
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu
虚拟机 (VMware 或 VirtualBox):如果使用虚拟机,建议安装 Ubuntu 24.04 LTS,并按照 Ubuntu 上的安装方法进行安装。
其他操作系统:目前不建议在其他操作系统上进行实验,但你也可尝试自行解决可能存在的依赖问题。
在安装完成后,检查 QEMU 版本 (需要 7.2.0 以上)。如果显示如下信息,则表示安装成功:
$ qemu-system-riscv64 --version
QEMU emulator version 7.2.0
同时检查 gcc 版本,需要至少以下一条命令显示相似信息:
$ riscv64-linux-gnu-gcc --version
riscv64-linux-gnu-gcc (Debian 10.3.0-8) 10.3.0
...
$ riscv64-unknown-elf-gcc --version
riscv64-unknown-elf-gcc (GCC) 10.1.0
...
$ riscv64-unknown-linux-gnu-gcc --version
riscv64-unknown-linux-gnu-gcc (GCC) 10.1.0
...
启动 xv6
运行如下命令下载 xv6-riscv 代码:
git clone https://git.nju.edu.cn/course-lab/xv6-riscv.git
cd xv6-riscv
启动 xv6:
git checkout riscv
make qemu
如果出现以下内容,则表示启动成功:
...
xv6 kernel is booting
hart 2 starting
hart 1 starting
init: starting sh
$
使用快捷键 Ctrl+A,然后按 X 退出 xv6。
使用 gdb
在调试复杂的代码时,断点调试是非常有用的。我们强烈建议在开始编写代码之前,先学会使用 gdb 进行调试。 关于 gdb 的使用方法,可以参考 GDB 官方文档。
对于 xv6,可以通过以下方式启动 gdb:
make qemu-gdb
此时,QEMU 会暂停并等待 gdb 连接。在另一个终端中,使用 gdb-multiarch (或者 riscv64-linux-gnu-gdb 或 riscv64-unknown-elf-gdb) 连接到 QEMU。
⌨️ 实验提交
TBD
🕙 实验截止时间
本学期所有 Lab 提交的截止时间为 2027 年 1 月 10 日 23:59 (Hard Deadline),在此之前均可提交或更新实验代码/报告,所有提交中的最高分将作为实验得分。
本门课程的 Lab 具有一定难度和工作量,请大家务必合理安排不同课程作业和 Lab 的完成时间。