Online Judge 将使用我们的脚本、Makefile,并在我们的环境下进行评测。因此如果你在本地修改了编译选项 (如去掉了 -Wall -Werror
等)、硬编码了路径 (例如 "/home/jyy/log.txt"
) 等,提交后可能会发生编译/运行错误。
请大家自觉不要把自己的实验作业代码公开。如果你本着 “炫耀” 的态度公布,那你的代码很可能写得很烂不值得炫耀。请停止这种对学弟和学妹造成伤害的行为——如果你看到了互联网上的代码,请记得
蹭课通道已关闭。
本课程所有实验都托管在同一个仓库中。在命令行中执行 (关于本课程的实验环境,我们不做硬性要求,但我们推荐 Ubuntu 22.04),与 Online Judge 评测环境一致。在命令行中运行
$ git clone https://git.nju.edu.cn/jyy/os-workbench.git
获得框架代码,将会克隆 os-workbench
到当前目录。首次 clone 后你会得到一个近乎为空的 Git repo:
.
├── .git/
├── .shadow/
├── .gitignore
├── Makefile
└── oslabs.mk
每个实验的指南中都有获取该实验框架代码的说明。请
我们已经为选修课程的同学生成了唯一的秘钥,并以邮件形式发送到你的学号@smail.nju.edu.cn 邮箱,有遗漏的请联系 jyy。配置好 Makefile
中的 TOKEN
环境变量后,在相应的实验目录中 (而不是项目根目录) 中执行以下命令完成提交:
$ make submit
如果提交成功,命令行中会看到:
$ make submit
[SUCC ✓] Received OS2024-M1 姓名 学号
Sun Mar 10 2024 21:13:34 GMT+0800 (China Standard Time)
提交成功后,将你收到的秘钥粘贴到网页的左上角 (Logo 旁边有一个输入框),就可以在具体的实验页面上查看提交结果。注意我们只收取 os-workbench/.git
和目录中的 pdf 文件 (实验报告)。因此,如果你只是修改了代码而没有执行过 make 或手工的 git commit,这些改动将不会被反映到 Online Judge。
在得到 Git repo 以后,默认处于 main
分支。你可以本学期全部在 main
分支上工作,但也可以自由创建自己的分支。
特别注意:make
会自动将你的实验代码保存到 .shadow
中 (为什么?)。如果你对 Makefile 有修改,请保留 Git 追踪部分,Git 记录将会作为我们筛选、检查提交的参考。如果你因为意外丢失了 Git 记录,只要你遵守学术诚信,就不必担心,Git 记录不参与评分。评分以 .shadow
中的代码为准。
make
)、只允许编辑已有的一个 .c
文件。评测时,我们仅复制这一个 C 文件 (添加其他文件在 Online Judge 会导致编译错误)。测试用例分为两个等级 (easy 和 hard),easy 通常是一些 “冒烟测试” (smoke test),即使用最典型简单的方式运行程序,检查程序是否 crash 以及输出合理的结果。Hard 则是更接近实际应用场景的测试用例。虽然你不能看到程序的日志输出 (否则测试用例很容易泄露),但我们会对每个测试用例提供一定的解释,以帮助大家诊断问题。
与此同时,我们也会保留一定数量的测试用例用于评分使用,最终的评分将结合自动评测、保留测试用例和人工评价给出。评分规则:
在没有
我们希望这个机制鼓励大家独立完成实验。
每个实验都设有 Soft deadline。Soft deadline 之前提交:成绩 + 5% (如按时提交空项目将得到 15% 诚信分)
所有实验在 Hard deadline (通常是期末考试后的一小段时间) 截止。
Mini/OS Lab 都在 Online Judge 评测,评测机配置:Intel N100 (3.4 GHz, 16GB 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 gcc-multilib qemu-system strace gdb sudo python3 libsdl2-dev libreadline-dev
RUN apt-get upgrade -y
Mini Labs 直接在容器中执行 (non-root user);OS Labs 在容器中的 QEMU 虚拟机 (tcg 模式) 运行;容器总内存限制 2GB,超过内存限会导致进程被杀死。超过一定时限未执行完的容器也将被杀死。容器中的编译器版本:
如果你遇到了编译错误等,可以在上述环境复现。你可以在 Windows 应用商店中安装 Ubuntu 以得到这样的环境。
Online Judge 的最大特点就是
系统课程的 labs 和 OJ 题有一点不同:大部分问题没有 “绝对正确” 的标准输出。因此我们并不是简单地运行程序、比对结果,而是有一定系统化地测试你的程序:
malloc()
随机返回 NULL
;因为评测机性能有限,到来的提交均为串行执行。虽然此版本 Online Judge 评分的速度得到史诗级增强 (数倍于前一个版本),但在截止日期前评测任务较多,请耐心等待。如果过长时间未收到评测结果,应该是服务器宕机,请在群里戳 jyy。