操作系统概念(原书第9版)
作者 : [美] 亚伯拉罕·西尔伯沙茨(Abraham Silberschatz) 彼得·B. 高尔文(Peter B. Galvin) 格雷格·加涅(Greg Gagne) 著
译者 : 郑扣根 唐杰 李善平 译
丛书名 : 计算机科学丛书
出版日期 : 2018-07-06
ISBN : 978-7-111-60436-5
定价 : 99.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 625
开本 : 16
原书名 : Operating System Concepts, Ninth Edition
原出版社: John Wiley & Sons(SIN)
属性分类: 教材
包含CD : 无CD
绝版 :
图书简介

本书是操作系统领域的经典教程,全面细致地介绍操作系统的基本概念。第9版更新内容包括多核系统和并行编程,以及移动操作系统iOS和Android,并对Linux和Windows的相关内容进行了梳理。

图书特色

图书前言

操作系统是任何计算机系统的重要组成部分。同样,操作系统课程也是计算机科学教育的基本组成部分。随着计算机逐渐渗透到日常生活的每个方面,从汽车的嵌入设备到政府和跨国公司的先进规划工具,这个领域发展迅猛。然而,其中的基本概念仍然比较清晰,这些概念就是本书讨论的基础。
本书是面向操作系统导论课程的教科书,适用于大三、大四学生和一年级研究生,同时也可供工程技术人员参考。本书清晰地描述了操作系统的概念。作为先决条件,我们假设读者熟悉基本数据结构、计算机组成和一种高级语言(如C或Java)。本书第1章包括了学习操作系统所需的硬件知识,还包括大多数操作系统普遍使用的基础数据结构。代码示例主要使用C和Java,不过,即使读者不具有这些语言的全部知识也能理解这些算法。
本书不仅直观描述了概念,而且包括重要的理论结果,但是省略了大部分的形式化证明。每章结尾的推荐读物给出了相关研究论文,其中有的首次提出或证明了这些理论结果,有的提供深入阅读的最新材料。本书通过图形和举例来代替证明,以说明为什么有关结果是真实有效的。
本书描述的基本概念和算法通常用于商用和开源的操作系统。我们的目标是,按照通用的(而非特定的)操作系统来描述这些概念和算法。另外,我们提供了最受欢迎和最具创新的操作系统的大量例子,包括Linux、Microsoft Windows、Apple Mac OS X和Solaris。我们还给出了两个主要移动操作系统(Android和iOS)的示例。
本书的编写综合了我们从事操作系统教学的多年经验以及IEEE计算机协会和ACM共同出版的课程指南。另外,还考虑了多位审稿人员提供的反馈意见,以及以前版本读者和学生的许多意见和建议。
本书内容
本书包括六大部分:
概论。第1章和第2章解释了操作系统是什么,它们能做什么,以及它们是如何设计与构造的。这一部分讨论了操作系统的常见功能是什么,以及操作系统能为用户提供什么。我们不仅讨论PC和服务器的传统操作系统,而且讨论移动设备的操作系统。描述主要以启发和解释为主,避免讨论内部实现细节。因此,这部分适合低年级学生或类似读者,以便了解操作系统是什么而无需关注内部算法细节。
进程管理。第3~7章描述了进程概念和并发,这是现代操作系统的核心。进程是系统内的工作单元。这种系统包括一组并发执行进程,其中一些是操作系统进程(执行系统代码的进程),其余的是用户进程(执行用户代码的进程)。这一部分包括进程调度、进程间通信、进程同步及死锁处理等的方法,还包括线程分析以及多核系统和并行编程的有关分析。
内存管理。第8章和第9章是关于进程执行期间的内存管理的。为了改进CPU的使用率及其对用户的响应速度,计算机必须在内存中同时保存多个进程。内存管理具有很多不同方案,反映了内存管理的各种方法;而特定算法的有效性取决于应用情形。
存储管理。第10~13章描述了现代计算机系统如何处理文件系统、大容量存储和I/O。文件系统提供了一种机制,以对数据和程序进行在线存储与访问。这一部分描述了存储管理的经典内部算法和结构,并且深入讨论了这些算法,比如它们的特性、优点和缺点。由于连到计算机的I/O设备种类如此之多,操作系统需要为应用程序提供大量的功能,以控制这些设备的方方面面。这一部分深入讨论了I/O系统,包括I/O系统设计、接口及系统内部的结构和功能。在许多方面,I/O设备也是计算机中最慢的主要组件。因为设备通常是性能瓶颈,所以这一部分也讨论了I/O设备的性能问题。
保护与安全。第14章和第15章讨论了计算机系统保护与安全的必需机制。操作系统的进程活动必须互相保护,为此,我们必须确保只有获得操作系统适当授权的进程才能使用系统的文件、内存、CPU和其他资源。保护是一种机制,用于控制程序、进程和用户对计算机系统资源的访问,这种机制必须提供指定控制和实施控制的手段。安全机制保护系统存储的信息(数据和代码)的完整性和计算机的物理资源,从而避免未经授权的访问、恶意破坏或修改以及意外引入的不一致。
案例研究。本书的第16章和第17章以及附录A和附录B(见www.wiley.com/college/silberschatz),详细研究了操作系统的实际案例,包括Linux、Windows 7、FreeBSD和Mach。虽然本书前面章节也有Linux和Windows 7的讨论,但是案例研究提供了更多细节。比较这两个非常不同的系统的设计是特别有意义的。最后的第18章简要地描述了其他一些有影响的操作系统。
第9版
在编写本书第9版时,我们考虑了影响操作系统的两个重要领域的新发展:
多核系统
移动计算
为了强调这两个重要领域的新发展,我们在新版本中融入了相关讨论。另外,我们几乎重写了每章内容以反映最新变化,并且删除不再有趣或有关的材料。
我们也做了大量调整,例如删除了实时系统一章,但在其他章节中整合了对这些系统的适当讨论。大多数调整都是基于我们讲授操作系统课程的经验。
下面简要描述各章的主要修改:
第1章,导论,包括关于多处理器和多核系统以及内核数据结构的新内容。此外,计算环境的讨论现在包括移动系统和云计算。我们还增加了对实时系统的概述。
第2章,操作系统结构,增加了移动设备(包括iOS和Android)用户界面的讨论,并扩展了Mac OS X(一种混合系统)的讨论。
第3章,进程,现在包括移动操作系统的多任务讨论、Google Chrome浏览器的多进程模型支持以及UNIX的僵尸和孤儿进程。
第4章,多线程编程,扩展了并行性和阿姆达尔定律的相关内容,也提供了关于隐式线程的小节,包括OpenMP和Apple的Grand Central Dispatch。
第5章,进程调度,增加了Linux CFS调度器和Windows用户模式调度,还整合了实时调度算法的讨论。
第6章,同步,增加了互斥锁、OpenMP以及函数式语言的同步讨论。
第7章,死锁,没有重大变化。
第8章,内存管理策略,增加了移动系统以及Intel 32位和64位架构的内存交换的讨论,还增加新的一节讨论ARM架构。
第9章,虚拟内存管理,更新了内核内存管理,以包括Linux SLUB和SLOB内存分配器。
第10章,文件系统,根据当前技术发展进行了更新。
第11章,文件系统实现,根据当前技术发展进行了更新。
第12章,大容量存储结构,增加了固态磁盘的讨论。
第13章,I/O系统,更新了技术与性能参数,扩展了同步/异步和阻塞/非阻塞
I/O的讨论,并增加了向量I/O的内容。
第14章,系统保护,没有重大变化。
第15章,系统安全,采用现代符号修改了密码学的相关内容,并改进了对各种加密方法及其用途的描述,还增加了Windows 7的安全讨论。
第16章,Linux系统,增加了Linux 3.2内核的讨论。
第17章,Windows 7,新的一章,专门研究Windows 7。
第18章,有影响的操作系统,没有重大变化。
编程环境
本书使用许多操作系统的实际示例来说明操作系统的基本概念。虽然主要关注Linux和Microsoft Windows,但是我们也参考各种版本的UNIX(包括Solaris、BSD和Mac OS X)。
本书还提供了用C和Java编写的许多程序示例。这些程序可运行于如下编程环境:
POSIX。POSIX(Portable Operating System Interface,可移植操作系统接口)为一套标准,主要用于基于UNIX的操作系统。虽然Windows系统也可以运行一些POSIX程序,但是我们的POSIX讨论主要关注UNIX和Linux系统。POSIX兼容系统必须实现POSIX核心标准(POSIX.1),Linux、Solaris和Mac OS X都是POSIX兼容系统的例子。POSIX还定义了多个扩展标准,包括实时扩展(POSIX1.b)和线程库扩展(POSIX1.c,常称为Pthreads)。我们提供了多个用C编写的程序示例,以说明POSIX基本API、Pthreads和实时编程扩展。这些程序示例采用gcc 4.0编译器,在Linux 2.6和Linux 3.2系统、Mac OS X 10.7和Solaris 10上进行了测试。
Java。Java是一种应用广泛的编程语言,具有丰富的API以及对线程创建与管理的内置语言支持。Java程序可运行在支持JVM(Java Virtual Machine,Java虚拟机)的任何操作系统上。我们采用Java程序来说明各种操作系统和网络概念,并采用Java 1.6 JVM来测试。
Windows系统。Windows系统的主要编程环境是Windows API,它提供了一整套函数来管理进程、线程、内存和外设。我们提供多个C程序来说明如何使用这种API。这些程序在Windows XP和Windows 7上进行了测试。
我们选择了这三个编程环境,因为我们相信它们最能代表两个受欢迎的操作系统模型,即Windows和UNIX/Linux,以及应用广泛的Java环境。大多数程序示例都是用C编写的,希望读者能够熟悉C语言。熟悉C语言和Java语言的读者,应该很容易理解本书的大多数程序。
在有些情况下,如线程创建,我们使用所有三个编程环境来说明特定概念,以便读者在处理相同任务时可以比较三种不同的库。在其他情况下,我们可能只使用一种API来演示概念。例如,我们只使用POSIX API来说明共享内存,使用Java API来解释TCP/IP的套接字编程。
Linux虚拟机
为了帮助学生更好地学习Linux系统,我们提供了Linux虚拟机及Linux源代码,可从本书支持网站(www.wiley.com/college/silberschatz)下载。该虚拟机还包括带有编译器和编辑器的gcc开发环境。本书的大部分编程作业可以在此虚拟机上完成,但是需要Java或Windows API的作业除外。
我们还提供了三个编程项目,以便通过内核模块修改Linux内核:
添加基本内核模块到Linux内核。
添加使用各种内核数据结构的内核模块。
添加迭代Linux系统任务的内核模块。
我们打算不断在支持网站上补充额外的内核模块作业。
支持网站
本书支持网站www.wiley.com/college/silberschatz包括以下资源:
Linux虚拟机
C与Java源代码
教学大纲样例
PPT
插图集
FreeBSD和Mach的案例研究
学生学习指南
教师注意事项
在本书网站上,我们提供多个教学大纲样例,用于采用本书的各种初级与高级课程。作为一般规律,我们鼓励教师按章节顺序进行教学,因为这会提供最透彻的操作系统研究路线。不过,通过大纲样例,教师可以选择不同的章节顺序(或章节内容)。
本版添加了60多道新的习题以及20多个新的编程题和编程项目。大多数新的编程作业涉及进程、线程、进程同步和内存管理。有些涉及添加内核模块到Linux系统,这可以采用本书附带的Linux虚拟机或其他适当的Linux发行版来完成。
对于采用本书来讲授操作系统的教师,可以获得每章习题和编程题的答案。要获得这些补充材料,请联系当地的John Wiley & Sons销售代表。
学生注意事项
我们鼓励你阅读由我们的一位学生准备的学生学习指南。最后,对于不熟悉UNIX和Linux系统的学生,建议你下载并安装支持网站的Linux虚拟机。这不仅为你提供了新的计算体验,而且Linux的开放源码能帮助你轻松分析这个流行操作系统的内部细节。
祝你在学习操作系统的旅程中一切顺利。
联系我们
我们努力消除本书的错误。然而,像新版的软件一样,错误几乎肯定存在。本书的网站提供了最新的勘误表。如果你能通知我们尚未出现在最新勘误表中的任何错误或遗漏,我们将不胜感激。
我们很乐意收到关于本书的改进建议。我们也欢迎任何可能对其他读者有用的材料,如编程题、项目建议、在线实验室和教程以及教学建议等。可发送邮件到os-book-authors@cs.yale.edu。
致谢
本书源自以前的多个版本,其中前三个版本是与James Peterson合著的。帮助完成以前版本的人员包括:Hamid Arabnia、Rida Bazzi、Randy Bentson、David Black、Joseph Boykin、Jeff Brum?eld、Gael Buckley、Roy Campbell、P. C. Capon、John Carpenter、Gil Carrick、Thomas Casavant、Bart Childs、Ajoy Kumar Datta、Joe Deck、Sudarshan K. Dhall、Thomas Doeppner、Caleb Drake、M. Racsit Eskicioglu、Hans Flack、Robert Fowler、G. Scott Graham、Richard Guy、Max Hailperin、Rebecca Hartman、Wayne Hathaway、Christopher Haynes、Don Heller、Bruce Hillyer、Mark Holliday、Dean Hougen、Michael Huang、Ahmed Kamel、Morty Kewstel、Richard Kieburtz、Carol Kroll、Morty Kwestel、Thomas LeBlanc、John Leggett、Jerrold Leichter、Ted Leung、Gary Lippman、Carolyn Miller、Michael Molloy、Euripides Montagne、Yoichi Muraoka、Jim M. Ng、Banu Ozden、Ed Posnak、Boris Putanec、Charles Qualline、John Quarterman、Mike Reiter、Gustavo Rodriguez-Rivera、Carolyn J. C. Schauble、Thomas P. Skinner、Yannis Smaragdakis、Jesse St. Laurent、John Stankovic、Adam Stauffer、Ste-ven Stepanek、John Sterling、Hal Stern、Louis Stevens、Pete Thomas、David Umbaugh、Steve Vinoski、Tommy Wagner、Larry L. Wear、John Werth、James M. Westall、J. S. Weston与Yang Xiang。
Robert Love更新了第16章和全书Linux的描述,并回答了Android相关的许多问题。Dave Probert编写了第17章,这源自本书第8版的第22章。Jonathan Katz贡献了第15章。Salahuddin Khan更新了15.9节,以提供新的Windows 7安全功能。
第16章来自Stephen Tweedie的未发表手稿。Cliff Martin帮助更新了UNIX附录,以包括FreeBSD。Arvind Krishnamurthy提供了一些习题及其解答。Andrew DeNicola准备了我们网站上的学生学习指南。Marilyn Turnamian提供了一些幻灯片。
Mike Shapiro、Bryan Cantrill和Jim Mauro回答了多个Solaris相关的问题。Sun Microsystems的Bryan Cantrill提供了有关ZFS的帮助。Josh Dees和Rob Reynolds提供了微软.NET的描述。John Trono(Saint Michael学院)提供了POSIX消息队列的项目。
Judi Paige帮助准备了插图和幻灯片。Thomas Gagne为本版准备了新的插图。Mark Wogahn确保了生成本书的软件(LATEX和字体)可以正常工作。Ranjan Kumar Meher重写了用于生成本书的一些LATEX软件。
执行编辑Beth Lang Golub在我们编写本书时提供了专家指导。在Katherine Willis的协助下,她很好地管理了项目细节。高级制作编辑Ken Santor处理了所有的成书细节。
Susan Cyr为封面绘画师,Madelyn Lesure为封面设计师。Beverly Peavler复制了手稿。Katrina Avery为自由校对员,WordCo,Inc.为自由索引公司。

