新書推薦:
《
于胥斯原 乡族、风水与地方记忆
》
售價:HK$
177.0
《
以经治国与汉代社会
》
售價:HK$
98.6
《
我真正想要什么?:智慧瑜伽答问/正念系列
》
售價:HK$
58.2
《
元朝理财记 从成吉思汗的崛起到元朝的衰亡
》
售價:HK$
98.6
《
欧洲史:一本书历览欧洲数千年兴衰起伏,理解欧洲文明何以铸就今日世界
》
售價:HK$
333.8
《
趣学CCNA——路由与交换(第2版)
》
售價:HK$
100.6
《
世界航空地理(世界国别与区域地理研究丛书)
》
售價:HK$
244.2
《
学术的中心:英法德美
》
售價:HK$
87.4
|
內容簡介: |
本书是经典教材《操作系统概念》的精简版,强调基础概念,更适合本科阶段的教学。全书共六部分,不仅详细讲解了进程管理、内存管理、存储管理、保护与安全等概念,而且涵盖重要的理论结果和案例研究,并且给出了供读者深入学习的推荐读物。这一版新增了多核系统和移动计算的内容,每一章都融入了新的技术进展,并且更新了习题和编程项目。本书既适合高等院校计算机相关专业的学生学习,也是专业技术人员的有益参考。
|
關於作者: |
---作者简介---
亚伯拉罕·西尔伯沙茨(Abraham Silberschatz) 计算机科学家,ACM、IEEE和AAAS会士。现任耶鲁大学计算机科学系教授,之前曾任贝尔实验室信息科学研究中心副主管。除本书外,他还是知名教材《数据库系统概念》的作者之一。
彼得·B. 高尔文(Peter B. Galvin) 现任Pluribus Networks首席解决方案架构师,之前曾任系统集成商Corporate Technologies的首席技术官,还曾在波士顿大学担任讲师。
格雷格·加涅(Greg Gagne) 威斯敏斯特学院计算机科学系主任,操作系统、计算机网络、并行编程和软件工程方面的专家。
---译者简介---
郑扣根,浙江大学计算机学院教授、博士生导师。1994年起于浙江大学任教至今,长期从事操作系统、计算理论、形式化方法、计算机网络等方面的教学和科研工作。
|
目錄:
|
Operating System Concepts Essentials, Second Edition
出版者的话
译者序
前言
第一部分 概论
第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 IO结构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 内存管理17
1.8 存储管理18
1.8.1 文件系统管理18
1.8.2 大容量存储器管理19
1.8.3 高速缓存19
1.8.4 IO系统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 实时嵌入式系统29
1.12 开源操作系统30
1.12.1 历史31
1.12.2 Linux31
1.12.3 BSD UNIX32
1.12.4 Solaris32
1.12.5 用作学习的开源操作系统33
1.13 小结33
复习题35
实践题35
习题35
推荐读物36
参考文献37
第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 DTrace61
2.9 操作系统的生成63
2.10 系统引导64
2.11 小结64
复习题65
实践题65
习题65
编程题66
编程项目66
推荐读物69
参考文献70
第二部分 进程管理
第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 例子:Mach91
3.5.3 例子:Windows92
3.6 客户机服务器通信93
3.6.1 套接字93
3.6.2 远程过程调用96
3.6.3 管道98
3.7 小结102
复习题103
实践题103
习题104
编程题105
编程项目107
推荐读物110
参考文献111
第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 Pthreads118
4.4.2 Windows线程119
4.4.3 Java线程121
4.5 隐式多线程122
4.5.1 线程池123
4.5.2 OpenMP124
4.5.3 大中央调度125
4.5.4 其他方法125
4.6 多线程问题125
4.6.1 系统调用fork和exec125
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
实践题131
习题131
编程题133
编程项目135
推荐读物136
参考文献136
第5章 进程同步138
5.1 背景138
5.2 临界区问题140
5.3 Peterson解决方案141
5.4 硬件同步142
5.5 互斥锁144
5.6 信号量144
5.6.1 信号量的使用145
5.6.2 信号量的实现145
5.6.3 死锁与饥饿147
5.6.4 优先级的反转147
5.7 经典同步问题148
5.7.1 有界缓冲问题148
5.7.2 读者-作者问题149
5.7.3 哲学家就餐问题150
5.8 管程151
5.8.1 使用方法152
5.8.2 哲学家就餐问题的管程解决方案153
5.8.3 采用信号量的管程实现154
5.8.4 管程内的进程重启155
5.9 同步例子156
5.9.1 Windows同步156
5.9.2 Linux同步157
5.9.3 Solaris同步158
5.9.4 Pthreads同步159
5.10 替代方法160
5.10.1 事务内存161
5.10.2 OpenMP162
|
內容試閱:
|
前 言Operating System Concepts Essentials, Second Edition其中的基本概念仍然比较清晰,这些概念就是本书讨论的基础。
本书是面向操作系统导论课程的教科书,适用于大三、大四学生和一年级研究生,同时也可供工程技术人员参考。本书清晰地描述了操作系统的概念。作为先决条件,我们假设读者熟悉基本数据结构、计算机组成和一种高级语言(如C或Java)。本书第1章包括了学习操作系统所需的硬件知识,还包括大多数操作系统普遍使用的基础数据结构。代码示例主要使用C和Java,不过,即使读者不具有这些语言的全部知识也能理解这些算法。
本书不仅直观描述了概念,而且包括重要的理论结果,但是省略了大部分的形式化证明。每章结尾的推荐读物给出了相关研究论文,其中有的首次提出或证明了这些理论结果,有的提供深入阅读的最新材料。本书通过图形和举例来代替证明,以说明为什么有关结果是真实有效的。
本书描述的基本概念和算法通常用于商用和开源的操作系统。我们的目标是,按照通用的(而非特定的)操作系统来描述这些概念和算法。另外,我们提供了最受欢迎和最具创新的操作系统的大量例子,包括Linux、Microsoft Windows、Apple Mac OS X和Solaris。我们还给出了两个主要移动操作系统(Android和iOS)的示例。
本书的编写综合了我们从事操作系统教学的多年经验以及IEEE计算机协会和ACM共同出版的课程指南。另外,还考虑了多位审稿人员提供的反馈意见,以及以前版本读者和学生的许多意见和建议。
本书内容本书包括六大部分:
概论。第1章和第2章解释了操作系统是什么,它们能做什么,以及它们是如何设计与构造的。这一部分讨论了操作系统的常见功能是什么,以及操作系统能为用户提供什么。我们不仅讨论PC和服务器的传统操作系统,而且讨论移动设备的操作系统。描述主要以启发和解释为主,避免讨论内部实现细节。因此,这部分适合低年级学生或类似读者,以便了解操作系统是什么而无需关注内部算法细节。
进程管理。第3~6章描述了进程概念和并发,这是现代操作系统的核心。进程是系统内的工作单元。这种系统包括一组并发执行进程,其中一些是操作系统进程(执行系统代码的进程),其余的是用户进程(执行用户代码的进程)。这一部分包括进程调度、进程间通信、进程同步及死锁处理等的方法,还包括线程分析以及多核系统和并行编程的有关分析。
内存管理。第7章和第8章是关于进程执行期间的内存管理的。为了改进CPU的使用率及其对用户的响应速度,计算机必须在内存中同时保存多个进程。内存管理具有很多不同方案,反映了内存管理的各种方法;而特定算法的有效性取决于应用情形。
存储管理。第9~12章描述了现代计算机系统如何处理文件系统、大容量存储和IO。文件系统提供了一种机制,以对数据和程序进行在线存储与访问。这一部分描述了存储管理的经典内部算法和结构,并且深入讨论了这些算法,比如它们的特性、优点和缺点。由于连到计算机的IO设备种类如此之多,操作系统需要为应用程序提供大量的功能,以控制这些设备的方方面面。这一部分深入讨论了IO系统,包括IO系统设计、接口及系统内部的结构和功能。在许多方面,IO设备也是计算机中最慢的主要组件。因为设备通常是性能瓶颈,所以这一部分也讨论了IO设备的性能问题。
保护与安全。第13章和第14章讨论了计算机系统保护与安全的必需机制。操作系统的进程活动必须互相保护,为此,我们必须确保只有获得操作系统适当授权的进程才能使用系统的文件、内存、CPU和其他资源。保护是一种机制,用于控制程序、进程和用户对计算机系统资源的访问,这种机制必须提供指定控制和实施控制的手段。安全机制保护系统存储的信息(数据和代码)的完整性和计算机的物理资源,从而避免未经授权的访问、恶意破坏或修改以及意外引入的不一致。
案例研究。本书的第15章详细研究了Linux操作系统的实际案例。虽然本书前面章节也有Linux的讨论,但是案例研究提供了更多细节。
操作系统概念精要本书以2012年《操作系统概念》的第9版为蓝本,希望为读者提供一本强调当代操作系统基本概念的教科书。通过关注基本概念,我们相信,学生能够更轻松、更快速地掌握现代操作系统的基本特征。
为了做到这一点,本书删减了《操作系统概念》第9版的如下内容:
删除了深入讨论死锁的第7章,但是在第5章中概述了死锁。
删除了第17章“Windows 7”。
删除了第18章“有影响的操作系统”。
如果你希望更全面地学习操作系统,则可以参阅《操作系统概念》第9版。下面介绍本书所做的更新。
第2版在编写本书第2版时,我们考虑了影响操作系统的两个重要领域的新发展:
多核系统移动计算为了强调这两个重要领域的新发展,我们在新版本中融入了相关讨论。另外,我们几乎重写了每章内容以反映最新变化,并且删除不再有趣或有关的材料。
我们也做了大量调整,例如删除了实时系统一章,但在其他章节中整合了对这些系统的适当讨论;我们还重新安排了存储管理的相关章节,并将进程同步放在进程调度之前。大多数调整都是基于我们讲授操作系统课程的经验。
下面简要描述各章的主要修改:
第1章,导论,包括关于多处理器和多核系统以及内核数据结构的新内容。此外,计算环境的讨论现在包括移动系统和云计算。我们还增加了对实时系统的概述。
第2章,操作系统结构,增加了移动设备(包括iOS和Android)用户界面的讨论,并扩展了Mac OS X(一种混合系统)的讨论。
第3章,进程,现在包括移动操作系统的多任务讨论、Google Chrome浏览器的多进程模型支持以及UNIX的僵尸和孤儿进程。
第4章,线程,扩展了并行性和阿姆达尔定律的相关内容,也提供了关于隐式线程的小节,包括OpenMP和Apple的Grand Central Dispatch。
第5章,进程同步,增加了互斥锁、OpenMP以及函数式语言的同步讨论。
第6章,CPU调度,增加了Linux CFS调度器和Windows用户模式调度,还整合了实时调度算法的讨论。
第7章,内存,增加了移动系统以及Intel 32位和64位架构的内存交换的讨论,还增加新的一节讨论ARM架构。
第8章,虚拟内存,更新了内核内存管理,以包括Linux SLUB和SLOB内存分配器。
第9章,大容量存储结构,增加了固态磁盘的讨论。
第10章,文件系统接口,根据当前技术发展进行了更新。
第11章,文件系统实现,根据当前技术发展进行了更新。
第12章,IO系统,更新了技术与性能参数,扩展了同步异步和阻塞非阻塞IO的讨论,并增加了向量IO的内容。
第13章,保护,没有重大变化。
第14章,安全,采用现代符号修改了密码学的相关内容,并改进了对各种加密方法及其用途的描述,还增加了Windows 7的安全讨论。
第15章,Linux系统,增加了Linux 3.2内核的讨论。
编程环境本书使用许多操作系统的实际示例来说明操作系统的基本概念。虽然主要关注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和UNIXLinux,以及应用广泛的Java环境。大多数程序示例都是用C编写的,希望读者能够熟悉C语言。熟悉C语言和Java语言的读者,应该很容易理解本书的大多数程序。
在有些情况下,如线程创建,我们使用所有三个编程环境来说明特定概念,以便读者在处理相同任务时可以比较三种不同的库。在其他情况下,我们可能只使用一种API来演示概念。例如,我们只使用POSIX API来说明共享内存,使用Java API来解释TCPIP的套接字编程。
Linux虚拟机为了帮助学生更好地学习Linux系统,我们提供了Linux虚拟机及Linux源代码,可从本书支持网站(www.os-book.com)下载。该虚拟机还包括带有编译器和编辑器的gcc开发环境。本书的大部分编程作业可以在此虚拟机上完成,但是需要Java或Windows API的作业除外。
我们还提供了三个编程项目,以便通过内核模块修改Linux内核:
添加基本内核模块到Linux内核。
添加使用各种内核数据结构的内核模块。
添加迭代Linux系统任务的内核模块。
我们打算不断在支持网站上补充额外的内核模块作业。
支持网站本书支持网站www.os-book.com包括以下资源:
Linux虚拟机C与Java源代码教学大纲样例PPT插图集FreeBSD和Mach的案例研究各章的复习题实践题答案学生学习指南勘误表教师注意事项在本书网站上,我们提供多个教学大纲样例,用于采用本书的各种初级与高级课程。作为一般规律,我们鼓励教师按章节顺序进行教学,因为这会提供最透彻的操作系统研究路线。不过,通过大纲样例,教师可以选择不同的章节顺序(或章节内容)。
本版添加了60多道新的习题以及20多个新的编程题和编程项目。大多数新的编程作业涉及进程、线程、进程同步和内存管理。有些涉及添加内核模块到Linux系统,这可以采用本书附带的Linux虚拟机或其他适当的Linux发行版来完成。
对于采用本书来讲授操作系统的教师,可以获得每章复习题、习题和编程题的答案。要获得这些补充材料,请联系当地的John Wiley & Sons销售代表。
学生注意事项我们鼓励你利用好每章末尾的复习题和实践题,这些题目的答案可从网站www.os-book.com下载。我们也鼓励你阅读由我们的一位学生准备的学生学习指南。最后,对于不熟悉UNIX和Linux系统的学生,建议你下载并安装支持网站的Linux虚拟机。这不仅为你提供了新的计算体验,而且Linux的开放源码能帮助你轻松分析这个流行操作系统的内部细节。
祝你在学习操作系统的旅程中一切顺利。
联系我们我们努力消除本书的错误。然而,像新版的软件一样,错误几乎肯定存在。本书的网站提供了最新的勘误表。如果你能通知我们尚未出现在最新勘误表中的任何错误或遗漏,我们将不胜感激。
我们很乐意收到关于本书的改进建议。我们也欢迎任何可能对其他读者有用的材料,如编程题、项目建议、在线实验室和教程以及教学建议等。可发送邮件到os-book-authors@cs.yale.edu。
致谢本书源自以前的多个版本,其中前三个版本是与James Peterson合著的。帮助完成以前版本的人员包括:Hamid Arabnia、Rida Bazzi、Randy Bentson、David Black、Joseph Boykin、Jeff Brum鹐ld、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 Eskiciolu、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更新了第15章和全书Linux的描述,并回答了Android相关的许多问题。Jonathan Katz贡献了第14章。Salahuddin Khan更新了14.9节,以提供新的Windows 7安全功能。
第15章来自Stephen Tweedie的未发表手稿。Arvind Krishnamurthy提供了一些习题及其解答。Andrew DeNicola准备了我们网站上的学生学习指南。Marilyn Turnamian提供了一些幻灯片。
Mike Shapiro、Bryan Cantrill和Jim Mauro回答了多个Solaris相关的问题。Sun Micro-systems的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的协助下,她很好地管理了项目细节。高级制作编辑Joyce Poh处理了所有的成书细节。
Susan Cyr为封面绘画师,Madelyn Lesure为封面设计师。Beverly Peavler复制了手稿。Katrina Avery为自由校对员,WordCo,Inc.为自由索引公司。
Abraham Silberschatz, New Haven, CT, 2013Peter Baer Galvin, Boston, MA, 2013Greg Gagne, Salt Lake City, UT, 2013
|
|