操作系统:现代观点(原书第2版· 实验更新版)
作者 : (美)Gary Nutt
译者 : 孟祥山 晏益慧
丛书名 : 计算机科学丛书
出版日期 : 2004-02-11
ISBN : 7-111-13530-X
定价 : 49.00元
教辅资源下载
扩展信息
语种 : 简体中文
页数 : 532
开本 : 16开
原书名 : Operating Systems A Modern Perspective, Lab Update
原出版社: Addison-Wesley
属性分类: 教材
包含CD :
绝版 : 已绝版
图书简介

本书通过各种实例来说明核心的操作系统概念,从而强调理论与实践之间的平衡。本书的特色在于对操作系统基本原理进行了完整的讨论,并补充有代码、算法和实现工具,并有实验练习来帮助加深全面理解。本书可适用于高等院校计算机专业教材,也可作为专业技术人员参考用书。

图书特色

图书前言

本书提供了对操作系统原理和实现的综合描述:
  ●分析练习(Analytic exercise)可鼓励大家思考有关操作系统的原理。
  ●示例(In the Hangar)部分表现了基本原理在UNIX家族和Windows操作系统中是如何被实际运用的。
  ●性能改善(Performance Tuning)部分解释了系统设计者们是如何利用基本原理获得更高的系统性能的。
  ●实验(Laboratory exercise)部分通过使用Windows和UNIX,让学生获得亲身体验。每个实验练习都从陈述一个问题开始,随后有背景知识部分以及解决问题的过程部分。背景知识部分是为获得对问题的综合理解以及建立一个解决方案而展开的详细讨论。解决问题的过程部分为解答问题提供了专门的指导。在前面的实验练习中,背景知识和解决方案设计的讨论要比后面练习中的更为全面。这使学生在解决前面的练习过程中能得到大量的帮助,而后面的每个练习能够锻炼他们的设计技能。

致学生
  操作系统是一个令人激动的软件领域,因为操作系统(OS)专家的设计对整个计算机的总体功能和性能都有着重要的影响。在首次学习操作系统时,理解所有操作系统的设计原理(principle)是很重要的,并且也要留意这些原理是如何在真正的操作系统中被实际运用的。本书的目标就是要提供一个操作系统原理的全面讨论,并补充有解决问题的算法、代码和实现工具,通过实验练习来帮助你对当代操作系统实践的理解。我已经试图通过在正文中讨论原理,并把大部分的实践材料放在补充讨论和实验练习中,从而把概念性内容与应用性内容区分开来。
  问题的核心在于概念性的内容中。很多操作系统原理可以使用形式化的(数学的)术语或者在非形式化的讨论进行描述。非形式化的描述相对容易阅读,但形式化的描述更为准确。例如,目录的一种非形式化的讨论可能解释为:“它是一个项列表,同时有各个项的定义说明。”然而形式化的描述可能指明目录是“一种机制 f,将某项 x 映射到该项的定义 f (x)”。第一种解释是直观的,而第二种集中于目录的逻辑描述。第一种描述表明目录是一个列表或表的实现,而第二种描述可接纳的实现方式范围可以从表到列表,到相关联的存储器,到数据库,到网络服务器等。非形式化的定义说明有如一部辞典,但形式化的定义说明还适用于编译器符号表。我的目标是解释一般的操作系统原理,将使你对如何设计操作系统有一个深入的理解。实现该目标最好使用形式化的描述来支持,因为它们集中于概念的逻辑目的上,而不是如何实现概念的一个例子。我在前面的章节中,使用非形式化的或专门的叙述来描述操作系统的概念,但随着阅读的深入,同时会逐渐增加形式化的讨论的次数。在第7章中你将会看到,关于调度的一些形式化的讨论与非形式化的讨论结合在一起,然后在第10章中关于死锁有了更多形式化的讨论,甚至在第12章虚拟存储器的讨论中又有了更多。概念的形式化的讨论中总是伴随有非形式化的讨论和示例。
  操作系统是围绕着性能问题进行设计的。然而,性能的详细讨论往往会使概念模糊。在这种情形下,我决定放弃进一步分析和讨论性能方面的理论,而偏向于对性能问题的一般非形式化的解释。这将鼓励你开发在性能问题上的直觉,因而你可以在以后再正式地学习它们。如果关于性能的评价恰好符合于概念的描述,那么我也会把它们包括在概念的讨论之中。然而,在这种情况下,性能问题对于理解原理就增加了一层难度,因此我把这些讨论放入到一个单独的性能改善(Performance Tuning)部分中,使它们与概念性的描述分离开来。
  如同我前面所提到的,使用真正操作系统代码进行实验,可以帮助你理解操作系统概念是如何在真正系统中实现的。同样我也提供了两种其他类型的资料,帮助你学习有关当前操作系统的实践:示例和实验练习。
  ●示例(In the Hangar)中的例子解释了概念是如何在UNIX、Linux、Windows或者其他的操作系统中被使用或实现的。很多示例中都有代码,包括代码的意图是为了让你领会一个操作系统中是如何实现理论原则的。其中的少数例子中含有完整的程序,它们已经被编译和执行过。然而,大多数的例子只是算法或者是对C编程语言中所使用技术的简单描述。这些简略的描述中故意省略了实现细节,但并不影响对算法的理解。当代码是一个实际的实现时,代码的上下文中应该交待明白,否则总是假定它是一个算法或技术的描述。我已经使用伪语言进行了实验描述,但学生和审阅者经常宁愿使用C。请留意用C的描述并非就是完整的实现。
  ●书中也包括有几个实验练习。每个练习中都提出一个问题,然后为你提供了解决问题所需要的全面的背景知识,以及帮助设计你的解决方案的一部分。这些练习使用了各种UNIX和Windows操作系统,将带给你有价值的实践经验。有一本关于Linux内部的配套书[Nutt, 2001]讲解UNIX系统的实现细节。如果使用Windows操作系统,也有一本关于Windows NT(也适应于Windows 2000)的Windows配套手册 [Nutt, 1999a]。
  对操作系统的研究一直是计算机科学中最富有挑战性和令人激动的一部分。我希望本书使得操作系统的复杂结构等变得容易理解,并且避免使其中简单的内容让人厌烦。祝你在操作系统的学习中好运,并且希望你比我所想像的更喜欢它。

