本书是一本关于操作系统的概念、结构和机制的教材,其目的是尽可能清楚和全面地展现当代操作系统的本质和特点。本书是为高等院校师生和专业人员编写的。作为教材,本书对应于计算机科学、计算机工程和电子工程专业一个学期的操作系统课程。书中的专题包括由IEEE和ACM计算机委员会的计算课程联合工作组,为计算机科学专业的本科生推荐的计算机课程(Computer Curricula2001),同时也包括由上述联合工作组推荐的计算机科学2002联合学位课程指南(Guidelines for Associate-Degree Curricula in Computer Science 2002)中的专题。本书还是一本基础参考书,同时也适于自学。
操作系统精髓与设计原理(原书第6版) Operating Systems Internals and Design Principles Sixth Edition (美) William Stallings 著 陈向群 陈渝 等译 本书是计算机界巨擘William Stallings的经典著作之一,其第4版曾获得美国计算机科学与工程类大奖,得到了全球计算机教育界和工程技术人员的好评。书中不仅全面地讲述了操作系统的基本概念、原理和方法,而且还以当代最流行的操作系统为例,全面清楚地展现了当代操作系统的本质和特点。作者针对近几年操作系统领域的最新变化,对操作系统的设计原理进行深入的阐述,同时将其对操作系统整个领域全面而深入的理解呈现给读者。 本书特色 选择Windows Vista、UNIX和Linux三个操作系统作为示例,以帮助读者熟悉当代操作系统的设计原理和实现问题。 新增嵌入式操作系统一章,讨论了嵌入式操作系统的基本特点,并给出了两个实例系统:TinyOS和eCos。 在第5版的基础上扩展了计算机安全的相关内容,包括计算机安全威胁和计算机安全技术。 扩展和更新了并发的相关内容,并增加了有关游戏软件中多处理器调度设计问题的实例。 补充动画演示、模拟项目和编程项目,便于培养学生的动手实践能力。 改进了插图,增加大量新的 “现场测试”(field-tested)型家庭作业。 调整和扩充了章末的练习题,有助于读者深入理解操作系统的精髓。 作者简介 William Stallings 拥有美国麻省理工学院计算机科学博士学位,现任教于澳大利亚新南威尔士大学国防学院(堪培拉)信息技术与电子工程系。他是世界知名的计算机学者和畅销教材作者,已经撰写了17部著作,出版了40多本书籍,内容涉及计算机安全、计算机网络和计算机体系结构等方面,堪称计算机界的全才。他曾九次荣获美国“教材和学术专著作者协会”颁发的“年度最佳计算机科学教材”奖。
目标 本书是一本关于操作系统的概念、结构和机制的教材,其目的是尽可能清楚和全面地展现当代操作系统的本质和特点。 这是一项具有挑战性的任务。首先,需要为各种各样的计算机系统设计操作系统,包括单用户工作站和个人计算机、中等规模的共享系统、大型计算机和超级计算机以及诸如实时系统之类的专门机器。多样性不仅表现在机器的容量和速度上,而且表现在具体应用和系统支持的需求上。其次,计算机系统正以日新月异的速度发展变化,操作系统设计中的许多重要领域都是新近开始研究的,而关于这些领域以及其他新领域的研究工作仍然在继续着。 尽管存在着多样性和变化快等问题,一些基本概念仍然贯穿始终。当然,这些概念的应用依赖于当前的技术状况和特定的应用需求。本书的目的是对操作系统设计的基本原理提供全面的讨论,并且与当代流行的设计问题以及当前操作系统的发展方向联系起来。 示例系统 本书试图使读者熟悉当代操作系统的设计原理和实现问题,因此单纯讲述概念和理论是远远不够的。为了说明这些概念,同时将它们与真实世界中不得不做出的设计选择相联系,本书选择了三个操作系统作为示例: ● Windows Vista:用于个人计算机、工作站和服务器的多任务操作系统。它融合了很多操作系统发展的最新技术,此外,Windows是最早采用面向对象原理设计的重要的商业操作系统之一。本书涵盖了在Windows最新版本Vista中所采用的技术。 ● UNIX:最初是为小型计算机而设计的多用户操作系统,但后来广泛用于从微机到超级计算机的各种机器中。本书包含若干版本的UNIX。FreeBSD结合了很多反映当代水平的功能,是一款得到广泛应用的操作系统。Solaris是一款应用广泛的商业版UNIX系统。 ● Linux:一款目前非常普及且源码开放的UNIX版本。 选择这些系统是由于它们的相关性和代表性。关于这些示例系统的讨论贯穿全书,而不是集中在某一章或附录部分。因此,在讨论并发性的过程中,将描述每个示例系统的并发机制,并探究各个设计选择的动机。通过这种方法,可以利用真实的例子立即加深对某一特定章节中设计概念的理解。 读者对象 本书是为高等院校师生和专业人员编写的。作为教材,本书对应于计算机科学、计算机工程和电子工程专业本科一个学期的操作系统课程。书中的专题包括由IEEE和ACM计算机委员会的计算课程联合工作组为计算机科学专业的本科生推荐的计算机课程(Computer Curricula 2001),同时也包括由上述联合工作组推荐的计算机科学2002联合学位课程指南(Guidelines for Associate-Degree Curricula in Computer Science 2002)中推荐的专题。本书还是一本基础参考书,同时也适于自学。 本书结构 本书分为八个部分(参见第0章的综述):背景、进程、内存、调度、输入/输出与文件、嵌入式系统、安全、分布式系统。 本书具有许多适用于教学的特征,包括使用大量的动画和图表来阐明一些容易混淆的概念。每一章还包括一些关键术语列表、复习题、课外练习、进一步学习的建议和相关网站的链接。而且,还为指导教师提供了题库。 课程参考资料 以下的教辅资料可以通过访问受密码保护的Pearson网站的教师资源区域获得 (www.prenhall.com/ stallings): ● 参考答案:章末复习题和习题的解决方案。 ● 课件:所有章节的课件,可以用于课堂教学。 ● PDF文件:本书中全部图和表的副本。 ● 项目手册:下面列出的所有项目类型的推荐项目任务。 为教师和学生提供的Internet服务 本书的Web站点为教师和学生提供支持,该站点包括一些到其他相关站点和有用文档的链接。参见前面的“本书的Web站点”以获得更多的信息。网址是http://williamstalllings.com/ OS/OS6e.html。 在这个网站上,这一版新添加了一些课后问题和解答。通过求解问题并核对答案,学生可以加强对教材内容的理解。 我们还建立了邮件列表,使用本书的教师可以通过邮件列表来交换信息、建议和遇到的问题。一旦发现拼写或其他错误,本书的勘误表将可以在WilliamStallings.com上获得。最后,我还在WilliamStallings.com/StudentSupport.html上维护了计算机科学学生资源网。 操作系统项目和其他学生练习 对许多教师而言,操作系统课程的一个重要内容是,通过一个项目或一组项目使得学生能够获得亲身体验,以加深对课本中概念的理解。本书为课程所包含的项目部分提供了非并行程度的支持,它定义了两个编程项目。Prentice Hall的网站为教师提供了一些在线参考资源,其中不仅包括有关项目分配和结构的指南,还包括各种项目类型的用户手册,以及专门为本书编写的特定任务。教师可以在以下方面布置任务: ● 动画任务:下详。 ● 模拟项目:下详。 ● 编程项目:下详。 ● 研究项目:一系列研究项目可以指导学生研究某一个特定的专题,并且撰写报告。 ● 阅读/报告练习:用于阅读和撰写报告的多篇论文,推荐了一些书面用语。 ● 写作练习:关于一些容易理解的材料的一系列写作练习。 ● 讨论专题:这些专题可以在课堂、聊天室和消息展板上应用,以更深入地扩展对于特定领域的理解,培养学生的合作能力。另外,作为项目实践的开发框架,我们提供了两个软件包:开发操作系统的构件可以使用Nachos,学习并发机制可以使用BACI。 这些项目和课外练习使得教师既可以使用本书作为丰富教学内容的一部分,也可以根据教师和学生的特别需求进行裁剪。详见附录C。 动画和模拟 新版结合使用了动画和模拟。动画部分用专门的图标标识出来。对于理解现代操作系统的一些复杂机制而言,动画是一种强大的工具。为了说明操作系统设计中的关键功能和算法,本书使用了一些动画。在书中对应的位置,一个特殊的图标表示这里有在线动画供学生使用。使用动画有两种方式。在被动模式中,学生点击相关动画,然后观看相关概念或原理的动画。由于这些动画提供了用户可设置的初始条件,所以还可以按照主动模式使用动画。这样,动画也可以作为学生作业。教辅中包括了每个动画的相关作业。 IRC还提供了一些在7个模拟内容基础上的作业项目,这些模拟都与操作系统设计关键领域相关。学生可以使用这套模拟工具包,对操作系统设计特性进行分析。这些模拟工具用Java写成,既可以作为一个Java应用程序在本地运行,也可以通过浏览器在线运行。IRC中包括了学生使用的相关作业材料,让学生了解如何做以及结果会是怎样的。 编程项目 新版提供更多的对编程项目的支持。有两个主要的编程项目,一个用于构造shell,即命令行解释器,而另一个项目用于构造教材中介绍的进程分派器(process dispatcher),它们分别位于第3章和第9章的后面。IRC提供了为开发程序所需要的深入资料,以及一步一步的练习。 作为替代方案,指导教师可以安排强度更大的系列项目,这些系列项目涵盖了本书中的许多基本原理。为了进行这些项目,我们为学生提供了详细的指导材料。另外,还提供了一套课外练习,其中的问题与每个项目有关,供学生回答。 最后,在IRC提供的项目手册中,包括了一套涉及广泛专题的系列编程项目,它们可以在任何平台上使用任何语言来进行开发。 第6版中的新内容 自从第5版发行之后,这四年以来,操作系统领域始终在不断地变化。在新版中,作者试图抓住这些变化,同时保持对操作系统整个领域全面而深入的阐述。为了完善本书,作者将第5版交由一批从事相关教学和研究的教授们审阅。所以在新版许多地方的叙述更加清晰、紧凑,说明也得以改进。而且,增加了大量新的“现场测试”(field-tested)型的课外练习。 除了这些教育学以及用户友善性方面的细化之外,为了反映这个令人兴奋的领域中的进展,我们对教材的技术内容也进行了整体更新。最主要的变化如下: ● 动画:动画为理解现代操作系统中的复杂机制提供了一种强大的工具。第6版中有16个动画,覆盖了调度、并发控制、缓存一致性以及进程生命周期等内容。在书中的相应位置,我们对动画进行了突出标记,使得学生在学习本书的过程中可以在恰当的时候使用动画。 ● Windows Vista:Vista是微软公司为PC机、工作站和服务器提供的一种最新型的操作系统。第6版在介绍所有的关键技术领域时都提供了Vista 内部的有关细节,包括进程/线程管理、调度、内存管理、安全、文件系统以及I/O。 ● Vista/Linux比较:纵观全书,始终将Vista和Linux作为OS 内部各个方面的实例使用。第6版的新特色是,涉及Vista和Linux的每一章都有一个专门的部分,对这两个操作系统的技术处理方式进行比较。 ● 扩展的安全内容:本书的第七部分“安全”完全是重写的,并扩展为两章。包含了许多新的内容。另外,本书的重点几章里(第3、7和12章)都安排有涉及安全的论述。 ● 嵌入式操作系统:第6版包括了嵌入式操作系统的新章节。嵌入式系统远多于通用计算系统,并构成了对操作系统的独特挑战。这一章包括有关基本原理的讨论,以及两个示例系统:TinyOS和eCos。 ● 并发:为了叙述上的改善,对有关并发的内容进行了扩展和更新。 ● 多处理器调度:增加了有关游戏软件中多处理器调度设计问题的实际示例。 本书每一版在增加新的内容过程中,都要为保持合理的页码数量而奋斗。这个目标通过消除过时的材料和使叙述更紧凑来达到。 对于这一版,相对不太重要的章节和附录以PDF文件的形式转到了网上,从而不必增加篇幅和成本就能对本书的内容进行扩展。 致谢 新版本得益于很多花费了大量的时间和精力进行审阅的专家和教授,包括Archana Chidanandan (Roe-Hulman)、Scott Stoller(SUNY-Stony Brook)、Ziya Arnavut(SUNy-Fredonia)、Sanjiv Bhatia(University of Missouri-St. Louis)、Jayson Rock(University of Wisconsin-Milwaukee)、Mark Mahoney(Carthage College, WI)、Richard Smith(University of St. Thomas)、Jeff Chastine (Clayton State University, GA)、Tom Easton(Thomas College, ME)、Che Dunren(Southern Illinois University)、Dean Mathias(Utah State University)、Shavakant Mishra(University of Colorado)和Richard Reese(Tarleton State University),他们审阅了本书的大部分或全部。 还要感谢很多为本书的一章或多章进行了详尽审阅的人:Vijia Nyalpelli、John Traenky、James Hartley、Ajay Kumar(Symantec)、Juergen Gross、Maneesh Singhal(UNIX Kernel Professional in India)、Yao Qi、Xie Yubo、Victor Cionca、Nikhil Bhargava和Marcros Nagamura。 我还要感谢Dave Probert,微软Windows内核与体系结构组的架构师,他审阅了Vista系统相关的资料,并提供了Linux系统与Vista系统的对比;Tiran Aviazian, Linux文档项目中内核文档的作者,他审阅了Linux 2.6的资料;eCosCentric的NickGarnett,他审阅了eCos的相关资料;Philip Levis,TinyOS系统的开发者之一,他审阅了TinyOS相关的资料。 Brandon Ardiente和Tina Kouri(Colorado School of Mines)添加了与书中动画有关的练习题。Adam Critchley(University of Texas at San Antonia)添加了模拟练习题。Matt Sparks(University of Illinois at Urbana-Champaign)修改了本书的一些编程问题。 Lawrie Brown(The Australian Defence Force Academy)提供了缓冲区溢出攻击的材料。Ching-Kuang Shene(Michigan Tech University)为竞争条件一节提供了示例,并审阅了此章节。Tracy Camp 和Keith Hellman(Colorado School of Mines)提供了一些新的课外练习。此外,Fernando Ariel Gont也提供了一些课外练习,同时他还详细地审阅了本书的全部章节。 我还要感谢Bill Bynum(College of William and Mary)和Tracy Camp(Colorado School of Mines)对附录G的贡献;感谢Steve Taylor(Worcester Polytechnic Institute)对教师手册中程序设计项目和阅读/报告任务的贡献;感谢Tan N. Nguyen教授(George Mason University)对教学手册中研究项目的贡献;感谢Ian G. Granham(Griffith University)对本书中两个编程项目的贡献;感谢Oskars Rieksts(Kutztown University)慷慨地允许我使用他的讲稿、测验与项目。 最后,我要感谢负责出版本书的人们,感谢他们出色的工作,这包括我的编辑Tracy Dunkelberger,他的助理Melinda Hagerty,产品经理Rose Kernan,补遗经理ReeAnne Davis。 此外,Jake Warde(Warde Publishers)负责审阅,Patricia M. Daly负责副本编辑,在此一并表示感谢。