本仓库用于“一生一芯”线上调试的考核。
助教将会在你提交的代码仓库中随机注入3个错误:
- 软件、硬件和环境(包括构建脚本和仿真环境等)各1个
- 但不会在仙剑、libc、spike等没有要求学生进行开发的代码中注入错误,也不会在Chisel代码中注入花哨的Scala语法糖
你需要在30分钟内排除这些错误,助教将从你调试的过程中观察你的能力是否达到了“一生一芯”的预期。
为了参加考核,你需要进行如下准备工作。
你需要对即将提交的代码进行自我检查,以确认提交的代码达到了“一生一芯”的学习要求。 具体地,你需要确认:
- NEMU中讲义要求你开发的代码是你独立编写的,没有参考任何已有代码
- AM中讲义要求你开发的代码是你独立编写的,没有参考任何已有代码
- Nanos-lite中讲义要求你开发的代码是你独立编写的,没有参考任何已有代码
- Navy-apps中讲义要求你开发的代码是你独立编写的,没有参考任何已有代码
- NPC中的代码是你独立编写的,没有参考任何已有代码
- 在NEMU中可成功运行仙剑奇侠传
- 在NPC中可成功运行仙剑奇侠传
- NPC中已经实现了总线、Cache、乘除法器和流水线,并且它们均在仿真过程中正确工作
- 一个不包含Cache的单周期处理器也可以成功运行仙剑奇侠传,但如果你明知道处理器未达到“一生一芯”的学习要求却仍然申请考核,将可能被视为“骗取流片机会”而列入失信名单
如果你提交的代码中包含不属于独立编写的部分,请你自觉删除它们并重新独立完成。 这样做一方面是要求大家遵守学术诚信,另一方面也是帮助你为考核做好充分的准备。
我们提供了一个半自动化的bug注入工具供大家进行调试练习。
欢迎大家完善这个工具(正则表达式编程):工具可以注入的bug越多,大家就可以得到越真实的训练。
注意:上述工具注入的bug类型与在线调试考核的题目类型无直接联系
在上传你的仓库进行考核之前,请进行如下操作:
cd ysyx-workbench
git clone git@github.com:oscpu/ysyx-exam.git
rm -r ysyx-exam/.git
git add ysyx-exam
git commit -m "add exam file"
注意:请遵从指示执行考核脚本,不要在ysyx-workbench中随意执行该脚本, 否则可能会对项目造成非预期的修改。
- 请你将ysyx-workbench上传到一个公开的仓库,仓库增加doc文件夹上传nemu和npc运行通过的截图, 截图名:ysyx学号-nemu, ysyx学号-npc。
- nemu运行截图要求一半屏幕是libminiSDL部分代码,一半是运行过程;npc截图要求一半屏幕是difftest部分代码,另一半是运行过程。
首先请检查如下路径是否存在,考核脚本将会直接从如下路径拷贝相关文件到考核环境中:
$NAVY_HOME/apps/pal/repo/
$NAVY_HOME/apps/bird/repo/
$NAVY_HOME/libs/libc/
$NEMU_HOME/tools/spike-diff/repo/
$NEMU_HOME/../am-kernels/
通过以下操作进行考核环境的自测,避免在考核时遇到环境配置相关的问题而花费额外的时间:
mkdir ~/exam-test
cd ~/exam-test
git clone 上一步上传仓库的URL ysyx-exam
cd ysyx-exam/ysyx-exam
source exam-init.sh # 此操作将会在当前shell中临时更新NEMU_HOME, AM_HOME, NAVY_HOME三个环境变量
cd nanos-lite
make ARCH=riscv64-nemu update
make ARCH=riscv64-nemu run
make ARCH=riscv64-npc run
exit # 退出当前shell, 避免继续使用考核环境中的环境变量
请检查上述过程是否能编译并在NEMU和NPC中运行仙剑,若否,请自行排查问题。
请注意,使用绝对路径会导致你的项目无法在助教的环境中正确运行,
请先自行修改,否则助教不会开展后续考核流程。
此外,上述过程会使用exam_defconfig
的配置来编译NEMU,
你可以在自测时打开menuconfig查看并按需调整你的配置。
排查问题后,你需要更新上述仓库,然后重新进行自测。
自测成功后,可删除~/exam-test
目录。
学生完成上述流程后,填写考核申请表,并等待助教安排考核时间
- 助教将通过
考核环境自测
小节中的操作,检查学生提交的代码是否符合要求- 若不符合要求,则在考核申请表中反馈,要求学生进行整改
- 若学生提交的代码、git log、学习记录三者不一致,助教有权不予安排考核;若三者严重不一致,助教有权向项目组建议将该学生加入失信名单,项目组将仔细评估
- 助教安排考核时间时,应注意同一名学生在多次申请考核时,前3次考核的间隔不少于1周,第4次及以上的间隔不少于2周
- 某学生在第t周参加完第1次考核,则他最早可在第t+1周参加第2次考核
- 某学生在第t+1周参加完第2次考核,则他最早可在第t+2周参加第3次考核
- 某学生在第t+2周参加完第3次考核,则他最早可在第t+4周参加第4次考核
- 某学生在第t+4周参加完第4次考核,则他最早可在第t+6周参加第5次考核
- 助教在代码仓库中注入3个错误,涵盖软件、硬件和环境(包括构建脚本和仿真环境等), 但不会在仙剑、libc、spike等学生没有进行直接开发的代码中注入错误, 也不会在Chisel代码中注入花哨的Scala语法糖
- 助教通过
git init
重新创建工程,从而去掉git diff
的记录
- 助教每周安排线上调试考核(每人30分钟),每两名助教监考一位学生(负责注入错误的助教必须参加)
- 安排后,助教通知学生参加考核的时间和腾讯会议号码
- 学生考核开始时,助教需要
- 要求学生共享屏幕(整个桌面)并打开摄像头
- 确认学生身份,必要时可要求学生出示相关证件
- 若上述两点未满足(如学生端无法打开摄像头),助教应取消该次考核
- 助教强调考核纪律,提醒考核时间等
- 助教将注入错误的工程push到ysyx-exam仓库(即本仓库)的新分支(分支名称可随机命名),并把分支名称告知学生
- 学生通过以下操作拉取考核代码:
mkdir ~/exam-test
cd ~/exam-test
git clone -b 分支名称 git@github.com:OSCPU/ysyx-exam.git
cd ysyx-exam/ysyx-exam
source exam-init.sh # 此操作将会在当前shell中临时更新NEMU_HOME, AM_HOME, NAVY_HOME三个环境变量
- 学生开始调试,助教录屏并开始计时
- 在考核过程中,学生严禁使用diff等工具通过对比注入错误前后的项目来观察代码的差异,一经发现将按作弊处理
- 助教观察学生调试的过程,两名助教分别对学生进行评价,评价内容包括学生对项目细节的理解是否深入,对工具的掌握是否熟悉,调试方法是否清晰科学
- 学生运行成功时,助教需要检查环境变量的值是否指向考核环境(即注入错误的项目);
若学生无意在环境变量指向原项目的情况下(如重新打开了终端但未运行
source exam-init.sh
)成功运行, 助教应提醒学生,此次成功运行将不作为考核通过的依据 - 在考核过程中,若学生提前退出腾讯会议(误操作或由网络问题等原因导致),助教应终止该次考核,考核结果视为无效,并重新安排一次新的考核;若学生连续两次考核均出现提前退出腾讯会议的情况,将视为学生参加完一次考核且结果为不通过
- 考核结束时,学生退出腾讯会议,助教停止录屏,删除相应分支
- 助教整理评价表,评价表中应包含日期、学生姓名、学校、年级、专业、学号、两名助教姓名和相应评价
- 助教对考核情况进行综合评价后,在3天内将考核结果告知学生
- 学生通过考核后,助教将该学生添加至后端小组的白名单,学生可开展SoC对接工作
- 若学生未通过考核,可再次申请考核,但前3次考核的间隔不少于1周,第4次及以上的间隔不少于2周
考核结果的最终解释权归“一生一芯”项目组所有。