Abraham Silberschatz, New Haven, CT, 2012
Peter Baer Galvin, Boston, MA, 2012
Greg Gagne, Salt Lake City, UT, 2012

上架指导

计算机\操作系统

封底文字

本书是操作系统领域的“圣经”,从第1版至今全程记录了操作系统的发展历史,被国内外众多高校选作教材。第9版延续了之前版本的优点并进行了全面更新:理论讲解采用简洁、直观的方式来呈现重要的研究结果,不展开复杂的形式化证明;案例分析涵盖Linux、Windows、Mac OS X、Android、iOS等各大主流系统;代码部分要求读者对C或Java语言有一定的了解;教辅资源同步升级,包括习题、编程题、推荐读物、源代码和PPT等(请访问www.hzbook.com查看和下载)。

重点更新
新增关于多核系统和移动计算的内容。
针对移动设备的大量普及,新增了相关的操作系统、用户界面和内存管理等内容。
针对大容量存储的发展,新增了固态硬盘等内容。
更新了进程、线程、同步、内存管理、文件系统、I/O系统、Linux系统等方面的新技术。
在编程环境方面,同时考虑POSIX、Java和Windows系统。
更新了大量习题和编程项目。

作者简介
亚伯拉罕·西尔伯沙茨(Abraham Silberschatz) 著名计算机科学家,ACM、IEEE和AAAS会士。现任耶鲁大学计算机科学系教授,之前曾任贝尔实验室信息科学研究中心副主管。除本书外,他还是知名教材《数据库系统概念》的作者之一。
彼得·B. 高尔文(Peter B. Galvin) 现任Pluribus Networks首席解决方案架构师,之前曾任系统集成商Corporate Technologies的首席技术官,还曾在波士顿大学担任讲师。
格雷格·加涅(Greg Gagne) 威斯敏斯特学院计算机科学系主任,操作系统、计算机网络、并行编程和软件工程方面的资深专家。