在第2版中的改变
  本版采纳了第1版的读者提出的建设性批评意见。前一版中曾经将材料与原理相分离。我所收到的评论表明教师希望能将简单的例子与正文更好地结合起来。我已经去掉了第1版中所用的“In the Cockpit”中的例子,并且极大地减少了示例和性能改善部分中的例子数目。因为第1版中频繁的示例使得正文难以连续,因此省略了许多例子,在省略的例子中所出现的大多数内容都已经结合到正文中了。本书已经重新做了布局设计,因此保留在示例中的例子和性能改善部分中的讨论更容易与正文区别开来。
  第2章和第6章的内容被重新组织并且进行了修订。第2章的意图是让学生集中于使用进程和资源,尤其是概念上的应用。第6章是进程管理设计讨论的基础。现在重新编写的章节比第1版更加集中。
  第2版在内容上最有意义的改变是增加了实验练习。第1版中(以及其他概念性的操作系统教材)的一个缺点就是缺乏支持实验练习的资源。这常常迫使学生需要购买第二本书用于操作系统课程的实验部分。而第2版既包括有讲述操作系统概念的材料,又有说明操作系统实践的材料。

主题次序
  在综合考虑了对第1版的反馈意见、我个人进行操作系统教学的经验以及从其他教师那里得到的信息之后,我制定了本书的书写次序。相信这种次序对于学习是合乎逻辑的和有益的,正在并将逐渐被大多数操作系统教师所接受。
  每一章都是从内容概述开始的。你同样也可以查看一下每章后面的小结,来快速了解一下本章所讲述的内容。
  第1章到第4章的内容组成了重要的引论,它是操作系统学习的基础。教师可以自己决定相对快速地复习一下这部分内容,或指定它作为课外的阅读材料,尤其是在这部分内容已经在预修课程中涉及到的情况下。然而,在从第5章开始真正深入学习操作系统的内容之前,理解这部分内容是十分关键的。
  ●第1章说明了操作系统是如何迎合软件技术的。在早期的草稿中曾包括历史回顾这一部分,教师往往喜欢这样,但很多学生却觉得厌烦。所以我已经将它分散到各个部分中。
  ●第2章显示出了独特性,其中考虑了如何使用一个操作系统,尤其是如何使用多进程。增加这一章是根据我的教学经验,对于计算机科学专业大三或大四的学生而言,他们可能已经编写了相当多的单线程代码,但极少编写过或者学习过多线程软件。这一章就为了解这些新内容提供了一个快捷的机会。
  ●第3章描述了操作系统的基本组织结构,包括实现策略。
  ●第4章为进一步学习操作系统完成了知识准备—计算机组织结构。对于已经修过了计算机组织结构这门课的学生来说,第4章的前半部分是进行回顾,后半部分描述了中断,着重强调了对于操作系统关键的方面。
  第5章描述了设备管理,尤其是一般的技术、缓冲以及设备驱动程序。它试探性地完全就Linux设备驱动程序进行讨论。然而,此章的大部分还是集中从中断驱动I/O的意图的宏观角度以及一般组织结构展开讨论。对设备驱动程序的扩展讨论也是这样,其中有一个实际的Linux驱动程序例子可能略微缺乏普遍性。该章在考虑进程之前分析了设备,因为设备提供一种基本的物理并行例子,并且必须仔细地设计软件来控制并发运行。这也为进程管理提供了一个自然的引介。
  第6章到第10章致力于讨论进程管理。它们从基本的任务、进程的组织结构以及资源管理器(第6章)开始,到调度(第7章)、同步(第8章和第9章)以及死锁(第10章)的讨论。
  第11章涉及存储管理中的传统问题,而第12章讨论了采用虚拟存储器的存储管理器的当前方法。由于页式系统的普及性,大部分讨论都直接针对该技术。然而,依照存储技术的当前趋势,忽略段式将会是一个错误,因此该部分讨论中也涉及到了段式。不幸的是,健壮的段式系统的最好例子仍然是Multics系统(现在已经废弃不用了)。
  第13章描述了文件管理。对比操作系统书中的习惯做法,文件管理部分显得有些少,这是因为它不像进程管理和存储管理那样难以理解。在实验练习中提供了一种详细观察文件管理细节的手段。该部分讨论在第16章中又有所扩充,其中涉及到远程文件。
  第14章是对保护机制和安全策略的一般性讨论。虽然技术大多数恰好与文件、存储器以及其他资源有着密切联系,但有可能认为它应该属于进程管理的讨论范围。在大家熟悉了进程、存储器以及文件管理器后,可能更容易理解保护和安全的必要性。
  第15章到第17章介绍了支持分布式计算的技术。分布式计算是现代操作系统的一个主要方面,并且我强烈地感到在操作系统的所有介绍中都应该涵盖这个重要的问题。

