Yanyan's Wiki 操作系统 (2023)

计算机系统基础实验须知

特别注意:所有的提交都以 Git HEAD 为准——这意味着如果你本地的修改没有被 make 自动提交 (或是手动提交),将不会被 Online Judge 评测。请大家使用我们提供的 Makefile 编译而非手工编译,确保你的代码被正确提交。

1. 学术诚信 (Academic Integrity)

所有课程作业都需要独立完成

详情请参考 MIT 对学术诚信的解释。如果你对做某件事是否合理感到困惑,可以参考第一次课程的 slides 或询问老师。此外,请不要将你的代码以任何形式公开发布或给他人传阅,这么做可能导致代码相似被判定为抄袭。

2. 实验提交

在实验的目录中执行 make submit 将会自动完成提交。

设置正确的 TOKEN

我们为每个同学分配了唯一的 TOKEN (8 个字符),并已经发送至你的 smail.nju.edu.cn 邮箱,请查收。你需要确保这个字符串在提交时处于 TOKEN 环境变量中。如何设置环境变量请 STFW。

补选/重修/旁听的请联系 jyy (仅限南京大学本校学生)。

2.1 PA 提交方法

脚本会自动根据你的 git 分支提交到对应的实验上,例如 pa0 分支会自动提交到 PA0。提交成功后会返回提交的文件 ID:

[SUCC ✓] Received ... ics2021.tar.bz2 at 13:51:36

在课程主页右上角的方框内填入邮件中的 TOKEN,在相应的作业页面查看 Online Judge 的返回结果。

提交到系统的代码会进一步经过 Online Judge 的检查,包括:

  • Git 记录检查
  • 代码相似度检查
  • 编译、运行测试用例。特别注意:**Online Judge 编译运行的是 Git repo HEAD 中的代码。因此请确保你的代码最后的修改被编译且被追踪。未提交到 Git repo 中的代码将不会被评测。 **

2.2 Lab 提交方法

在 Lab 对应的目录中 make submit。如 Lab1 的工作目录为 multimod/,则在 multimod 目录中执行 make submit。需要设置 STUID (学号) 和 STUNAME (中文姓名) 环境变量。

2.2 Lab 提交方法

3. 评测与评分须知

3.1 截止时间

每个 PA/Lab 实验都设有两种 deadlines:

  • Soft deadline: 分别在每个实验的页面上公布。
  • Hard deadline: 所有实验在 Hard deadline (通常是期末考试后的一小段时间) 时截止,不接受过期提交。

所有提交时间以服务器时间为准。请大家注意:本课程的实验即便对于最优秀的同学来说也具有一定的挑战性。因此请不要把开始的时间拖到 deadline 临近。Soft deadline 的设置能帮助大家把控自己的进度。

为了鼓励时间管理较好的同学,在 Soft deadline 之前提交成绩 + 5%。例如,按时提交独立完成但不正确的项目得 15% 的诚信分。

为了鼓励大家在实验报告中给我们有益的反馈继续完成实验: (1) 可以在 soft deadline 之后继续提交并通过额外测试用例,则以得分高的计算。 (2) 可以在 Online Judge 通过后的基础上修改你的实验报告并重新提交,不影响 soft deadline 之前通过的加分。

本课程中 PA 和 Labs 分别计分,100% 封顶 (即 PA 部分的加分不能代入到 Lab 部分)。

3.2 实验评分标准

如被发现有违反学术诚信的行为 (抄袭他人代码等),将会被扣分。注意 Online Judge 会编译运行你的代码,并且我们将使用我们的脚本/Makefile、在我们的环境下进行评测。因此如果你在本地修改了编译选项 (如去掉了 -Wall -Werror 等)、硬编码了路径 (例如直接打开绝对路径文件 "/home/jyy/log.txt") 等,提交后可能会发生编译/运行错误。

3.2.1 PA: 几乎完全客观评分

  • Rejected, 编译错误或没有通过任何测试用例: 10% (诚信分)
  • Accepted, 部分 easy 测试通过 (此时不运行 hard 用例): 30%
  • Accepted, 全部 easy 测试通过: ≥ 50%,剩余部分由人工评价给出
  • Accepted, 通过全部 easy/hard 测试: ≥ 75%,剩余部分由人工评价给出
  • 没有通过全部 easy 测试用例的作业将没有人工评分的机会 (即意味着实验报告不得分。但我们会阅读你的反馈)。

3.2.2 Labs: 完全客观评分

  • Rejected, 编译错误或没有通过任何测试用例: 10% (诚信分)
  • Accepted, 部分 easy 测试通过 (此时不运行 hard 用例): 50%
  • Accepted, 全部 easy 测试通过 (hard 用例没有全部通过): 75%
  • Accepted, 通过全部 easy/hard 测试: 100%

3.2.3 Homework: 提交即得分

  • 不论正确与否。请大家独立完成作业。

4. 遇到困难?

这时候,两个反复提到的词再次出现:

  • RTFM: Read The Friendly Manual
  • STFW: Search The Friendly Web

其中的 “F” 让它们更具有传奇色彩。

## 在线评测 在线评测基于计算机系云平台。程序在容器中编译、运行,并由机器自动判定结果是否正确。在此基础上,最终实验的评分仍有一部分由助教决定。你的程序将在以下环境运行: * 虚拟机中的 Ubuntu 18.04 容器 ([Docker](https://www.docker.com/))。容器中仅有最小的必要系统工具。使用以下 Dockerfile 配置与在线评测一致的环境;我们开放了容器的 `SYS_PTRACE` 权限; FROM ubuntu:18.04 RUN bash /tmp/change-source.sh RUN apt-get update RUN apt-get install -y build-essential gcc-multilib qemu-system strace gdb sudo python3 RUN apt-get upgrade -y RUN useradd -ms /bin/bash oj USER oj WORKDIR /home/oj * Mini Labs 直接在容器中执行 (non-root user);OS Labs 在容器中的 QEMU 虚拟机 (tcg 模式) 运行; * 容器总内存限制 512 MiB,超过内存限会导致进程被杀死。超过一定时限未执行完的容器也将被杀死。
#### 被 Online Judge 支配的恐惧? Online Judge 的最大特点就是.red[严格]。有任何差错 (因为环境/配置等引发的编译错、细小的输出错误) 都将被 Online Judge 捕捉到。这有助于帮助大家摆脱 “糊弄” 的习惯,编写正确的程序。 ![](compile-error.jpg){.center width=140px} 系统课程的 labs 和 OJ 题有一点不同:大部分问题没有 “绝对正确” 的标准输出。因此我们并不是简单地运行程序检查结果,而是有一定系统化地测试你的程序: * 在多个环境下运行你的程序,如 i386 (32 位) 和 x86-64 (64位),因此不可移植的代码可能无法编译; * 在模拟出的环境中执行程序,例如在线程调度时插入一些随机的 delays,从而提高某些并发 bug 触发的概率; * 链接我们修改过的库函数,例如 (在某些 lab 中) 使 `malloc()` 随机返回 `NULL`; * 解析程序的 log,并观察其中是否有 bug 出现的迹象。例如.red[程序 crash 将被判定为不正确]、.red[缺少某个重要输出也将被判定为不正确]。
Creative Commons License    苏 ICP 备 2020049101 号