32年前读硕士时,“操作系统”是学得最糟糕的一门课。学完后,每个名词都知道,但对操作系统内部如何运转,完全是一头雾水。虽然如今计算机已大大普及,但相信大多数学生在学完该课后,仍然不清楚操作系统具体是如何运转的。
20年前我自己开始讲授操作系统课,选用的教材是尤晋元教授所编《UNIX操作系统教程》。越用越觉得这是一本好教材,它不是泛泛讲原理,而是深入解剖了一个操作系统。虽然所剖析的UNIX V6如同一只小麻雀,整个内核只有8千多行代码(而windows有3千万多行,Linux也有上千万行代码),但它五脏俱全。对这只小麻雀的五脏六腑,翅膀肌肉、神经、淋巴都彻底解剖清楚后,再去理解其它鸟的原理就容易多了。相反,如果仅向学生介绍世上各种各样鸟类的翅膀、尾翼和器官,那么,学生很容易重蹈我们的覆辙:知道某种器官在鸟类中有多少种类型,但就是不知道中枢神经系统、心血管系统、内分泌系统与翅膀、尾翼之间是如何联动、如何协调的。
按说,有了这样一本讲授具体操作系统的教材,学生学起来应该容易了,但实际情况并非如此。由于UNIX V6只能运行在早就已消失的古老机器上。学生无法在该机器上做UNIX V6内核的实验,更无法通过修改UNIX V6内核来加深理解。那么,能否改用其它操作系统作为实例来深入讲解呢?Windows很普及,但因其开放程度不够;Linux倒是完全开放的,但规模也太大,不合适作为本科阶段教学对象。
大约9年前,我萌生了将UNIX V6移植到PC机上的想法。于是开始从我校的推免生中挑选基础扎实、对操作系统理解较好、并对之有浓厚兴趣的学生来做这一工作。前后有五届(共6名)非常优秀的学生参与到这项工作中来。大约花了二年半时间,完成了移植工作。为了能让学生更容易理解代码,又用面向对象的思想重新进行了设计,并用C++加以实现。因为尽可能地遵循UNIX V6的思想和算法,因此,我们将新系统命名为UNIX V6++。为方便学生自行修改UNIX V6++,又专门为它开发了一个集成环境,学生可以用它来修改、编译、调试V6++内核。如今,绝大部分工作都已完成,并已在课程中鼓励学生去试用,以听取修改意见。
前后参与这项工程的有六名极其优秀的硕士生,他们现在分别在微软总部、谷歌、摩根斯坦利、美国国家仪器、法国等公司工作。我在为这些优秀学生自豪的同时,也向他们表示深深地感谢,感谢他们以聪明才智和巨大付出帮我圆了这个梦,同时为操作系统教学作出了出色的贡献。