译者简介
郑扣根 浙江大学计算机学院教授、博士生导师。1994年起于浙江大学任教至今,长期从事操作系统、计算理论、形式化方法、计算机网络等方面的教学和科研工作。

作者简介

[美] 亚伯拉罕·西尔伯沙茨(Abraham Silberschatz) 彼得·B. 高尔文(Peter B. Galvin) 格雷格·加涅(Greg Gagne) 著:---作者简介---
亚伯拉罕·西尔伯沙茨(Abraham Silberschatz) 著名计算机科学家,ACM、IEEE和AAAS会士。现任耶鲁大学计算机科学系教授,之前曾任贝尔实验室信息科学研究中心副主管。除本书外,他还是知名教材《数据库系统概念》的作者之一。
彼得·B. 高尔文(Peter B. Galvin) 现任Pluribus Networks首席解决方案架构师,之前曾任系统集成商Corporate Technologies的首席技术官,还曾在波士顿大学担任讲师。
格雷格·加涅(Greg Gagne) 威斯敏斯特学院计算机科学系主任,操作系统、计算机网络、并行编程和软件工程方面的资深专家。

---译者简介---
郑扣根,浙江大学计算机学院教授、博士生导师。1994年起于浙江大学任教至今,长期从事操作系统、计算理论、形式化方法、计算机网络等方面的教学和科研工作。

