基本信息

内容简介
目录
译者序
前言
关于作者
第1章 引言和概述1
1.1 操作系统1
1.2 本书的研究方法2
1.3 分层设计2
1.4 Xinu操作系统4
1.5 操作系统的界定4
1.6 从外部看操作系统5
1.7 其他章节概要6
1.8 观点6
1.9 总结7
练习7
第2章 并发执行与操作系统服务8
2.1 引言8
2.2 多活动的编程模型8
2.3 操作系统服务9
2.4 并发处理的概念和术语9
前言
具有讽刺意味的是,现有的操作系统教材或课程很少对底层的模式和原理进行解释,而这些模式和原理正是操作系统构造的基础。在学生看来,操作系统似乎是一个暗箱,而现有的教材则加深了这种误解,因为这些教材所解释的不过是操作系统的特性,其关注的也只是操作系统各种功能的使用。更为重要的是,学生在学习操作系统时采取的是从操作系统外面来查看的方式,从而常常导致这样一种感觉:操作系统由一组接口函数组成,这些接口下的功能由一大堆晦涩神秘的代码连接在一起,而这些神秘的代码本身还包含着许多与机器硬件直接相关的、无规律可循的奇技巧术。
令人惊奇的是,学生一旦从大学毕业,就马上觉得与操作系统有关的研究工作已经结束,自己不再需要理解或学习操作系统了,因为由商业公司和开源社区所构造的现有操作系统足以应付各种需要—没有什么比这种想法离真理更远了。与之相反,尽管为个人计算机设计传统操作系统的公司数量比以前更少了,但社会和行业对操作系统专门技术的需求却在增长,许多公司雇佣学生来从事操作系统方面的工作。这些需求增长主要源于更便宜的微处理器,而这些便宜的微处理器被广泛嵌入在智能手机、视频游戏产品、无线传感器、线缆和机顶盒以及打印机等设备中。
在与嵌入式系统打交道时,有关原理和结构的知识非常关键,因为程序员可能需要在现有的操作系统内部构造某种新的机制,或者对现有操作系统进行修改以便可以在新的硬件平台上运行。此外,为嵌入式设备编写应用程序需要理解底层操作系统。如果不理解操作系统设计的各种细微之处,则不可能充分开发小型嵌入式处理器的功能。
本书的目的是揭开操作系统设计的神秘面纱,将方方面面的材料整合为一个系统化的整体。本书对操作系统的主要系统组件进行了详细阐述,并以一种层次架构的设计范例来组织这些组件,从而以一种有序、可理解的方式来展开内容。与其他尽可能多地提供不同方案的评述性书籍不同的是,本书引导读者使用实用的、直截了当的原语来构造一个传统的基于进程的操作系统,从裸机开始,一步一步地设计和实现一个小型但优雅的操作系统。这个名为Xinu的操作系统将成为系统设计的一个样板和模式。
虽然Xinu操作系统的规模较小,可以完全容纳在本书中,但是该系统包含了构成一个普通操作系统的全部组件:内存管理、进程管理、进程协调和同步、进程间通信、实时时钟管理、设备无关的I/O、设备驱动、网络协议和文件系统。本书将这些组件组织成一个多层次架构,这使得它们之间的相互连接清晰可见、设计过程浅显易懂。尽管规模小,Xinu却拥有大型系统的大部分功能。此外,Xinu并不是一个“玩具”系统,它在很多商业产品中得到了应用。使用该系统的厂商包括Mitsubishi、Lexmark、HP、IBM、Woodward(woodward.com)、Barnard Software和Mantissa公司。读者通过本书可以学到的重要一课是:不管是小型嵌入式系统还是大型系统,好的系统设计都一样重要,而好的设计是通过选择好的抽象方法来实现的。
本书所覆盖的议题都以一种特定的次序排列,这种次序就是设计人员在构建操作系统时所遵守的工作次序。本书的每一章描述了设计架构里的一个组件,并提供示例软件来演示该层架构所提供的功能。使用这种方式具有如下优点:第一,每一章所解释的操作系统的功能子集均比上一章所讨论的功能子集更大,这种安排使得我们在考虑一层特定架构的设计和实现时不用关心后续层的实现。第二, 一个特定章节的细节描述在第一次阅读时可以跳过去,读者只需要理解该层所提供的服务即可,而不是这些服务是如何实现的。第三,如果按次序阅读本书,读者可以先理解某个功能,然后再应用该功能。第四,有智力挑战的议题(如对并发的支持)出现在书的较前面,高层次的操作系统服务则在后面展示。在本书中,读者将看到大多数核心功能仅仅用几行代码就可以完成,这样我们就可以将大体量的代码(网络和文件系统)放到书的较后面,在读者已经做好充分的思想准备后再进行讲解。
如前所述,与许多其他关于操作系统的书籍不同,本书并不试图对每个系统组件的每种实现方案进行评估,也不对现有的商业系统进行综述,而是对一组使用广泛的操作系统原语的实现细节进行阐述。例如,在讨论进程协调的一章,我们解释的是信号量(使用最广泛的进程协调原语),而将其他原语(如监视器)的讨论放至练习中。我们的目的是展示如何在传统硬件上实现原语,消除其神秘感。学生一旦理解了一组特定原语的魔力,其他原语的实现也就容易掌握了。
本书展示的Xinu代码可以运行在多种硬件平台上。我们将关注两种使用不同的流行处理器架构的低成本实验板,分别是基于Intel(x86)处理器的Galileo实验板和基于ARM处理器的BeagleBone Black实验板。这个范例展示了程序员如何使用常规工具(编辑器、编译器和链接器)来创建Xinu镜像,然后把这个镜像加载到一个目标板上,并启动Xinu操作系统。
本书适用于高年级本科生或者研究生,也适用于那些想了解操作系统的计算机从业人员。虽然本书所提供的议题的难度都在可理解的范围内,但要在一个学期内学完本书依然需要较快的速度,而一般本科生难以达到。极少本科生擅长读代码,理解运行时环境或机器架构的学生则更少。因此,在进程管理和进程同步相关章节中,必须仔细地对学生进行引导。选择要忽略的内容很大程度上取决于选修课程的学生的背景。如果时间有限,笔者建议学习第1~7章(进程管理)、第9章(基本内存管理)、第12章(中断处理)、第13章(时钟管理)、第14章(设备无关的I/O)和第19章(文件系统)。如果学生已经学习了包含内存管理和链表操作的数据结构课程,那么可以跳过第4章和第9章。对于学生来说,了解大多数操作系统都涉及网络通信是很重要的。然而,如果他们将要学习一门独立的网络相关课程,那么可以跳过第17章的网络协议内容。本书包含一个远程磁盘系统(第18章)和一个远程文件系统(第20章),其中一个可以跳过。远程磁盘系统章节可能更有针对性,因为它介绍了磁盘块缓存的内容,而磁盘块缓存是许多操作系统的核心。
对于研究生课程,课堂时间可以用来讨论动机、原理、折中、不同原语集和不同的实现方案比较。在本课程学习结束后,学生应当对进程模型、中断和进程之间的关系有一个深刻的理解,同时也将具备理解、创建和修改系统组件的能力。学生应当在大脑中建立起整个系统的完整概念模型,并且知道所有组件之间是如何交互协作的。不管是本科生课程还是研究生课程,都应该包括的两个议题是:1)在启动过程中,当一个串行程序转化为一个进程时所发生的重要改变;2)当输入行里的字符序列作为一个字符串变量传递给命令进程时,在操作系统外壳(shell)所发生的转化。
在所有情况下,如果学生能够对系统进行动手实验,则学习的效果将大幅提高。我们选择了低成本的实验板(低于50美元的价格就可以获取到),这意味着每个学生都可以买得起实验板和将其连接到笔记本电脑或其他计算机所需要的电缆。在理想状态下,学生可以在课程的最初几天或几个星期内开始使用这个系统,然后再试图理解系统的内部结构。本书第1章提供了几个例子和一些能够引起学生兴趣的实验(令人吃惊的是,很多学生学习过操作系统课程,却没有写过一个并发程序或使用过操作系统功能)。许多练习都对系统代码提出了改进、测试和替代实现方案。更大的项目同样也是可能的。结合不同硬件来使用的示例包括:分页系统、跨计算机同步执行的机制以及虚拟网络的设计。其他学生将Xinu移植到各种处理器或为各种I/O设备构建设备驱动程序。当然,编程语言的背景也是需要的—从事代码工作需要具有C语言编程能力和对数据结构有基本了解,包括链表、堆栈和队列。
在普度大学,我们有一个实验室,该实验室有一个自动化系统可提供对实验板的访问。一个学生使用传统的Linux系统上的跨平台工具创建了一个Xinu镜像。然后,该学生使用实验室的网络分配一个实验板、把镜像加载到实验板、将控制台线从板上连接到学生屏幕上的一个窗口并启动镜像来运行一个应用程序。有关详情请联系作者或浏览网页:
www.xinu.cs.purdue.edu
本书的成书要归功于笔者过去在商业操作系统上所获得的各种经验,这些经验有好也有坏。虽然Xinu操作系统与现有的操作系统在内部机制上并不相同,但其基本思想并不新颖。另外,虽然Xinu系统里的许多思想和名称都来自UNIX系统,但读者应当注意,这两个系统的许多函数所使用的参数和内部结构有巨大的差异。因此,为一个系统所写的应用程序在未经修改的情况下不能在另一个平台上运行,因为Xinu不是UNIX。
衷心感谢为Xinu项目贡献了思想、辛劳和激情的所有人。在过去的岁月里,普度大学的许多研究生都从事过Xinu系统的工作,他们为Xinu进行过移植,写过设备驱动。本书的Xinu版本是原始版本的一个完全重写,并且普度大学的许多学生都对本书做出了贡献。当我们更新代码时,我们努力保持原始设计的优雅。Rajas Karandikar和Jim Lembke开发了驱动程序和在Galileo平台上使用的多步骤下载系统。在笔者所教授的操作系统班级里,包括Andres Bravo、Gregory Essertel、Michael Phay、Sang Rhee和Checed Rodgers在内的学生,发现了书中的问题并对代码做出了贡献。另外,特别感谢笔者的妻子兼合作伙伴Christine,她的仔细编辑和建议让本书改善良多。
Douglas Comer
媒体评论
·内容全面但叙述简明扼要的操作系统教科书,涵盖操作系统基础理论的方方面面。
·采用代码实践方式来学习操作系统理论知识,大大降低学习难度并有效缩短学习时间。
本书第1版备受赞誉的地方在于,避开了其他操作系统书籍使用的传统黑盒方式,向读者展示了操作系统的工作原理,并且解释了如何从零开始构建一个操作系统。
本书第2版依然遵循系统设计的逻辑模式,揭开了操作系统设计的神秘面纱,将相关素材系统地整合在一起。它提出了一种分层设计模式,以有序、易懂的方式组织操作系统的主要组件。
本书使用实用、简单的原语,引导读者构建传统的基于进程的操作系统。它提供了一套常用的原语的实现细节。一旦读者理解了在传统硬件上的原语实现,就可以轻松地开发出其他版本。
本书从一台裸机开始,循序渐进地解释Xinu操作系统的设计和实现。Xinu代码可以运行在很多硬件平台上。第2版针对RISC和CISC处理器重写了Xinu操作系统相关部分代码。为了鼓励读者多动手实践,本书彻底更新了代码,提供了针对两个低成本实验开发板——基于ARM架构的BeagleBone Black和基于Intel架构的Galileo的示例。
本书特点
按设计者构建系统的顺序涵盖主题。
使用廉价的ARM和Intel嵌入式平台。
描述设计层次结构中的主要组件。
通过示例软件描述每个层次提供的功能。
为读者开发原语替代版本提供了基础。
包含很多实用的示例和便于动手实践的习题。