Stanford CS140e vs ETH AOS

Stanford这门课不知道是本科生还是研究生的课,只从课程网站的信息来看,需要CS110 Principles of Computer Systems作为先修课,所以应该是默认学生已经掌握了操作系统的基本知识。粗略看了一下CS110的syllabus,基本覆盖了国内本科操作系统课程的大部分内容,所以这门CS140e应该是针对想进一步学习操作系统知识和动手开发操作系统的学生准备的,适合高年级本科生和研究生。

这门课程的重点看起来在于实验,和我校已经开过数年的研究生课程Advanced Operating Systems比较相似,都是在真正的硬件上开发几个操作系统的核心功能,包括spawning,multicore等,但我猜不会涉及太多内核的硬件驱动部分(我们那门课里叫『CPU Driver』)的开发,而是给学生一个基本的内核源代码,让学生在它的基础上实现一些功能。因为开发内核涉及很多硬件细节,比如GPIO,开发板管脚映射等等,这些东西很繁琐,而且和操作系统核心思想的学习没有什么关系。

这门课有四个主要的Assignment,分别是:

  • Assignment 1: Shell and Bootloader
  • Assignment 2: SD Driver and FAT File System
  • Assignment 3: Spawn
  • Assignment 4: Multitasking and Multicore

这几个都是操作系统内核中比较上层的应用,甚至可以放到用户空间(User Space)来实现。想动手实现OS内核更底层部分(比如内存管理、虚拟内存映射和分页)的同学会略微失望,可能Stanford的考虑是这些经典的东西已经被做烂了,没什么意思,所以只挑现代的(Multicore,针对异构硬件的操作系统研究目前正热门)、不常见的(Spawn,Unix/Linux的进程模型基于Fork,各种操作系统书已经讲烂了,但非Unix系统如Windows都是Spawn)和容易出彩的(Shell,SD Driver and Filesystem,都可以自由发挥出很多有意思的功能)。

这学期刚上完ETH Zürich的AOS,印(tong)象(ku)很深,在此顺便进一步比较一下这两门课程。

实验安排上,Stanford CS 140e基本可以说是ETH AOS的子集,我不知道他们设计课程时有没有参考AOS,但可以说,这两门课借鉴的源头都是UNSW这门Advanced Operating Systems(我校教材的引言中有提到)。不知道CS 140e为什么选取了这么几个实验,感觉不太成体系,未来还是可以再加一些的。不过,从学分、时间和工作量的角度考虑,这几个实验足以让这门课成为一门『神课』了。我校的AOS每一周或两周就要完成一个类似的group assignment,最后一个月每人还要完成{Shell, Network, File System, Nameserver, Capabilities (Advanced)}中的一个individual project,工作量分分钟让人怀疑人生,我的队友直呼这是他在ETH四年以来上过的最难的课。

授课和考试安排上,可以看出Stanford这门课并不是一门100% Project的课程,上课和考试还是占了比较大的比重。我认为这种安排是比较科学的,lecture和exam可以起到理论指导的作用,只让学生一味地去动手,其实是容易跑偏的,而且可能会浪费时间在重复发明idea上面。ETH的AOS并没有lecture,但有一本自己编的阅读材料,详细介绍了操作系统的各个核心组成部分的前世今生和相关研究论文,并且完全避开传统的以Linux为中心的介绍方式,让学生从更高的角度去理解各种不同操作系统的设计思想和利弊权衡。然而,在巨大的编程工作量面前,很多阅读内容都只能一扫而过了,非常可惜。

软硬件技术上,Stanford这门课使用了现在流行的Raspberry Pi开发板和Rust编程语言,而ETH使用的还是某已倒闭公司的PandaBoard和C语言,可以说Stanford走在了前面。不过实际上,用什么板子区别并不大,我更感兴趣的是Rust和C语言的比较。我丝毫不懂Rust,但看起来,它比C语言更适合教学。不过用C语言也有好处,直接暴露的底层细节和编程复杂度,可以极大地提高学生的系统编程能力。另外因为ETH的AOS是基于他们自己开发的一个真正的开源操作系统(而不是玩具)Barrelfish,以Barrelfish的内核代码作为基础,去添加内存管理、开新进程、启动第二内核、基于RPC的进程间通信、终端、文件系统、网络协议等功能,而Barrelfish的内核使用C语言和汇编写的,所以我们自然而然也用了C语言。不知道Rust能不能和C联合编程,但如果Stanford的课程组是用Rust写了一个基本的driver给学生用,那感觉也是挺酷的。

综上,推荐对现代操作系统的设计和实现有兴趣,或者希望锻炼系统编程能力的同学选修这门课,但不建议不喜欢密集的编程工作和大量的底层细节的同学选修,CS110涉及的操作系统知识对于研究AI、Theory和比较上层的System领域来说已经足够,不必自虐。

发表评论

电子邮件地址不会被公开。 必填项已用*标注