致教师
  操作系统仍然是一门必修的计算机科学课程。然而现行的操作系统教材并不令我满意。我期望书中含有更多的原理。同时,我感到如果学生未经广泛的实验练习,那么原理将是难以接受的。如果说第1版中所描述的操作系统原理是我感到必要的部分,那么现在这一版中所增加的明确支持实践成分的内容,对于理解操作系统是非常重要的。
  本书的主要线索集中在操作系统的概念,通常使用了简要的示例来说明。“示例”和“性能改善”部分有更多扩展的例子和概念解释,通常是从实践角度对概念加以解释。如果你期望学生更好地理解操作系统的应用,那么你必须指定这些补充部分作为阅读材料。针对应用性内容有新的实验练习,它需要学生在一个UNIX并且(或者)Windows环境中来解决某个问题。这些练习的意图是让你使用单本书就可以教授概念性内容以及基本的实验。
  很多书是从进程管理方面的内容开始的。在我的班上,我发现提供第1章到第4章中所描述的这类内容的背景信息是必要的,尤其是在讲授第2章时,因为在学生们学习这门课之前,几乎没有人曾经使用过fork和exec这些函数(或者在非UNIX系统中的类似命令)。第2章中的实验练习让学生了解了基本的并发概念。
  我是从设备管理开始对操作系统的详细讨论的。虽然它遵循了操作系统的传统发展过程,但一开始你可能发现这种方法不常见。第4章对中断的讨论与第5章对设备管理的讨论存在着一种自然的连续性。这种方法为介绍执行的独立线程(在硬件和软件中)、并发以及同步提供了一个合理的基础。在学习完设备管理内容以后,会很自然地将这些思想应用于进程和资源管理、调度、同步以及死锁中。
  存储管理也是重要的,并且是教师通常想尽可能快地涉及到的另一个主题。我选择把它放在进程管理之后,然后进入到文件管理中。我还编写了保护和安全的基本内容,它们被排在学生已经有机会理解进程和各种资源(一般资源、存储器以及文件)的概念之后。
  任何当代操作系统必须能够(或者进化到)在分布式系统中运行。所有当前对于操作系统的研究都深深地受到了分布式操作系统的影响。在已经讨论了所有的传统主题之后,第15章到第17章中介绍了分布式操作系统。由于商业化系统和网络的特征,一个教师在操作系统课程中完全忽略这些主题将是玩忽职守的。在一个学期的课程中,我在这些内容上花费了两到三周的时间。
  最后,考虑到所有内容之间的逻辑性,我尽可能地把这些材料组织在一起,因此它可以满足每个教师的需求。在我的课程中所采用的组织结构在本书中得到了反映。然而,根据个人意愿打乱内容的组织次序也不会有什么特别的害处。
  今天,在因特网上ftp站点以及在万维网站点,有大量针对操作系统的可用信息。我希望你引导你的学生使用它们,因为此类站点内容更新频繁,我维护有一个网页,网址为:http://www.cs.colorado.edu/~nutt/osamp.html,其中保存有与操作系统相关信息的一个当前链接集合。如果你有某些资料与你的读者共享,那么请让我也知道(我的电子信箱为osamp@cs.colorado.edu),并且我将把它增加到我的网页中。期待您的提问、评论、意见以及建议(并且我将尽力接受你善意的批评 :-))。

