2025 《操作系统》实验须知

🖥️编程

准备好一个可用的 UNIX 编程环境。这个环境将伴随你完成整个《操作系统》课程。可能的方案有:

  • 物理机直接安装的 Linux 或 macOS 系统 (你可以在 arm64 的 macOS 上运行绝大部分示例代码,并完成大部分实验)
  • Windows Subsystem for Linux (应用商店安装 Ubuntu),通过 ssh 登陆
  • VirtualBox 安装的 Linux 虚拟机,通过 ssh 登陆
  • 网络上购买的 Linux 虚拟主机,通过 ssh 登陆

在系统中安装必要的软件,包括编译器、git、编辑器、ssh server 等,确保你可以在这个环境中编辑、编译和调试 C/C++ 代码。

⚖️Online Judge

蹭课通道已关闭。有些填写问卷的同学没能遵循 “学号” 的约定,导致无法收到秘钥。

1. 获取实验框架代码

本课程所有实验都托管在同一个仓库中。在命令行中执行 (关于本课程的实验环境,我们不做硬性要求,但我们推荐 Ubuntu 22.04),与 Online Judge 评测环境一致。在命令行中运行

$ git clone https://git.nju.edu.cn/jyy/os2025.git

获得框架代码,将会克隆 os-workbench 到当前目录。首次 clone 后你会得到一个近乎为空的 Git repo:

.
├── .git/
├── .shadow/
├── testkit/
└── .gitignore

每个实验的指南中都有获取该实验框架代码的说明。请妥善保管这个目录:它保留了你完成作业的证据:以及,默认的 make 命令会自动将你的代码保存到 .shadow 中 (历史记录追踪和评测使用)。如果在多个地点完成作业,请将整个目录移动 (或通过版本控制) 保持 Git 记录的完整。如遇问题请联系老师或助教。

2. 提交实验作业

我们已经为选修课程的同学生成了唯一的秘钥,并以邮件形式发送到你的学号@smail.nju.edu.cn 邮箱,有遗漏的请联系 jyy。配置好 Makefile 中的 TOKEN 环境变量后,在相应的实验目录中 (而不是项目根目录) 中执行以下命令完成提交:

$ make submit

如果提交成功,命令行中会看到:

$ make submit
[SUCC ✓] Received OS2025-M1 姓名 学号
Sun Mar 3 2025 21:13:34 GMT+0800 (China Standard Time)

提交成功后,将你收到的秘钥粘贴到网页的左上角 (Logo 旁边有一个输入框),就可以在具体的实验页面上查看提交结果。注意我们只收取 os-workbench/.git 中的程序 (无需提交实验报告)。因此,如果你只是修改了代码而没有执行过 make 或手工的 git commit,这些改动将不会被反映到 Online Judge。

3. 使用 Git 管理源代码

在得到 Git repo 以后,默认处于 main 分支。你可以本学期全部在 main 分支上工作,但也可以自由创建自己的分支。

特别注意make 会自动将你的实验代码保存到 .shadow 中 (为什么?)。如果你对 Makefile 有修改,请保留 Git 追踪部分,Git 记录将会作为我们筛选、检查提交的参考。如果你因为意外丢失了 Git 记录,只要你遵守学术诚信,就不必担心,Git 记录不参与评分。评分以 .shadow 中的代码为准。

4. 学术诚信

  1. 日常学习:鼓励使用大语言模型
    • 解释概念、命令行工具、API 等 (请谨慎求证)
    • 获取方法指导 (如使用什么工具调试、如何调试、有何技巧)
  2. MiniLab:仅限单个 API 使用的生成
    • 禁止将自然语言需求翻译成代码
      • ✅: 帮助我调用 pipe(),并将读口和写口的文件描述符赋值给 read_fd 和 write_fd
      • ❌: 将一段实验描述输入到大语言模型

请大家自觉不要把自己的实验作业代码公开。如果你本着 “炫耀” 的态度公布,那你的代码很可能写得很烂不值得炫耀。请停止这种对学弟和学妹造成伤害的行为——如果你看到了互联网上的代码,请记得 Academic Integrity 且主动不要使用它们。

5. 实验与评分

5.1 评分规则

评分规则:在没有抄袭作弊 (如硬编码答案、故意骗过 Online Judge 而不实现实验要求等) 的前提下:

  • Rejected, 编译错误或没有通过任何测试用例: 10% (诚信分)
  • Accepted, 部分 easy 测试通过 (此时不运行 hard 用例): 60%
  • Accepted, 全部 easy 测试通过、部分 hard 测试通过: 80%
  • Accepted, 通过全部 easy/hard 测试: 100%
⚠️按时提交奖励

每个实验都设有 Soft deadline。Soft deadline 之前提交:成绩 + 5% (如按时提交空项目将得到 15% 诚信分)

  • 实验部分成绩不超过实验总分的 100%。
  • 如果发现问题希望修复 (一旦进行过尝试),之后的提交将不享受加分;但之前已经获得带按时提交加分的分数不会被消除 (以分数高的计算)。

所有实验在 Hard deadline (通常是期末考试后的一小段时间) 截止。

5.2. Online Judge 环境

Mini/OS Lab 都在 Online Judge 评测,评测机配置:Intel i5-12400 (4.4 GHz, 32GB RAM)。程序在容器中编译、运行,并由机器自动判定结果是否正确。你的程序将在以下环境运行:

Ubuntu 22.04 容器 (Docker, x86-64)。容器中仅有最小的必要系统工具。使用以下 Dockerfile 配置与在线评测一致的环境;我们开放了容器的 SYS_PTRACE 权限;

FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive
RUN apt-get update
RUN apt-get install -y build-essential strace gdb sudo python3
RUN apt-get upgrade -y

Mini Labs 直接在容器中执行 (non-root user);容器总内存限制 4GB,超过内存限会导致进程被杀死。超过一定时限未执行完的容器也将被杀死 (每个测试点时限不同,但实验的设计一般而言不需要特殊的性能优化)。容器中的编译器版本:

  • gcc 11.4.0
  • bin utils 2.38
  • GNU make 4.3

如果你遇到了编译错误等,可以在上述环境复现。你可以在 Windows 应用商店中安装 Ubuntu 以得到这样的环境。

Online Judge 的最大特点就是严格。有任何差错 (因为环境/配置等引发的编译错、细小的输出错误) 都将被 Online Judge 捕捉到。这有助于帮助大家摆脱 “糊弄” 的习惯,编写正确的程序。