译者序

计算机科学与技术的发展如此迅猛,人工智能、深度学习、大数据、云计算、物联网等让人应接不暇。但到目前为止,无论世界如何变化,操作系统一直是计算机的重要基础,“操作系统”课程也一直是计算机专业的核心必修课程之一。当然,操作系统本身也在不断发展,所以此书从第1版到现在已经发展到了第9版。
为什么要再三翻译此书呢?第一,如之前版本译者序中所言,这是一本操作系统的“圣经”;第二,操作系统对计算机专业的学生实在是非常基础和重要;第三,我们长期从事计算机专业教学的使命使然,绵薄之力也当奉献。
较之前的版本,此版本的特点如下:
新增了多核系统和移动计算的内容。
每一章都融入了操作系统的新发展,并删除了一些过时的内容:
在计算环境中考虑了移动计算、云计算等时下热点的内容。针对移动设备大量普及应用的环境,增加了相关的操作系统、用户界面、内存管理等内容。针对大容量存储的发展,新增了固态硬盘等内容。
在进程、线程、同步、内存管理、文件系统及实现、I/O系统、Linux系统等方面,根据技术发展做了更新。
新增了Windows 7的内容。
在编程环境方面,同时考虑POSIX、Java、Windows系统。
更新了习题、编程项目等,以方便学生巩固和测试对新内容的学习。
本书原作者Abraham Silberschatz、Peter B. Galvin和Greg Gagne都是操作系统界的大师级人物。《操作系统概念》系列版本一向是操作系统经典图书中的经典,从第1版至今,可以说完美记录了操作系统的发展历史。这一版本延续了之前版本的优点,并加入了操作系统的新发展动向,相信读者能从中受益。
本书既适合作为计算机专业大三、大四本科学生的教材,也适用于相关专业人员完整理解计算机操作系统原理。建议读者根据自身情况阅读全书或部分章节。
科技图书的翻译一般都力求忠于原著。作为长期从事计算机专业教学的高校教师,总是希望作品能少出错,并能给读者以最大的帮助。但中文实在博大精深,译者水平有限,且时间仓促,翻译过程难免出错,欢迎读者批评指正,在此先表感谢!
本书由郑扣根(浙江大学)、唐杰(南京大学)和李善平(浙江大学)翻译。翻译过程中得到家人的理解与支持,在此表示深深的谢意。

