「杂谈」由 PA 实验引发的一些思考

最近刚刚刷完南京大学 ICS 的 PA 实验,很有感触。

这篇是做完 PA 那天的大半夜一点多写出来的,深夜发电,说的话图一乐,记录一下罢了。

实验中学到的东西和一些 debug 经历我放在了 note 里面:南京大学 ICS PA 实验纪实

关于实验

虽然才上大学一年半,专业课也没有很多,但也有几门课是带实验的。虽然说我现在的理解可能还不到位,但还是来记录一下我现在的想法。

这一年半可以算得上实验的大概有大一春夏的系统一,暑假小学期的超算,大二秋冬的系统二、AI 基础。其他的大作业像程算的并行排序,汇编的四次作业,网安导的课程论文,数据结构的 project 或许也可以算上。

PA 的实验手册是我做过的这些所有实验都完全无法比拟的。PA 中既有对于知识点的讲解,落实在实验框架的具体体现,又清晰地在每一阶段叙述了当前的目的是什么、为了达到这个目的需要做些什么、做的时候需要注意什么等等。而且所有实验贯通在一起,让人完成之后巨有成就感。

PA 实验满足了我对计算机类实验的所有设想:

  • 能学到理论知识
  • 有明确的目标和指导
  • 能亲手完成大部分代码来印证理论知识,达成目标
  • 能在实验过程中有更多额外收获
  • 实验负担不重,做起来舒适
  • 能让人很有成就感

说起来系统实验我觉得也达到了这些目标,那我认为系统相比于 PA 差在哪里了呢,还是放在下一部分来说罢。

而其他的实验则都差了那么一点,超算负担重而且指导不多,做起来有些烦躁闹心。超算的并行排序几乎没有什么指导,全靠自己查资料,最后也是勉强完成。汇编大作业也是负担太重,而且基本就是颅内编译 C 代码,要说学到什么吧……好像那么几条指令不用做这些作业也能理解。

除此之外之前看了点 rCore,反正最开始是给了我一种无处下手的感觉,然后就先放在一边了。

哦?你说 AI 基础的实验我怎么没提?呵,纯纯的一坨答辩,要啥啥没有就是了。

关于系统贯通

再来说一说系统贯通,这个名词其实就是信安课改成果系统一二三的全称,其目标大概就是将计算机系统软硬件的教学和实验从头到尾贯通起来,正是如此它取代了原有的计算机逻辑设计基础、计算机组成原理、计算机体系结构、操作系统四门课。宣传的课程目标也是从晶体管、逻辑门开始学起,到数字逻辑电路,到实现单周期 CPU、流水线 CPU、再到在自己实现的 CPU 上运行自己编写的操作系统。

就我目前上过的系统一二而言,确实可以看到各位老师的用心,也确实在按照这个目标努力地将各个部分串联起来。这也是我这一年半来体验最好,而且是每周最期待的课程。对同学、学弟甚至是外校的好朋友我也经常提起、夸奖这系列课程。

不过这个假期我一拍脑袋决定玩一下别人也常对我提起的系统实验,那就是这个 PA。随着 PA 逐步进行,我也越来越感受到了整个系统确确实实在这套实验中被贯通了起来。
从最底层开始,有 NEMU 模拟器来模拟 CPU 的工作;再向上有一层 AbstractMachine 将硬件提供的机制抽象起来,分为了五组 API 来供上层使用;它的上层是 NanOS(PA 中是 lite 版本),一个利用这些 API 实现的操作系统;在此基础上有一套 Navy-apps 框架用来编译出可以方便运行在系统上的程序。

而这些内容并不是完全由实验提供,而是各个部件都留出了大量关键的空白来由学生自己实现。而实验文档也逐层递进,一步一步引导学生来完成这个看似复杂无比的任务。

最终的效果便是,从最底层的 CPU 取指、译码、执行,到 I/O 设备通信、中断处理、上下文管理、虚拟内存管理,再到操作系统的进程维护与调度、虚拟内存分配、应用程序加载、系统调用实现,甚至再到上层应用的各类库例如 NDL SDL 的实现,全部都是由学生来理解自行完成的。

实验手册逐步推进,一点一点地看透庞大代码中的每一处细节,了解各层之间的协调运行,理解整个系统运转的原理。这才是我认为真正完美的系统贯通。

而说回来我校的系统实验,优点是它完美地伴随了理论课的内容,达到了在实验中理解理论、动手实现的目标。而缺点也伴随而来,就是同理论课一样,还是存在着明显的割裂感。讲数字电路时实验就是模拟电路,讲硬件系统时实验就是写 CPU,讲操作系统时就是编写系统放在 qemu 上运行。而系统二最后一个实验也就是所谓的软硬件综合实验也无非是将一堆 riscv 指令丢到 CPU 的 ROM 里去跑,甚至这一堆指令还是给定的简化后的系统,而并不是自己编译出来的。

所以说虽然相对而言,这些实验让我做的很有目的,知道自己在干什么,而且在实验的同时也能学到很多东西。但是如果把要求放的更严格一点,这些实验距离“系统贯通”的这一目标还是有一段距离的。

可能是没有稳定、可以持续一年半,而且有想法有实力的助教团队。也可能是系统课程才开办第二届,各类设施还不完善。也可能是同学畏难心理压迫实验难度下调不易贯通。总而言之系统这系列课的水平还可以提升的更高。而且如果将来我有幸可以投身于这门课的设计当中,我肯定也会努力将各个部分贯通起来,因为在我看来这真的是一件很酷的事情。

所以还是希望系统这门课可以越办越好吧!

总结

最后话再说回来,系统可是我整个大学到现在最喜欢最满意的一门课了。再反观其他的课程,被系统平替的四门课程就不必说了,本身就很割裂,老师也不连贯,助教也不连贯,甚至同一学期同一课程的不同教学班之间都差别很大,实验也是部分意义不大的面向得分的实验,甚至据学长说硬件实验可以说是 verilog 程序填空(系统的硬件实验的 CPU 是除了交互的外壳以外完全没有代码框架的)。

AI 基础实验更是重量级,前面的都有明确的目标,而 AI 基础连要我干什么都讲不清楚。比如有一个实验,原理部分白话一大堆,深奥的理论讲了一大堆,最后一看代码,所有东西都已经写好了,思来想去,又是和同学交流,最后猜出的结论是实验目标就是调一下几个参数。咱就是想问一下,这样的实验能学到什么吗,纯粹的浪费时间。

超算的实验还是不错的,毕竟是全由超算队同学来设计,整门课程就是实验为主体的小学期课程。确实学到了很多,我也比较满意,虽说体验上不如系统,但是和上面这些烂课放一起还是不公平的(x)要说缺点嘛,大概就是太难了,手册说了很多理论,到最后动手优化完全不知道怎么写,糊一糊勉强优化了就交上去,体验和成就感是没有那么强的。

看着自己学校这种烂专业课横行,反馈下来删又删不掉,改又改不动,真的是有一种说不上来的滋味。

或许我可能也像各位学长一样,开始对浙大甚至国内的计算机教育逐步失去信心。

或许系统这门课在浙大诞生就是一个奇迹。

我真的希望浙大可以有团队来精心打造,产出更多像 PA、系统贯通这样的优质课程。

而做不出更多这样的好课的原因到底差在哪呢,差在能力上吗?或许只是缺少这种大规模课改的动力和勇气罢了。

「杂谈」由 PA 实验引发的一些思考

https://blog.tonycrane.cc/p/dc8d460.html

作者

TonyCrane

发布于

2023-02-02

更新于

2023-02-02

许可协议