关于实验环境
  商业化操作系统只有少数被广泛应用。虽然研究这些操作系统是有价值的,但在课堂中使用它们进行实验有很多实际的障碍。首先,商业化操作系统被定义得非常复杂,因为它们必须对商业应用提供全部的支持。使用此类复杂软件进行实验是不切实际的,因为有时难以领会特殊问题是如何在软件内被处理的。对代码的很小改变都可能对整个操作系统的运行产生不可预测的影响。其次,操作系统软件的开发公司有时享有明确的专利权保护。结果是,公司可能不愿意提供操作系统源代码给任何希望研究和学习系统的用户。
  在课堂中,我使用了两个方法来解决这个问题[Nutt, 1999b]:
  ●课程要基于真正操作系统的外部视点。这基本是ACM/IEEE 1991 课程推荐的方法。
  ●课程要基于某个“可管理的”操作系统的内部视点。
  我已经与很多操作系统教师讨论过这个问题(包括在1999年2月在新奥尔良举行的操作系统设计与实现会议中,与鸡尾酒会的嘉宾讨论过这个问题)。在本科操作系统课程中,选择合适的实验部分是一个普遍的难题。然而,在OSDI会议上,到会者一致同意操作系统的外部视点应该被用于最初的操作系统课程中。
  本书提供了研究Linux和Windows 2000的外部视点的材料。如果你想使用Windows 2000来进行外部视点的教学,配套的实验手册[Nutt, 1999a]为一个学期的课程提供了足够的练习。所有的实验练习都是让学生编写用户空间代码,从而可以对内核运行的方式获得专门的认识。在决定摒弃设备驱动程序练习后,我考虑采用“可崩溃的”实验设施。
  虽然一般都认可在课程的最初阶段教授操作系统的内核是非常困难的,不过仍然需要尽可能早地开设关于操作系统内核的课程。如果你决定教授一门操作系统内核课程—作为最初的或第二门课程,那么你的选择是有限制的。如果你想研究一个真正的操作系统,那么就会选择Linux或者FreeBSD,或选其他教学系统中的一个。另一本配套实验手册[Nutt, 2001]为一个学期课程提供了足够的内核实现材料。
 
  最后,在帮助我出版这本书的过程中,Addison-Wesley的编辑组以及几位自由作家顾问也付出了无法估量的精力。本书极大地受益于集体的努力。当然,任何可能存在的错误完全是我的责任。