图书目录

出版者的话
译者序
前言
第一部分 概论
第1章 导论 2
1.1 操作系统的功能 2
1.1.1 用户视角 2
1.1.2 系统视角 3
1.1.3 操作系统的定义 4
1.2 计算机系统的组成 4
1.2.1 计算机系统的运行 5
1.2.2 存储结构 6
1.2.3 I/O结构 8
1.3 计算机系统的体系结构 9
1.3.1 单处理器系统 9
1.3.2 多处理器系统 10
1.3.3 集群系统 12
1.4 操作系统的结构 13
1.5 操作系统的执行 14
1.5.1 双重模式与多重模式的执行 15
1.5.2 定时器 16
1.6 进程管理 17
1.7 内存管理 18
1.8 存储管理 18
1.8.1 文件系统管理 18
1.8.2 大容量存储器管理 19
1.8.3 高速缓存 19
1.8.4 I/O系统 21
1.9 保护与安全 21
1.10 内核数据结构 22
1.10.1 列表、堆栈及队列 22
1.10.2 树 23
1.10.3 哈希函数与哈希表 23
1.10.4 位图 24
1.11 计算环境 24
1.11.1 传统计算 24
1.11.2 移动计算 25
1.11.3 分布计算 26
1.11.4 客户机-服务器计算 26
1.11.5 对等计算 27
1.11.6 虚拟化 28
1.11.7 云计算 29
1.11.8 实时嵌入式系统 30
1.12 开源操作系统 31
1.12.1 历史 31
1.12.2 Linux 31
1.12.3 BSD UNIX 32
1.12.4 Solaris 32
1.12.5 用作学习的开源操作系统 33
1.13 小结 33
习题 35
推荐读物 36
参考文献 36
第2章 操作系统结构 38
2.1 操作系统的服务 38
2.2 用户与操作系统的界面 40
2.2.1 命令解释程序 40
2.2.2 图形用户界面 41
2.2.3 界面的选择 42
2.3 系统调用 43
2.4 系统调用的类型 46
2.4.1 进程控制 46
2.4.2 文件管理 49
2.4.3 设备管理 50
2.4.4 信息维护 50
2.4.5 通信 50
2.4.6 保护 51
2.5 系统程序 51
2.6 操作系统的设计与实现 52
2.6.1 设计目标 52
2.6.2 机制与策略 53
2.6.3 实现 53
2.7 操作系统的结构 54
2.7.1 简单结构 54
2.7.2 分层方法 55
2.7.3 微内核 56
2.7.4 模块 57
2.7.5 混合系统 58
2.8 操作系统的调试 60
2.8.1 故障分析 60
2.8.2 性能优化 60
2.8.3 DTrace 61
2.9 操作系统的生成 63
2.10 系统引导 64
2.11 小结 64
习题 65
编程题 66
编程项目 66
推荐读物 69
参考文献 69
第二部分 进程管理
第3章 进程 72
3.1 进程概念 72
3.1.1 进程 72
3.1.2 进程状态 73
3.1.3 进程控制块 73
3.1.4 线程 74
3.2 进程调度 75
3.2.1 调度队列 75
3.2.2 调度程序 77
3.2.3 上下文切换 78
3.3 进程运行 79
3.3.1 进程创建 79
3.3.2 进程终止 82
3.4 进程间通信 83
3.4.1 共享内存系统 85
3.4.2 消息传递系统 86
3.5 IPC系统例子 89
3.5.1 例子:POSIX共享内存 89
3.5.2 例子:Mach 91
3.5.3 例子:Windows 92
3.6 客户机/服务器通信 93
3.6.1 套接字 93
3.6.2 远程过程调用 96
3.6.3 管道 98
3.7 小结 102
习题 103
编程题 105
编程项目 107
推荐读物 110
参考文献 110
第4章 多线程编程 112
4.1 概述 112
4.1.1 动机 112
4.1.2 优点 113
4.2 多核编程 114
4.2.1 编程挑战 115
4.2.2 并行类型 115
4.3 多线程模型 116
4.3.1 多对一模型 116
4.3.2 一对一模型 116
4.3.3 多对多模型 116
4.4 线程库 117
4.4.1 Pthreads 118
4.4.2 Windows线程 119
4.4.3 Java线程 121
4.5 隐式多线程 122
4.5.1 线程池 123
4.5.2 OpenMP 124
4.5.3 大中央调度 125
4.5.4 其他方法 125
4.6 多线程问题 125
4.6.1 系统调用fork()和exec() 125
4.6.2 信号处理 126
4.6.3 线程撤销 127
4.6.4 线程本地存储 128
4.6.5 调度程序激活 128
4.7 操作系统例子 129
4.7.1 Windows线程 129
4.7.2 Linux线程 130
4.8 小结 131
习题 131
编程题 133
编程项目 134
推荐读物 136
参考文献 136
第5章 进程调度 138
5.1 基本概念 138
5.1.1 CPU-I/O执行周期 138
5.1.2 CPU调度程序 139
5.1.3 抢占调度 139
5.1.4 调度程序 140
5.2 调度准则 140
5.3 调度算法 141
5.3.1 先到先服务调度 141
5.3.2 最短作业优先调度 142
5.3.3 优先级调度 144
5.3.4 轮转调度 145
5.3.5 多级队列调度 147
5.3.6 多级反馈队列调度 148
5.4 线程调度 149
5.4.1 竞争范围 149
5.4.2 Pthreads调度 149
5.5 多处理器调度 151
5.5.1 多处理器调度的方法 151
5.5.2 处理器亲和性 151
5.5.3 负载平衡 152
5.5.4 多核处理器 152
5.6 实时CPU调度 154
5.6.1 最小化延迟 154
5.6.2 优先权调度 155
5.6.3 单调速率调度 156
5.6.4 最早截止期限优先调度 157
5.6.5 比例分享调度 158
5.6.6 POSIX实时调度 158
5.7 操作系统例子 160
5.7.1 例子:Linux调度 160
5.7.2 例子:Windows调度 162
5.7.3 例子:Solaris调度 164
5.8 算法评估 165
5.8.1 确定性模型 166
5.8.2 排队模型 167
5.8.3 仿真 167
5.8.4 实现 168
5.9 小结 169
习题 170
推荐读物 172
参考文献 173
第6章 同步 175
6.1 背景 175
6.2 临界区问题 177
6.3 Peterson解决方案 178
6.4 硬件同步 179
6.5 互斥锁 181
6.6 信号量 181
6.6.1 信号量的使用 182
6.6.2 信号量的实现 182
6.6.3 死锁与饥饿 184
6.6.4 优先级的反转 184
6.7 经典同步问题 185
6.7.1 有界缓冲问题 185
6.7.2 读者-作者问题 186
6.7.3 哲学家就餐问题 187
6.8 管程 188
6.8.1 使用方法 189
6.8.2 哲学家就餐问题的管程解决方案 190
6.8.3 采用信号量的管程实现 191
6.8.4 管程内的进程重启 192
6.9 同步例子 193
6.9.1 Windows同步 193
6.9.2 Linux同步 194
6.9.3 Solaris同步 195
6.9.4 Pthreads同步 196
6.10 替代方法 197
6.10.1 事务内存 198
6.10.2 OpenMP 199
6.10.3 函数式编程语言 199
6.11 小结 200
习题 200
编程题 204
编程项目 205
推荐读物 209
参考文献 210
第7章 死锁 212
7.1 系统模型 212
7.2 死锁特征 213
7.2.1 必要条件 214
7.2.2 资源分配图 215
7.3 死锁处理方法 216
7.4 死锁预防 217
7.4.1 互斥 217
7.4.2 持有且等待 217
7.4.3 无抢占 218
7.4.4 循环等待 218
7.5 死锁避免 220
7.5.1 安全状态 220
7.5.2 资源分配图算法 221
7.5.3 银行家算法 222
7.6 死锁检测 224
7.6.1 每种资源类型只有单个实例 224
7.6.2 每种资源类型可有多个实例 225
7.6.3 应用检测算法 226
7.7 死锁恢复 227
7.7.1 进程终止 227
7.7.2 资源抢占 227
7.8 小结 228
习题 228
编程题 230
编程项目 230
推荐读物 231
参考文献 232
第三部分 内存管理
第8章 内存管理策略 234
8.1 背景 234
8.1.1 基本硬件 234
8.1.2 地址绑定 236
8.1.3 逻辑地址空间与物理地址空间 236
8.1.4 动态加载 237
8.1.5 动态链接与共享库 238
8.2 交换 238
8.2.1 标准交换 238
8.2.2 移动系统的交换 239
8.3 连续内存分配 240
8.3.1 内存保护 240
8.3.2 内存分配 241
8.3.3 碎片 242
8.4 分段 242
8.4.1 基本方法 243
8.4.2 分段硬件 243
8.5 分页 244
8.5.1 基本方法 245
8.5.2 硬件支持 247
8.5.3 保护 250
8.5.4 共享页 251
8.6 页表结构 252
8.6.1 分层分页 252
8.6.2 哈希页表 254
8.6.3 倒置页表 254
8.6.4 Oracle SPARC Solaris 255
8.7 例子:Intel 32位与64位体系结构 256
8.7.1 IA-32架构 256
8.7.2 x86-64 258
8.8 例子:ARM架构 259
8.9 小结 259
习题 260
编程题 262
推荐读物 262
参考文献 263
第9章 虚拟内存管理 264
9.1 背景 264
9.2 请求调页 266
9.2.1 基本概念 266
9.2.2 请求调页的性能 269
9.3 写时复制 271
9.4 页面置换 272
9.4.1 基本页面置换 273
9.4.2 FIFO页面置换 275
9.4.3 最优页面置换 276
9.4.4 LRU页面置换 276
9.4.5 近似LRU页面置换 278
9.4.6 基于计数的页面置换 279
9.4.7 页面缓冲算法 280
9.4.8 应用程序与页面置换 280
9.5 帧分配 280
9.5.1 帧的最小数 281
9.5.2 分配算法 282
9.5.3 全局分配与局部分配 282
9.5.4 非均匀内存访问 283
9.6 系统抖动 283
9.6.1 系统抖动的原因 284
9.6.2 工作集模型 285
9.6.3 缺页错误频率 286
9.6.4 结束语 287
9.7 内存映射文件 287
9.7.1 基本机制 287
9.7.2 共享内存Windows API 288
9.7.3 内存映射I/O 290
9.8 分配内核内存 291
9.8.1 伙伴系统 291
9.8.2 slab分配 292
9.9 其他注意事项 293
9.9.1 预调页面 293
9.9.2 页面大小 293
9.9.3 TLB范围 294
9.9.4 倒置页表 295
9.9.5 程序结构 295
9.9.6 I/O联锁与页面锁定 296
9.10 操作系统例子 297
9.10.1 Windows 297
9.10.2 Solaris 298
9.11 小结 299
习题 300
编程题 303
编程项目 304
推荐读物 306
参考文献 306
第四部分 存储管理
第10章 文件系统 310
10.1 文件概念 310
10.1.1 文件属性 310
10.1.2 文件操作 311
10.1.3 文件类型 315
10.1.4 文件结构 316
10.1.5 内部文件结构 316
10.2 访问方法 316
10.2.1 顺序访问 317
10.2.2 直接访问 317
10.2.3 其他访问方法 318
10.3 目录与磁盘的结构 319
10.3.1 存储结构 319
10.3.2 目录概述 320
10.3.3 单级目录 320
10.3.4 两级目录 321
10.3.5 树形目录 322
10.3.6 无环图目录 323
10.3.7 通用图目录 325
10.4 文件系统安装 326
10.5 文件共享 327
10.5.1 多用户 327
10.5.2 远程文件系统 328
10.5.3 一致性语义 330
10.6 保护 331
10.6.1 访问类型 331
10.6.2 访问控制 331
10.6.3 其他保护方式 333
10.7 小结 334
习题 334
推荐读物 335
参考文献 335
第11章 文件系统实现 337
11.1 文件系统结构 337
11.2 文件系统实现 338
11.2.1 概述 338
11.2.2 分区与安装 341
11.2.3 虚拟文件系统 341
11.3 目录实现 343
11.3.1 线性列表 343
11.3.2 哈希表 343
11.4 分配方法 344
11.4.1 连续分配 344
11.4.2 链接分配 345
11.4.3 索引分配 347
11.4.4 性能 348
11.5 空闲空间管理 349
11.5.1 位向量 349
11.5.2 链表 350
11.5.3 组 350
11.5.4 计数 350
11.5.5 空间图 351
11.6 效率与性能 351
11.6.1 效率 351
11.6.2 性能 352
11.7 恢复 354
11.7.1 一致性检查 354
11.7.2 基于日志的文件系统 354
11.7.3 其他解决方法 355
11.7.4 备份和恢复 356
11.8 NFS 356
11.8.1 概述 357
11.8.2 安装协议 358
11.8.3 NFS协议 358
11.8.4 路径名称转换 359
11.8.5 远程操作 360
11.9 例子:WAFL文件系统 360
11.10 小结 362
习题 363
编程题 364
推荐读物 365
参考文献 365
第12章 大容量存储结构 367
12.1 大容量存储结构概述 367
12.1.1 磁盘 367
12.1.2 固态磁盘 368
12.1.3 磁带 368
12.2 磁盘结构 369
12.3 磁盘连接 369
12.3.1 主机连接存储 369
12.3.2 网络连接存储 370
12.3.3 存储区域网络 370
12.4 磁盘调度 371
12.4.1 FCFS调度 371
12.4.2 SSTF调度 371
12.4.3 SCAN调度 372
12.4.4 C-SCAN调度 373
12.4.5 LOOK调度 373
12.4.6 磁盘调度算法的选择 373
12.5 磁盘管理 374
12.5.1 磁盘格式化 374
12.5.2 引导块 375
12.5.3 坏块 376
12.6 交换空间管理 377
12.6.1 交换空间的使用 377
12.6.2 交换空间位置 377
12.6.3 交换空间管理:例子 378
12.7 RAID结构 378
12.7.1 通过冗余提高可靠性 379
12.7.2 通过并行处理提高性能 380
12.7.3 RAID级别 380
12.7.4 RAID级别的选择 383
12.7.5 扩展 384
12.7.6 RAID的问题 384
12.8 稳定存储实现 385
12.9 小结 386
习题 387
编程题 388
推荐读物 388
参考文献 389
第13章 I/O系统 390
13.1 概述 390
13.2 I/O硬件 390
13.2.1 轮询 392
13.2.2 中断 393
13.2.3 直接内存访问 396
13.2.4 I/O硬件小结 397
13.3 应用程序I/O接口 397
13.3.1 块与字符设备 399
13.3.2 网络设备 400
13.3.3 时钟与定时器 400
13.3.4 非阻塞与异步I/O 401
13.3.5 向量I/O 402
13.4 内核I/O子系统 402
13.4.1 I/O调度 402
13.4.2 缓冲 403
13.4.3 缓存 404
13.4.4 假脱机与设备预留 405
13.4.5 错误处理 405
13.4.6 I/O保护 405
13.4.7 内核数据结构 406
13.4.8 内核I/O子系统小结 406
13.5 I/O请求转成硬件操作 407
13.6 流 409
13.7 性能 410
13.8 小结 412
习题 413
推荐读物 414
参考文献 414
第五部分 保护与安全
第14章 系统保护 416
14.1 保护目标 416
14.2 保护原则 417
14.3 保护域 417
14.3.1 域结构 418
14.3.2 例子:UNIX 419
14.3.3 例子:MULTICS 420
14.4 访问矩阵 421
14.5 访问矩阵的实现 423
14.5.1 全局表 423
14.5.2 对象的访问列表 423
14.5.3 域的能力列表 424
14.5.4 锁-钥匙机制 424
14.5.5 比较 424
14.6 访问控制 425
14.7 访问权限的撤回 426
14.8 基于能力的系统 427
14.8.1 例子:Hydra 427
14.8.2 例子:剑桥CAP系统 428
14.9 基于语言的保护 428
14.9.1 基于编译程序的实现 429
14.9.2 Java的保护 430
14.10 小结 432
习题 432
推荐读物 433
参考文献 433
第15章 系统安全 436
15.1 安全问题 436
15.2 程序威胁 438
15.2.1 特洛伊木马 438
15.2.2 后门 439
15.2.3 逻辑炸弹 440
15.2.4 堆栈和缓冲区溢出 440
15.2.5 病毒 442
15.3 系统和网络的威胁 444
15.3.1 蠕虫 445
15.3.2 端口扫描 447
15.3.3 拒绝服务 448
15.4 作为安全工具的密码术 448
15.4.1 加密 449
15.4.2 密码术的实现 454
15.4.3 例子:SSL 454
15.5 用户认证 456
15.5.1 密码 456
15.5.2 密码漏洞 456
15.5.3 密码安全 457
15.5.4 一次性密码 458
15.5.5 生物识别技术 458
15.6 实现安全防御 459
15.6.1 安全策略 459
15.6.2 漏洞评估 459
15.6.3 入侵检测 460
15.6.4 病毒防护 462
15.6.5 审计、记账和日志 464
15.7 保护系统和网络的防火墙 464
15.8 计算机安全等级 465
15.9 例子:Windows 7 466
15.10 小结 468
习题 468
推荐读物 469
参考文献 470
第六部分 案例研究
第16章 Linux系统 474
16.1 Linux历史 474
16.1.1 Linux内核 475
16.1.2 Linux系统 476
16.1.3 Linux发行 476
16.1.4 Linux许可 477
16.2 设计原则 477
16.3 内核模块 479
16.3.1 模块管理 480
16.3.2 驱动程序注册 480
16.3.3 冲突解决 481
16.4 进程管理 481
16.4.1 fork()/exec()进程模型 481
16.4.2 进程与线程 483
16.5 调度 484
16.5.1 进程调度 484
16.5.2 实时调度 485
16.5.3 内核同步 486
16.5.4 对称多处理 487
16.6 内存管理 488
16.6.1 物理内存管理 488
16.6.2 虚拟内存 490
16.6.3 执行与加载用户程序 492
16.7 文件系统 494
16.7.1 虚拟文件系统 494
16.7.2 Linux ext3文件系统 495
16.7.3 日志 497
16.7.4 Linux进程文件系统 497
16.8 输入与输出 498
16.8.1 块设备 499
16.8.2 字符设备 500
16.9 进程间通信 500
16.9.1 同步与信号 500
16.9.2 进程间的数据传递 501
16.10 网络结构 501
16.11 安全 503
16.11.1 认证 503
16.11.2 访问控制 503
16.12 小结 504
习题 505
推荐读物 506
参考文献 506
第17章 Windows 7 507
17.1 历史 507
17.2 设计原则 509
17.2.1 安全性 509
17.2.2 可靠性 509
17.2.3 Windows和POSIX应用程序兼容性 510
17.2.4 高性能 511
17.2.5 可扩展性 512
17.2.6 可移植性 512
17.2.7 国际化支持 513
17.2.8 电源效率 513
17.2.9 动态设备支持 513
17.3 系统组件 513
17.3.1 硬件抽象层 514
17.3.2 内核 514
17.3.3 执行体 518
17.4 终端服务与快速用户切换 531
17.5 文件系统 532
17.5.1 NTFS内部布局 532
17.5.2 恢复 534
17.5.3 安全 535
17.5.4 卷管理和容错 535
17.5.5 压缩 536
17.5.6 安装点、符号链接和硬链接 536
17.5.7 变更日志 537
17.5.8 卷的影子副本 537
17.6 网络 537
17.6.1 网络接口 537
17.6.2 协议 537
17.6.3 重定向器与服务器 539
17.6.4 域 540
17.6.5 活动目录 540
17.7 程序员接口 540
17.7.1 访问内核对象 541
17.7.2 进程间共享对象 541
17.7.3 进程管理 542
17.7.4 使用Windows消息传递的进程间通信 545
17.7.5 内存管理 546
17.8 小结 547
习题 548
推荐读物 548
参考文献 549
第18章 有影响的操作系统 550
18.1 特征迁移 550
18.2 早期系统 551
18.2.1 专用计算机系统 551
18.2.2 共享计算机系统 552
18.2.3 重叠I/O 554
18.3 Atlas 555
18.4 XDS-940 556
18.5 THE 556
18.6 RC 4000 557
18.7 CTSS 558
18.8 MULTICS 558
18.9 IBM OS/360 558
18.10 TOPS-20 559
18.11 CP/M与MS/DOS 560
18.12 Macintosh OS与Windows 560
18.13 Mach 561
18.14 其他系统 562
习题 562
推荐读物 562
参考文献 563
索引 565

教学资源推荐
作者: [美]弗兰克 J. 法博齐(Frank J. Fabozzi),埃德温 H. 尼夫(Edwin H. Neave),[美]周国富(Guofu Zhou) 著
作者: [比]保罗•德•格劳威(Paul De Grauwe) 著