准备写一本教材,书名暂定《深入浅出操作系统原理》吧。准备在博客上把主要内容写出来,主要为了让自己持续看到进展,也算是对自己的一个激励和督促吧。
===================================
想写这样一本书的念头已经有很久了,但是迟迟没有动笔,原因一是人比较懒,不愿意给自己增加压力;二是觉得自己的学识还达不到自己的期望,对于写出的书是否有足够的价值心存疑虑。一晃几年过去,虽然自己的学识也没涨多少,但是在教学过程中对国内操作系统教材的一些问题体会更深,同时对于自己写书的定位也更加明确。虽然在具体的技术问题的理解深度上可能比不上一线技术专家和资深学者,但是我相信对于操作系统整体运行机制的理解和把握上还有一定优势;一线的技术专家和学者要持续关注技术前沿,恐怕很难有时间去整理一些“常识性”的知识来写一本“科普”性质的教材,所以我相信按照自己的思路认真写出的书,对读者而言一定比那些“旁征博引”的教材和专著具有更大的价值。
操作系统教材都是针对原理进行分析和讲解,现有的教材我认为基本可以归入三个大类:(1)以构造一个操作系统为主线,通过完整实现一个小规模的操作系统串连起来所有重要的概念和算法,这种教学用操作系统中最著名的当属Andrew S. Tanenbaum开发的minix。此类教材的优点是有利于完整掌握操作系统的构造方法并从整理理解操作系统的工作机制;缺点一是在教学过程中对学生要求高,二是教学操作系统与实际商用操作系统之间还是有很大的区别。(2)以剖析一个实际操作系统为主线,通过内核源代码导读来讲解关键算法及概念。此类教材大多是针对开源的Linux操作系统进行比较深入的解读,优点是能深入了解一种现代操作系统的内部机制,进而理解操作系统的重要概念;缺点同样是对学生的要求很高,要求学生有较好的软硬件基础知识并需要花费大量时间。(3)不针对具体操作系统,围绕重要概念综合介绍各种操作系统中出现的不同算法。这是最常见的教材类型,较为全面地介绍操作系统的概念和基本原理。由于不需要深入具体操作系统的内部细节,对学生要求较低,适于入门级的学习;问题是学生难以建立操作系统的整体概念,特别是如果教材把来自不同系统的概念和算法简单罗列在一起而不加解释,实际上会阻碍学生理解操作系统的工作机制。
本书也属于上述第三种类型,但是读者将会发现本书与其它同类教材会有很大不同,这种不同既会体现在内容的取舍上,也会体现在讲述的方式上。本书的内容选择和组织方式源自明确的目标定位,那就是帮助学生从宏观上理解现代操作系统内部怎样工作。目前国内高校大多对本科阶段操作系统课程开设目标有些模糊,经常可以看到操作系统教材、教学实验系统等宣称其目标是使学生掌握“设计和实现”操作系统的基本能力,换言之,操作系统课程的目标是让学生能够操作系统产品相关岗位上胜任研发工作,问题是国内就业市场上操作系统圈子有多大?又能有多少毕业生最终进入这个领域?这么多年的全国高校计算机专业教学下来,又有几个本科生掌握了这些能力呢?不切实际的高目标导致在教学和实验环节设置上进退失据,有多少高校的操作系统实践环节仍然要求学生分组读内核源代码,或者基于某种实际或教学操作系统进行所谓的“内核”修改?教学中提供的理论知识根本不足以支持对实际操作系统内部的探索,必须要花费大量的课外时间去学习掌握相关的硬件知识和软件工具使用方法,在学生投入到操作系统课程学习上的精力持续减少、硬件知识基础日趋薄弱的情况下,这种教学模式的实施效果可想而知。我不认为操作系统课程应该把“内核设计实现”作为教学目标,这与大多数高校的实际情况完全脱节,因为大多数毕业生从事的将是应用软件开发,所以应该让他们尽可能理解操作系统的工作机制从而更好的开发应用程序。我的观点是,培养操作系统设计研发人才这种“高大上”的目标应该留给有这种人才输送渠道的个别重点高校的个别专业,这些高校可以开设操作系统的后续选修课,让少部分有兴趣、有能力的学生在学习操作系统基础原理之后再进行源代码分析或操作系统设计实现,这一阶段可以选用上述前两类教材,并指定大量有难度的课程实验项目让学生钻研;本科阶段操作系统课程的教学目标就不应该包括设计实现操作系统,而仅限于理解操作系统。
这个目标定位可能引来很多专业教师的争论:大学不是职业培训学校,不能完全按照市场导向设置课程。这句话本身是不错,但是问题在于:按照现有的套路教给学生一堆脱离实际的概念和算法从哪个方面来说是能对学生有利?可能又会有人说了,基本概念和算法是普适的,学生可以通过自己努力建立与实际操作系统的对应。这话也没有问题,我自己对操作系统的了解就是通过这种模式,正因为如此,我才知道这需要付出多大的努力以及现有的操作系统教学缺少了多少至关重要的东西。可能还会有人说,一份努力一份收获,在操作系统学习中的投入终有回报,这句话更是无法反驳的正确,但是需要为学生衡量一下投入产出比,毕竟他们的精力是有限的。有很多操作系统的任课教师与现代应用软件的开发是脱节的,当他从课程的角度要求学生投入更多时,也许他并不了解学生需要面临的其他挑战。也许还有一些负责任的老师会担心降低了课程目标会耽误个别优秀学生,这更是不必要的考虑,真正出色的人才是自己学出来的,你能想象Linus Trovalds是在操作系统课程老师的指导下开始了Linux的开发吗?其实老师为这些学生做的只是为其打开一扇门,让他看到新世界的优美,剩下的事情只需要让他跟随自己的兴趣自由探索。毕竟“有些鸟儿是关不住的,它们的每一片羽毛都闪耀着自由的光辉。”