Gary Nutt
美国科罗拉多州Boulder

作者简介

(美)Gary Nutt:Gary Nutt: Gary Nutt于1972年获得科罗拉多大学博士学位。之后,曾在施乐公司及贝尔实验室等多家公司工作过。1986年重回科罗拉多大学从事研发与教学。目前是该校计算机科学系教授以及Inktomi公司的首席科学家。他的研究领域主要集中在分布式系统,包括:操作系统、分布式程序设计。分布式虚拟机、存储系统、小型无线局域网络等。曾著有"Kernel Projects for Linux"。

译者简介

孟祥山 晏益慧:暂无简介

译者序

操作系统是计算机系统中的核心系统软件,它负责控制和管理整个系统的资源并组织用户协调使用这些资源,使计算机高效地工作。操作系统课程是计算机科学与技术专业的核心课程。随着计算机技术的发展以及各类嵌入式系统的广泛应用,其他相关专业也相继把操作系统作为一门重要的必修或选修课程。
  国内外操作系统的教材很多,大部分操作系统教材偏重理论学习,虽然有针对实用操作系统的结构和实现分析,但也是停留在描述上。本书提供了对操作系统原理的全面讨论,并补充有解决问题的算法、代码和实现工具说明,特别提供了在当代实用操作系统UNIX或Windows上的实验练习以加强读者对操作系统的实践。本书在讲授内容排序上也很独到,把设备管理排到前面,这是一个有益的尝试。美中不足的是没有对多机操作系统技术的专门描述。
  本书共分十八章,前四章为进入操作系统实质内容的学习打基础,第5章到第14章涉及操作系统各种资源管理、进程同步互斥及安全等基本内容,第15章到第17章描述了网络和分布式系统的概念与技术,最后给出了一些操作系统实例的结构描述。

译  者
国防科学与技术大学计算机学院
2003年11月

图书目录

