计算机系统基础实验须知

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

1. 学术诚信 (Academic Integrity)

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

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

2. 实验提交

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

设置正确的 TOKEN

我们为每个同学分配了唯一的 TOKEN (8 个字符),将会在开学两周后发送至你的 smail.nju.edu.cn 邮箱,TOKEN 暂未发送。 你需要确保这个字符串在提交时处于 TOKEN 环境变量中。如何设置环境变量请 STFW。前期请自行开始实验所需环境安装(详情请参考PA0实验)。

2.1 PA 提交方法

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

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

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

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

2.2 PA的OJ查询

在相应的oj页面查看 Online Judge 的返回结果,页面地址为:http://why.ink:8080/oj/ICS2024/拼接实验项目与邮件给每人自己发的TOKEN。 例如:对PA1实验,TOKEN为AABB的同学可于http://why.ink:8080/oj/ICS2024/PA1/AABB页面查看该实验的实时提交OJ结果(注意大小写)。

3. 评测与评分须知

3.1 截止时间

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

  • Deadline: 为正常实验的提交ddl,分别在每个实验对应页面上公布,按照100%系数算分。
  • Hard Deadline: 所有实验在 Hard deadline (通常是期末考试后的一小段时间) 时截止,不接受过期提交,为了公平,最终延期的提交成绩会乘以系数0.8。

所有提交时间以服务器时间为准。请大家注意:本课程的实验即便对于最优秀的同学来说也具有一定的挑战性。因此请不要把开始的时间拖到 deadline 临近。建议按照Deadline要求提交每一次实验,把控进度,最终每次实验成绩择优记录。

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

3.2 实验评分标准

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

本学期每一次实验Deadline后,会不定期开展抄袭检测,检测结果将以匿名方式发布在课程主页或OJ查询界面,若存在质疑,请单独邮件联系王慧妍老师并面谈。

一次抄袭,仅本次实验不得分但允许Deadline后重新提交; 两次抄袭,本次不得分且最终实验总分降至系数0.6; 三次抄袭,最终实验总分为0。请务必重视!

3.2.1 PA: 几乎完全客观评分

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

3.2.2 PA+: 客观主观结合(该部分仍然在调整中)

  • Rejected, 编译错误: 10% (诚信分)
  • Partial Accepted, 编译成功,剩余部分由人工评价给出

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

4. 遇到困难?

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

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

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

## 在线评测 在线评测基于计算机系云平台。程序在容器中编译、运行,并由机器自动判定结果是否正确。在此基础上,最终实验的评分仍有一部分由助教决定。你的程序将在以下环境运行:
#### 被 Online Judge 支配的恐惧? Online Judge 的最大特点就是.red[严格]。有任何差错 (因为环境/配置等引发的编译错、细小的输出错误) 都将被 Online Judge 捕捉到。这有助于帮助大家摆脱 “糊弄” 的习惯,编写正确的程序。 ![](compile-error.jpg){.center width=140px} 系统课程的 labs 和 OJ 题有一点不同:大部分问题没有 “绝对正确” 的标准输出。因此我们并不是简单地运行程序检查结果,而是有一定系统化地测试你的程序: * 在多个环境下运行你的程序,如 i386 (32 位) 和 x86-64 (64位),因此不可移植的代码可能无法编译; * 在模拟出的环境中执行程序,例如在线程调度时插入一些随机的 delays,从而提高某些并发 bug 触发的概率; * 链接我们修改过的库函数,例如使 `malloc()` 随机返回 `NULL`; * 解析程序的 log,并观察其中是否有 bug 出现的迹象。例如.red[程序 crash 将被判定为不正确]、.red[缺少某个重要输出也将被判定为不正确]。