出版者的话
专家指导委员会
译者序
前言
第1章  导言 1
1.1  计算机与软件 1
1.1.1  通常的系统软件 2
1.1.2  资源抽象 2
示例:磁盘设备抽象 3
1.1.3  资源共享 4
1.1.4  没有系统软件的计算机 6
1.2  操作系统策略 6
性能改善:多道程序系统 7
1.2.1  批处理系统 7
示例:批处理文件 9
1.2.2  分时系统 10
1.2.3  个人计算机和工作站 12
1.2.4  过程控制和实时系统 13
1.2.5  网络 14
1.2.6  当代操作系统的起源 14
示例:Linux的发展 15
示例:微软Windows家族操作系统 17
1.3  小结 18
1.4  习题 19
第2章  使用操作系统 21
2.1  计算的抽象模型 21
2.2  资源 21
2.2.1  文件 22
示例:POSIX文件 22
示例:Windows 文件 23
2.2.2  其他资源 26
2.3  进程 26
2.3.1  创建进程 28
示例:使用FORK、JOIN和 QUIT 29
示例:UNIX中创建进程 30
示例:Windows中创建进程 32
2.4  线程 33
示例:C线程 35
2.5  对象 35
2.6  小结 36
2.7  习题 36
实验:Shell程序 37
实验:一个多线程的Windows控制台应用程序 42
第3章  操作系统的组织结构 51
3.1  OS设计中的要素 51
3.1.1  性能 51
3.1.2  保护和安全 52
3.1.3  正确性 52
3.1.4  可维护性 53
3.1.5  商业化因素对操作系统的影响 53
3.1.6  标准和开放系统 54
3.2  基本功能 54
3.2.1  设备管理 55
3.2.2  进程和资源管理 55
3.2.3  存储管理 55
3.2.4  文件管理 56
3.2.5  功能模块组织结构 56
3.3  基本实现需考虑的因素 57
3.3.1  处理机模式 57
3.3.2  内核 58
3.3.3  请求获得操作系统服务 58
3.4  小结 60
3.5  习题 60
第4章  计算机组织结构 61
4.1  冯·诺依曼体系结构 61
4.2  中央处理器 63
4.2.1  算术逻辑功能单元 63
4.2.2  控制单元 64
4.3  存储器 66
性能改善:机器加速 67
性能改善:并行处理机 67
4.4  设备 68
4.4.1  一般设备特征 69
4.4.2  设备控制器 69
示例: 异步串行设备 70
4.4.3  设备驱动器 71
4.5  中断 72
4.6  模式转换:自陷指令 74
4.7  小结 75
4.8  习题 76
实验:内核计数器 78
第5章  设备管理 87
5.1  设备管理方法 87
5.1.1  I/O系统的组织结构 87
5.1.2  使用轮询的直接I/O 88
5.1.3  中断驱动I/O 89
性能改善:中断与轮询 91
5.1.4  存储映射I/O 92
5.1.5  直接内存访问(DMA) 93
性能改善:I/O与处理机的并行 94
5.2  缓冲 95
5.3  设备驱动程序 97
5.3.1  设备驱动程序接口 98
5.3.2  CPU与设备的交互作用 99
5.3.3  I/O性能优化 100
5.4  一些设备管理方法 100
5.4.1  串行通信 101
示例:UNIX的设备驱动程序 101
5.4.2  顺序访问的存储设备 102
5.4.3  随机存取设备 103
性能改善:旋转设备的访问优化 104
5.5  小结 108
5.6  习题 108
实验:软盘驱动器 109
第6章  进程管理 117
6.1  进程和资源的系统观点 117
6.1.1  进程模型实现 117
6.1.2  资源模型实现 119
6.2  初始化操作系统 119
6.3  进程地址空间 121
6.3.1  生成地址空间 121
6.3.2  载入程序 122
6.3.3  地址空间中一致性维护 122
6.4  进程抽象 123
6.4.1  进程控制块 124
6.4.2  进程状态图 124
6.5  资源抽象 125
6.6  进程层次结构 127
6.6.1  精炼化进程管理器 127
6.6.2  专用的资源分配策略 128
6.7  小结 129
6.8  习题 129
实验:观察OS的运行操作 130
第7章  调度 137
7.1  调度机制 137
7.1.1  进程调度机制 137
7.1.2  保存进程的上下文 138
7.1.3  自愿的CPU共享 139 
7.1.4  非自愿的CPU共享 141
7.1.5  性能 141
7.2  策略选择 142
7.2.1  分解一个进程成多个小进程 144
7.3  非剥夺式策略 145
7.3.1  先来先服务 145
性能改善:系统负载的近似表示 146
7.3.2  最短作业优先 147
性能改善:预测FCFS的等待时间 148
7.3.3  优先级调度 148
7.3.4  期限调度 150
7.4  剥夺式策略 150
7.4.1  轮转 151
7.4.2  多级队列 153
7.5  小结 154
7.6  习题 155
第8章  同步基本原理 159
8.1  进程的相互作用 159
示例:线性方程系统的解 160
8.1.1  临界区 161
8.1.2  死锁 164
8.2  进程协同 165
8.3  信号量 167
8.3.1  信号量操作的原理 168
示例:使用信号量的例子 169
8.3.2  应用中要考虑的因素 174
8.4  共享存储器的多处理机 177
8.5  小结 177
8.6  习题 177
实验:有限缓冲区问题 181
第9章  高级同步技术 187
9.1  可选的同步原语 187
9.1.1  AND同步 187
9.1.2  事件 188
示例:使用事件 189
示例:UNIX信号 190
示例:Windows 2000中的分派对象 191
9.2  管程 192
9.2.1 操作原理 192
9.2.2  条件变量 193
示例:使用管程的例子 195
9.2.3  应用管程的一些实际状况 198
9.3  进程间通信 199
9.3.1  信箱 200
9.3.2  消息传输协议 201
9.3.3  使用send和receive操作 201
示例:同步的IPC 202
9.3.4  延迟的消息拷贝 203
9.4  严格排序事件执行 203
9.5  小结 205
9.6  习题 205
实验:精炼Shell程序 207
第10章  死锁 211
10.1  背景 211
10.1.1  死锁预防 213
10.1.2  死锁避免 213
10.1.3  死锁检测和恢复 213
10.1.4  人工死锁管理 214
10.2  一个系统死锁模型 214
示例:单个资源类型 215
10.3  死锁预防 216
10.3.1  占有并等待 216
10.3.2  循环等待 218
10.3.3  允许剥夺 218
10.4  死锁避免 220
10.4.1  银行家算法 221
示例:使用银行家算法 222
10.5  死锁检测和恢复 224
10.5.1  连续可重用资源 224
10.5.2  可消费资源 228
10.5.3  一般资源系统 231
10.5.4  恢复 231
10.6  小结 232
10.7  习题 232
第11章  存储管理 235
11.1  基本知识 235
11.1.1  请求主存 235
11.1.2  将地址空间映射到内存 236
性能改善:使用存储层次结构减少访问时间 237
示例:地址绑定过程 238
11.1.3  用于数据结构的动态存储 241
11.2  内存分配 241
11.2.1  固定分区存储分配策略 242
11.2.2  可变分区存储分配策略 243
11.2.3  现代存储分配策略 245
性能改善:移动程序的开销 246
11.3  动态地址重定位 246
11.3.1  运行时界限检查 250
示例:扩充小地址空间 250
11.4  存储管理器策略 251
11.4.1  交换 251
11.4.2  虚拟内存 253
性能改善:使用高速缓存存储器 254
11.4.3  共享存储器的多处理机 255
11.5  小结 257
11.6  习题 257
第12章  虚拟内存 261
12.1  地址转换 261
12.1.1  地址空间映射 261
12.1.2  段式和页式 263
12.2  页式 263
12.2.1  虚拟地址转换 265
性能改善:页表实现 267
12.3  静态页面调度算法 268
12.3.1  取策略 268
12.3.2  请求调页算法 269
12.3.3  栈算法 272
12.3.4  实现LRU 273
性能改善:页面调度性能 274
12.4  动态页面调度算法 275
12.4.1  驻留集算法 275
示例:驻留集算法示例 277
12.4.2  驻留集算法实现 278
性能改善:利用分页实现IPC 279
示例:Windows 2000 虚拟存储器 280
示例:Linux 虚拟存储器 283
12.5  段式 284
12.5.1  地址转换 284
12.5.2  实现 286
示例:多段系统 288
12.6  小结 290
12.7  习题 291
第13章  文件管理 293
13.1  文件 293
13.1.1  低级文件 295
13.1.2  结构化文件 297
13.1.3  数据库管理系统 301
13.1.4  多媒体存储 302
13.2  低级文件实现 302
13.2.1  open和close操作 303
示例:UNIX中的open和close操作 303
13.2.2  块管理 305
示例:UNIX文件结构 307
13.2.3  读、写字节流 309
13.3  支持其他的存储抽象 311
13.3.1  结构化顺序文件 311
13.3.2  索引顺序文件 312
13.3.3  数据库管理系统 312
13.3.4  多媒体文档 312
13.4  存储映射(Memory-mapped)文件 313
示例:Windows 2000中的存储映射文件 313
13.5  目录 314
13.5.1  目录结构 315
示例:几个目录例子 316
13.6  目录实现 317
13.6.1  设备目录 317
13.6.2  文件目录 318
13.6.3  在层次目录中打开一个文件 318
13.6.4  安装可移动的文件系统 319
13.7  小结 319
13.8  习题 320
实验:一个简单的文件管理器 321
第14章  保护和安全 327
14.1  基本原理 327
14.1.1  策略和机制 328
14.1.2  策略和机制实现 328
14.1.3  认证机制 329
14.1.4  授权机制 329
14.1.5  加密 330
14.2  认证 331
14.2.1  用户认证 331
14.2.2  网上认证 331
示例:Kerberos网络认证方法 332
14.3  内部访问授权 334
14.3.1  一个资源保护的模型 334
14.3.2  改变保护状态 336
14.3.3  保护机制的开销 338
14.4  实现内部授权 338
14.4.1  保护域 338
14.4.2  实现访问矩阵 340
14.5  密码技术 343
14.6  小结 344
14.7  习题 345
第15章  网络 347
15.1  从计算机通信到网络 347
15.1.1  通信子网 348
15.1.2  网络通信协议 349
15.2  ISO的OSI网络体系结构模型 350
15.2.1  网络协议的演变 350
15.2.2  ISO的OSI模型 351
15.3  低层协议 353
15.3.1 物理层 354
性能改善:快速物理层 354
15.3.2  数据链路层 355
15.3.3  当代网络 356
15.4  网络层 358
15.4.1  寻址 359
15.4.2  路由 360
15.4.3  网络层的使用 361
15.5  传输层 361
15.5.1  通信端口 362
15.5.2  数据类型 362
15.5.3  可靠的通信 363
性能改善:数据报和虚电路 364
15.6  使用传输层 364
15.6.1  命名 364
示例:域名系统 366
15.6.2  客户-服务器模式 367
15.7  小结 369
15.8  习题 369
实验:使用TCP/IP协议 370
第16章  远程文件 379
16.1  通过网络共享信息 379
16.1.1  显式的文件复制系统 380
16.1.2  隐含的文件共享 381
16.1.3  远程辅存接口 382
16.1.4  工作分布 383
16.2  远程磁盘系统 384
16.2.1  远程磁盘操作 386
16.2.2  性能因素 386
16.2.3  可靠性 387
16.2.4  远程磁盘的未来 389
16.3  远程文件系统 390
16.3.1  通用的体系结构 390
16.3.2  块高速缓存 392
16.3.3  失效后的恢复 393
16.4  文件级高速缓存 397
示例:Andrew文件系统 397
示例:LOCUS文件系统 398
16.5  目录系统及其实现 400
16.5.1 文件名字 400
16.5.2 打开一个文件 401
16.6  小结 402
16.7  习题 403
第17章  分布式计算 405
17.1  分布的进程管理 405
17.1.1  分解工作 405
17.1.2  支持分解的计算 407
17.1.3  一般的进程管理 408
17.1.4  调度 408
性能改善:进程迁移和负载平衡 409
17.1.5  进程协同 409
17.2  消息传递 412
17.2.1  消息传递接口 413
17.2.2  计算范例 414
17.3  远程过程调用 415
17.3.1  RPC如何工作 416
17.3.2  实现RPC 416
17.4  分布式存储器管理 420
17.4.1  远程存储器 423
示例:分布式存储器的实例 423
17.4.2  分布式虚拟存储器 425
17.4.3  分布式对象 426
17.5  小结 427
17.6  习题 428
第18章  策略与实例 429
18.1  操作系统的组成及相互关系 429
18.2  一般性结构问题 430
18.2.1  软件的组织结构 431
18.2.2  管理分布式硬件 435
18.3  传统的UNIX内核 437
18.3.1  内核 437
18.3.2  一体化结构 438
18.3.3  结论 438
18.4  Linux内核 439
18.4.1  内核结构 439
18.4.2  进程和资源管理 442
18.4.3  存储管理器 446
18.4.4  文件管理 447
18.5  Choices:面向对象的操作系统 449
18.5.1  框架 449
18.5.2  使用框架实现存储管理器 449
18.5.3  结论 450
18.6  微软Windows操作系统 451
18.6.1  一般性体系结构 451
18.6.2  硬件抽象层(HAL) 453
18.6.3  NT内核 453
18.6.4  NT执行体 455
18.6.5  NT子系统 459
18.7  Mach操作系统 459
18.7.1  进程管理 460
18.7.2  消息传递 462
18.7.3  内存管理 464
18.7.4  结论 466
18.8  CHORUS操作系统 466
18.8.1  进程管理 467
18.8.2  进程间通信 468
18.8.3  内存管理 468
18.8.4  结论 468
18.9  小结 468
18.10  习题 469
术语表 471
参考文献 483
索引 487

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