现代操作系统(英文版·第4版)
作者 : [荷]安德鲁 S. 塔嫩鲍姆(Andrew S. Tanenbaum) 赫伯特·博斯(Herbert Bos) 著
丛书名 : 经典原版书库
出版日期 : 2017-10-20
ISBN : 978-7-111-58165-9
定价 : 139.00元
教辅资源下载
扩展信息
语种 : 英文
页数 : 1104
开本 : 16
原书名 : Modern Operating Systems,Fourth Edition
原出版社: Pearson Education Inc.
属性分类: 教材
包含CD :
绝版 :
图书简介

本书是操作系统的经典教材,不仅涵盖了操作系统原理中最为重要的进程、线程、存储管理、文件系统、I/O、死锁、接口设计等内容的讨论,而且将广为使用android、windows8系统作为案例进行讨论,同时书中涵盖了对安全、多处理器系统以及操作系统设计的讨论。本书针对移动互联时代对操作系统的要求和课程需求,调整和加入了很多读者急需的内容,适合作为高校计算机、软件工程等专业操作系统课程的教材,也适合从事相关工作的技术人员学习。

图书特色

本书是操作系统的经典教材。在这一版中,Tanenbaum教授力邀来自谷歌和微软的技术专家撰写关于Android和Windows 8的新章节,此外,还添加了云、虚拟化和安全等新技术的介绍。书中处处融会着作者对于设计与实现操作系统的各种技术的思考,他们的深刻洞察与清晰阐释使得本书脱颖而出且经久不衰。

第4版重要更新
新增一章讨论虚拟化和云,新增一节讲解Android操作系统,新增研究实例Windows 8。此外,安全方面还引入了攻击和防御技术的新知识。
习题更加丰富和灵活,这些题目不仅能考查读者对基本原理的理解,提高动手能力,更重要的是启发思考,在问题中挖掘操作系统的精髓。
每章的相关研究一节全部重写,参考文献收录了上一版推出后的233篇新论文,这些对于在该领域进行深入探索的读者而言非常有益。

作者简介
安德鲁 S. 塔嫩鲍姆(Andrew S. Tanenbaum) 阿姆斯特丹自由大学教授,荷兰皇家艺术与科学院教授。他撰写的计算机教材享誉全球,被翻译为20种语言在各国大学中使用。他开发的MINIX操作系统是一个开源项目,专注于高可靠性、灵活性及安全性。他曾赢得享有盛名的欧洲研究理事会卓越贡献奖,以及ACM和IEEE的诸多奖项。
赫伯特·博斯(Herbert Bos) 阿姆斯特丹自由大学教授。他是一名全方位的系统专家,尤其是在安全和UNIX方面。目前致力于系统与网络安全领域的研究,2011年因在恶意软件反向工程方面的贡献而获得ERC奖。

图书前言

本书的第4版与第3版有很大的不同。因为操作系统并非一成不变,所以书中随处可见许多为介绍新内容而做的细小改动。我们删除了有关多媒体操作系统的章节,主要是为了给新内容腾出空间,同时也避免此书的篇幅变得不可控。还删除了有关Windows Vista的章节,这是因为Vista的表现并没有达到微软公司的预期。同样被删除的还有Symbian章节,因为Symbian已不再被广泛使用。我们用Windows 8替换了Vista的内容,用Android替换了Symbian的内容。此外,我们还增加了关于虚拟化和云的章节。以下是有关各章节更改的概要。
第1章的很多地方都进行了大量的修改和更新,除增加了移动计算外,没有增加或删减主要章节。
第2章在删除一些过时内容的同时也增加了一些新内容。例如,增加了futex同步原语,还增加了一节介绍怎样通过读–复制–更新(Read-Copy-Update)的方式来避免锁定。
第3章更关注现代的硬件部件,而减少了对段和MULTICS的介绍。
第4章删除了有关CD-ROM的内容,因为它们已不常见。替代它们的是更加现代的解决方案(比如闪存盘)。不仅如此,我们还在讨论RAID时添加了6级RAID的内容。
第5章的内容做了很多改动,CRT和CD-ROM等过时设备的介绍被删掉了,同时加入了触摸屏等新技术。
第6章的内容基本没有改变,有关死锁的主题基本上是稳定的,并没有新的成果。
第7章是全新的,涵盖虚拟化和云等重要内容,并加入了一节有关VMware的内容作为案例。
第8章是对之前讨论的多处理机系统的更新。如今我们更加强调多核与众核系统,因为它们在过去的几年中变得愈发重要。高速缓存一致性近年来也已经成为一个重要问题,这里将会有所涉及。
第9章进行了大量修改和重新组织,增加了对缺陷代码、恶意软件进行探查和防御的新内容。对于空指针引用和缓冲区溢出等攻击行为提出了更详细的应对方法,并从攻击路径入手,详细论述了包含金丝雀(canary)保护、不执行(NX)位以及地址空间随机化在内的防御机制。
第10章有很大改变,除了对UNIX和Linux的内容进行更新外,还新增了有关Android操作系统的详细章节,该系统如今已广泛用于智能手机与平板电脑。
第11章在本书第3版中主要针对Windows Vista,然而这些内容已经被Windows 8尤其是Windows 8.1取代,本章介绍了有关Windows的最新内容。
第12章是对本书前一版本的第13章的修订。
第13章是一份全新的推荐阅读目录。此外,我们也对参考文献进行了更新,收录了本书第3版推出后发表的233篇新论文。
此外,每章末的相关研究部分完全重写了,以反映最新的操作系统研究成果。并且,所有章节都增加了新的习题。
本书提供了大量的教学辅助工具。针对教师的教学建议可以在如下网站上得到:www.pearsonhighered.com/tanenbaum。网站中包含幻灯片、学习操作系统的软件工具、学生实验、模拟程序以及许多有关操作系统课程的材料。
有很多人参与了本书第4版的编写工作。我要介绍的第一位同时也是最重要的一位,是来自阿姆斯特丹自由大学的Herbert Bos教授,他是本书的合著者。他是一名全方位的系统专家,尤其是在安全和UNIX方面,有他的帮助真是太好了。他编写了除以下所述内容之外的绝大部分新内容。
我们的编辑Tracy Johnson出色地完成了她的工作,像以往一样,她将所有零碎的东西整理在一起,解决了所有的麻烦,使得这项工作能够按时完成。我们同样为拥有一位长期合作的制作编辑而感到幸运,那就是Camille Trentacoste。多亏她在诸多方面的技巧,为我们节省了很多时间。我们很高兴在许多年之后又能有她的加入。Carole Snyder在本书编写过程中出色地完成了协调工作。
第7章中有关VMware的内容(7.12节)是由Edouard Bugnion完成的,他来自洛桑联邦理工学院(EPFL)。Edouard是VMware公司的创始人之一,他比其他人更了解VMware,我们感谢他所提供的巨大支持。
佐治亚理工学院的Ada Gavrilovska 是Linux内核专家,她帮忙更新了第10章的内容。第10章中有关Android的内容是由来自Google的Android系统核心工程师Dianne Hackborn编写的。Android现在是智能手机的主要操作系统,所以我们非常感谢Dianne所提供的帮助。如今第10章篇幅较长并且十分详细,UNIX、Linux和Android的粉丝们都能从中学到很多。值得一提的是,本书中最长并且最有技术含量的章节是由两位女士所写的,而我们只是完成了其余容易的工作。
然而,我们并没有忽略Windows。Microsoft的Dave Probert更新了上版中第11章的内容,这一版将详细讲解Windows 8.1。Dave拥有完备的Windows知识及足够的远见,可以辨别出微软正确的地方和错误的地方。Windows的粉丝们肯定会喜欢这一章。
这本书由于所有这些专家所做出的贡献而变得更好,所以再一次感谢他们的宝贵帮助。
同样令我们感到幸运的是,我们拥有那么多阅读过原稿并提出建议的评论者,他们是Trudy Levine、Shivakant Mishra、Krishna Sivalingam以及Ken Wong。Steve Armstrong为将本书作为教材的教师制作了PPT。
通常来说,文字编辑和校对员并不具备充足的操作系统专业知识,但是Bob Lentz(文字编辑)和Joe Ruddick(校对员)却非常专业。Joe有一个很特别的本事,他能从20米之外看出罗马字体与斜体的差别。尽管如此,我们这些作者将对书中所有残留的错误负责,读者若看到任何错误都可以联系作者中的任何一位。
放在最后但并非是最不重要的,Barbara和Marvin还是那么出众,一如既往地独一无二。Daniel和Matilde是我们家庭中伟大的新成员。Aron和Nathan是很有意思的小家伙,Olivia对我们来说是珍宝。当然了,我要感谢Suzanne一直以来的爱和耐心,感谢你带来的那些sinaasappelsap(荷兰语,橙汁)、druiven(荷兰语,葡萄)和 kersen(荷兰语,樱桃),以及所有的新鲜果蔬。(AST)
最重要的一点,我要感谢Marieke、Duko和Jip。感谢Marieke一直以来的关爱,还有忍受我为了此书而没日没夜地工作。感谢Duko和Jip将我从工作中拽出来,并让我知道生活中还有更重要的事情,比如《Minecraft》。(HB)

Andrew S. Tanenbaum
Herbert Bos

上架指导

计算机\操作系统

封底文字

【同中文版57369】

本书是操作系统的经典教材。在这一版中,Tanenbaum教授力邀来自谷歌和微软的技术专家撰写关于Android和Windows 8的新章节,此外,还添加了云、虚拟化和安全等新技术的介绍。书中处处融会着作者对于设计与实现操作系统的各种技术的思考,他们的深刻洞察与清晰阐释使得本书脱颖而出且经久不衰。

第4版重要更新
·新增一章讨论虚拟化和云,新增一节讲解Android操作系统,新增研究实例Windows 8。此外,安全方面还引入了攻击和防御技术的新知识。
·习题更加丰富和灵活,这些题目不仅能考查读者对基本原理的理解,提高动手能力,更重要的是启发思考,在问题中挖掘操作系统的精髓。
·每章的相关研究一节全部重写,参考文献收录了上一版推出后的233篇新论文,这些对于在该领域进行深入探索的读者而言非常有益。

作者简介

[荷]安德鲁 S. 塔嫩鲍姆(Andrew S. Tanenbaum) 赫伯特·博斯(Herbert Bos) 著:
安德鲁 S. 塔嫩鲍姆(Andrew S. Tanenbaum) 阿姆斯特丹自由大学教授,荷兰皇家艺术与科学院教授。他撰写的计算机教材享誉全球,被翻译为20种语言在各国大学中使用。他开发的MINIX操作系统是一个开源项目,专注于高可靠性、灵活性及安全性。他曾赢得享有盛名的欧洲研究理事会卓越贡献奖,以及ACM和IEEE的诸多奖项。 赫伯特·博斯(Herbert Bos) 阿姆斯特丹自由大学教授。他是一名全方位的系统专家,尤其是在安全和UNIX方面。目前致力于系统与网络安全领域的研究,2011年因在恶意软件反向工程方面的贡献而获得ERC奖。

图书目录

CONTENTS

PREFACE xxiii
1 INTRODUCTION 1
1.1 WHAT IS AN OPERATING SYSTEM 3
1.1.1 The Operating System as an Extended Machine 4
1.1.2 The Operating System as a Resource Manager 5
1.2 HISTORY OF OPERATING SYSTEMS 6
1.2.1 The First Generation (1945–55): Vacuum Tubes 7
1.2.2 The Second Generation (1955–65): Transistors and Batch Systems 8
1.2.3 The Third Generation (1965–1980): ICs and Multiprogramming 9
1.2.4 The Fourth Generation (1980–Present): Personal Computers 14
1.2.5 The Fifth Generation (1990–Present): Mobile Computers 19
1.3 COMPUTER HARDWARE REVIEW 20
1.3.1 Processors 21
1.3.2 Memory 24
1.3.3 Disks 27
1.3.4 I/O Devices 28
1.3.5 Buses 31
1.3.6 Booting the Computer 34
1.4 THE OPERATING SYSTEM ZOO 35
1.4.1 Mainframe Operating Systems 35
1.4.2 Server Operating Systems 35
1.4.3 Multiprocessor Operating Systems 36
1.4.4 Personal Computer Operating Systems 36
1.4.5 Handheld Computer Operating Systems 36
1.4.6 Embedded Operating Systems 36
1.4.7 Sensor-Node Operating Systems 37
1.4.8 Real-Time Operating Systems 37
1.4.9 Smart Card Operating Systems 38
1.5 OPERATING SYSTEM CONCEPTS 38
1.5.1 Processes 39
1.5.2 Address Spaces 41
1.5.3 Files 41
1.5.4 Input/Output 45
1.5.5 Protection 45
1.5.6 The Shell 45
1.5.7 Ontogeny Recapitulates Phylogeny 46
1.6 SYSTEM CALLS 50
1.6.1 System Calls for Process Management 53
1.6.2 System Calls for File Management 56
1.6.3 System Calls for Directory Management 57
1.6.4 Miscellaneous System Calls 59
1.6.5 The Windows Win32 API 60
1.7 OPERATING SYSTEM STRUCTURE 62
1.7.1 Monolithic Systems 62
1.7.2 Layered Systems 63
1.7.3 Microkernels 65
1.7.4 Client-Server Model 68
1.7.5 Virtual Machines 68
1.7.6 Exokernels 72
1.8 THE WORLD ACCORDING TO C 73
1.8.1 The C Language 73
1.8.2 Header Files 74
1.8.3 Large Programming Projects 75
1.8.4 The Model of Run Time 76
1.9 RESEARCH ON OPERATING SYSTEMS 77
1.10 OUTLINE OF THE REST OF THIS BOOK 78
1.11 METRIC UNITS 79
1.12 SUMMARY 80
2 PROCESSES AND THREADS 85
2.1 PROCESSES 85
2.1.1 The Process Model 86
2.1.2 Process Creation 88
2.1.3 Process Termination 90
2.1.4 Process Hierarchies 91
2.1.5 Process States 92
2.1.6 Implementation of Processes 94
2.1.7 Modeling Multiprogramming 95
2.2 THREADS 97
2.2.1 Thread Usage 97
2.2.2 The Classical Thread Model 102
2.2.3 POSIX Threads 106
2.2.4 Implementing Threads in User Space 108
2.2.5 Implementing Threads in the Kernel 111
2.2.6 Hybrid Implementations 112
2.2.7 Scheduler Activations 113
2.2.8 Pop-Up Threads 114
2.2.9 Making Single-Threaded Code Multithreaded 115
2.3 INTERPROCESS COMMUNICATION 119
2.3.1 Race Conditions 119
2.3.2 Critical Regions 121
2.3.3 Mutual Exclusion with Busy Waiting 121
2.3.4 Sleep and Wakeup 127
2.3.5 Semaphores 130
2.3.6 Mutexes 132
2.3.7 Monitors 137
2.3.8 Message Passing 144
2.3.9 Barriers 146
2.3.10 Avoiding Locks: Read-Copy-Update 148
2.4 SCHEDULING 148
2.4.1 Introduction to Scheduling 149
2.4.2 Scheduling in Batch Systems 156
2.4.3 Scheduling in Interactive Systems 158
2.4.4 Scheduling in Real-Time Systems 164
2.4.5 Policy Versus Mechanism 165
2.4.6 Thread Scheduling 165
2.5 CLASSICAL IPC PROBLEMS 167
2.5.1 The Dining Philosophers Problem 167
2.5.2 The Readers and Writers Problem 169
2.6 RESEARCH ON PROCESSES AND THREADS 172
2.7 SUMMARY 173
3 MEMORY MANAGEMENT 181
3.1 NO MEMORY ABSTRACTION 182
3.2 A MEMORY ABSTRACTION: ADDRESS SPACES 185
3.2.1 The Notion of an Address Space 185
3.2.2 Swapping 187
3.2.3 Managing Free Memory 190
3.3 VIRTUAL MEMORY 194
3.3.1 Paging 195
3.3.2 Page Tables 198
3.3.3 Speeding Up Paging 201
3.3.4 Page Tables for Large Memories 205
3.4 PAGE REPLACEMENT ALGORITHMS 209
3.4.1 The Optimal Page Replacement Algorithm 209
3.4.2 The Not Recently Used Page Replacement Algorithm 210
3.4.3 The First-In, First-Out (FIFO) Page Replacement Algorithm 211
3.4.4 The Second-Chance Page Replacement Algorithm 211
3.4.5 The Clock Page Replacement Algorithm 212
3.4.6 The Least Recently Used (LRU) Page Replacement Algorithm 213
3.4.7 Simulating LRU in Software 214
3.4.8 The Working Set Page Replacement Algorithm 215
3.4.9 The WSClock Page Replacement Algorithm 219
3.4.10 Summary of Page Replacement Algorithms 221
3.5 DESIGN ISSUES FOR PAGING SYSTEMS 222
3.5.1 Local versus Global Allocation Policies 222
3.5.2 Load Control 225
3.5.3 Page Size 225
3.5.4 Separate Instruction and Data Spaces 227
3.5.5 Shared Pages 228
3.5.6 Shared Libraries 229
3.5.7 Mapped Files 231
3.5.8 Cleaning Policy 232
3.5.9 Virtual Memory Interface 232
3.6 IMPLEMENTATION ISSUES 233
3.6.1 Operating System Involvement with Paging 233
3.6.2 Page Fault Handling 234
3.6.3 Instruction Backup 235
3.6.4 Locking Pages in Memory 236
3.6.5 Backing Store 237
3.6.6 Separation of Policy and Mechanism 239
3.7 SEGMENTATION 240
3.7.1 Implementation of Pure Segmentation 243
3.7.2 Segmentation with Paging: MULTICS 243
3.7.3 Segmentation with Paging: The Intel x86 247
3.8 RESEARCH ON MEMORY MANAGEMENT 252
3.9 SUMMARY 253
4 FILE SYSTEMS 263
4.1 FILES 265
4.1.1 File Naming 265
4.1.2 File Structure 267
4.1.3 File Types 268
4.1.4 File Access 269
4.1.5 File Attributes 271
4.1.6 File Operations 271
4.1.7 An Example Program Using File-System Calls 273
4.2 DIRECTORIES 276
4.2.1 Single-Level Directory Systems 276
4.2.2 Hierarchical Directory Systems 276
4.2.3 Path Names 277
4.2.4 Directory Operations 280
4.3 FILE-SYSTEM IMPLEMENTATION 281
4.3.1 File-System Layout 281
4.3.2 Implementing Files 282
4.3.3 Implementing Directories 287
4.3.4 Shared Files 290
4.3.5 Log-Structured File Systems 293
4.3.6 Journaling File Systems 294
4.3.7 Virtual File Systems 296
4.4 FILE-SYSTEM MANAGEMENT AND OPTIMIZATION 299
4.4.1 Disk-Space Management 299
4.4.2 File-System Backups 306
4.4.3 File-System Consistency 312
4.4.4 File-System Performance 314
4.4.5 Defragmenting Disks 319
4.5 EXAMPLE FILE SYSTEMS 320
4.5.1 The MS-DOS File System 320
4.5.2 The UNIX V7 File System 323
4.5.3 CD-ROM File Systems 325
4.6 RESEARCH ON FILE SYSTEMS 331
4.7 SUMMARY 332
5 INPUT/OUTPUT 337
5.1 PRINCIPLES OF I/O HARDWARE 337
5.1.1 I/O Devices 338
5.1.2 Device Controllers 339
5.1.3 Memory-Mapped I/O 340
5.1.4 Direct Memory Access 344
5.1.5 Interrupts Revisited 347
5.2 PRINCIPLES OF I/O SOFTWARE 351
5.2.1 Goals of the I/O Software 351
5.2.2 Programmed I/O 352
5.2.3 Interrupt-Driven I/O 354
5.2.4 I/O Using DMA 355
5.3 I/O SOFTWARE LAYERS 356
5.3.1 Interrupt Handlers 356
5.3.2 Device Drivers 357
5.3.3 Device-Independent I/O Software 361
5.3.4 User-Space I/O Software 367
5.4 DISKS 369
5.4.1 Disk Hardware 369
5.4.2 Disk Formatting 375
5.4.3 Disk Arm Scheduling Algorithms 379
5.4.4 Error Handling 382
5.4.5 Stable Storage 385
5.5 CLOCKS 388
5.5.1 Clock Hardware 388
5.5.2 Clock Software 389
5.5.3 Soft Timers 392
5.6 USER INTERFACES: KEYBOARD, MOUSE, MONITOR 394
5.6.1 Input Software 394
5.6.2 Output Software 399
5.7 THIN CLIENTS 416
5.8 POWER MANAGEMENT 417
5.8.1 Hardware Issues 418
5.8.2 Operating System Issues 419
5.8.3 Application Program Issues 425
5.9 RESEARCH ON INPUT/OUTPUT 426
5.10 SUMMARY 428
6 DEADLOCKS 435
6.1 RESOURCES 436
6.1.1 Preemptable and Nonpreemptable Resources 436
6.1.2 Resource Acquisition 437
6.2 INTRODUCTION TO DEADLOCKS 438
6.2.1 Conditions for Resource Deadlocks 439
6.2.2 Deadlock Modeling 440
6.3 THE OSTRICH ALGORITHM 443
6.4 DEADLOCK DETECTION AND RECOVERY 443
6.4.1 Deadlock Detection with One Resource of Each Type 444
6.4.2 Deadlock Detection with Multiple Resources of Each Type 446
6.4.3 Recovery from Deadlock 448
6.5 DEADLOCK AVOIDANCE 450
6.5.1 Resource Trajectories 450
6.5.2 Safe and Unsafe States 452
6.5.3 The Banker’s Algorithm for a Single Resource 453
6.5.4 The Banker’s Algorithm for Multiple Resources 454
6.6 DEADLOCK PREVENTION 456
6.6.1 Attacking the Mutual-Exclusion Condition 456
6.6.2 Attacking the Hold-and-Wait Condition 456
6.6.3 Attacking the No-Preemption Condition 457
6.6.4 Attacking the Circular Wait Condition 457
6.7 OTHER ISSUES 458
6.7.1 Two-Phase Locking 458
6.7.2 Communication Deadlocks 459
6.7.3 Livelock 461
6.7.4 Starvation 463
6.8 RESEARCH ON DEADLOCKS 464
6.9 SUMMARY 464
7 VIRTUALIZATION AND THE CLOUD 471
7.1 HISTORY 473
7.2 REQUIREMENTS FOR VIRTUALIZATION 474
7.3 TYPE 1 AND TYPE 2 HYPERVISORS 477
7.4 TECHNIQUES FOR EFFICIENT VIRTUALIZATION 478
7.4.1 Virtualizing the Unvirtualizable 479
7.4.2 The Cost of Virtualization 482
7.5 ARE HYPERVISORS MICROKERNELS DONE RIGHT 483
7.6 MEMORY VIRTUALIZATION 486
7.7 I/O VIRTUALIZATION 490
7.8 VIRTUAL APPLIANCES 493
7.9 VIRTUAL MACHINES ON MULTICORE CPUS 494
7.10 LICENSING ISSUES 494
7.11 CLOUDS 495
7.11.1 Clouds as a Service 496
7.11.2 Virtual Machine Migration 496
7.11.3 Checkpointing 497
7.12 CASE STUDY: VMWARE 498
7.12.1 The Early History of VMware 498
7.12.2 VMware Workstation 499
7.12.3 Challenges in Bringing Virtualization to the x86 500
7.12.4 VMware Workstation: Solution Overview 502
7.12.5 The Evolution of VMware Workstation 511
7.12.6 ESX Server: VMware’s type 1 Hypervisor 512
7.13 RESEARCH ON VIRTUALIZATION AND THE CLOUD 514
8 MULTIPLE PROCESSOR SYSTEMS 517
8.1 MULTIPROCESSORS 520
8.1.1 Multiprocessor Hardware 520
8.1.2 Multiprocessor Operating System Types 530
8.1.3 Multiprocessor Synchronization 534
8.1.4 Multiprocessor Scheduling 539
8.2 MULTICOMPUTERS 544
8.2.1 Multicomputer Hardware 545
8.2.2 Low-Level Communication Software 550
8.2.3 User-Level Communication Software 552
8.2.4 Remote Procedure Call 556
8.2.5 Distributed Shared Memory 558
8.2.6 Multicomputer Scheduling 563
8.2.7 Load Balancing 563
8.3 DISTRIBUTED SYSTEMS 566
8.3.1 Network Hardware 568
8.3.2 Network Services and Protocols 571
8.3.3 Document-Based Middleware 576
8.3.4 File-System-Based Middleware 577
8.3.5 Object-Based Middleware 582
8.3.6 Coordination-Based Middleware 584
8.4 RESEARCH ON MULTIPLE PROCESSOR SYSTEMS 587
8.5 SUMMARY 588
9 SECURITY 593
9.1 THE SECURITY ENVIRONMENT 595
9.1.1 Threats 596
9.1.2 Attackers 598
9.2 OPERATING SYSTEMS SECURITY 599
9.2.1 Can We Build Secure Systems 600
9.2.2 Trusted Computing Base 601
9.3 CONTROLLING ACCESS TO RESOURCES 602
9.3.1 Protection Domains 602
9.3.2 Access Control Lists 605
9.3.3 Capabilities 608
9.4 FORMAL MODELS OF SECURE SYSTEMS 611
9.4.1 Multilevel Security 612
9.4.2 Covert Channels 615
9.5 BASICS OF CRYPTOGRAPHY 619
9.5.1 Secret-Key Cryptography 620
9.5.2 Public-Key Cryptography 621
9.5.3 One-Way Functions 622
9.5.4 Digital Signatures 622
9.5.5 Trusted Platform Modules 624
9.6 AUTHENTICATION 626
9.6.1 Authentication Using a Physical Object 633
9.6.2 Authentication Using Biometrics 636
9.7 EXPLOITING SOFTWARE 639
9.7.1 Buffer Over.ow Attacks 640
9.7.2 Format String Attacks 649
9.7.3 Dangling Pointers 652
9.7.4 Null Pointer Dereference Attacks 653
9.7.5 Integer Over.ow Attacks 654
9.7.6 Command Injection Attacks 655
9.7.7 Time of Check to Time of Use Attacks 656
9.8 INSIDER ATTACKS 657
9.8.1 Logic Bombs 657
9.8.2 Back Doors 658
9.8.3 Login Spoo.ng 659
9.9 MALWARE 660
9.9.1 Trojan Horses 662
9.9.2 Viruses 664
9.9.3 Worms 674
9.9.4 Spyware 676
9.9.5 Rootkits 680
9.10 DEFENSES 684
9.10.1 Firewalls 685
9.10.2 Antivirus and Anti-Antivirus Techniques 687
9.10.3 Code Signing 693
9.10.4 Jailing 694
9.10.5 Model-Based Intrusion Detection 695
9.10.6 Encapsulating Mobile Code 697
9.10.7 Java Security 701
9.11 RESEARCH ON SECURITY 703
9.12 SUMMARY 704
10 CASE STUDY 1: UNIX, LINUX, AND ANDROID 713
10.1 HISTORY OF UNIX AND LINUX 714
10.1.1 UNICS 714
10.1.2 PDP-11 UNIX 715
10.1.3 Portable UNIX 716
10.1.4 Berkeley UNIX 717
10.1.5 Standard UNIX 718
10.1.6 MINIX 719
10.1.7 Linux 720
10.2 OVERVIEW OF LINUX 723
10.2.1 Linux Goals 723
10.2.2 Interfaces to Linux 724
10.2.3 The Shell 725
10.2.4 Linux Utility Programs 728
10.2.5 Kernel Structure 730
10.3 PROCESSES IN LINUX 733
10.3.1 Fundamental Concepts 733
10.3.2 Process-Management System Calls in Linux 735
10.3.3 Implementation of Processes and Threads in Linux 739
10.3.4 Scheduling in Linux 746
10.3.5 Booting Linux 751
10.4 MEMORY MANAGEMENT IN LINUX 753
10.4.1 Fundamental Concepts 753
10.4.2 Memory Management System Calls in Linux 756
10.4.3 Implementation of Memory Management in Linux 758
10.4.4 Paging in Linux 764
10.5 INPUT/OUTPUT IN LINUX 767
10.5.1 Fundamental Concepts 767
10.5.2 Networking 769
10.5.3 Input/Output System Calls in Linux 770
10.5.4 Implementation of Input/Output in Linux 771
10.5.5 Modules in Linux 774
10.6 THE LINUX FILE SYSTEM 775
10.6.1 Fundamental Concepts 775
10.6.2 File-System Calls in Linux 780
10.6.3 Implementation of the Linux File System 783
10.6.4 NFS: The Network File System 792
10.7 SECURITY IN LINUX 798
10.7.1 Fundamental Concepts 798
10.7.2 Security System Calls in Linux 800
10.7.3 Implementation of Security in Linux 801
10.8 ANDROID 802
10.8.1 Android and Google 803
10.8.2 History of Android 803
10.8.3 Design Goals 807
10.8.4 Android Architecture 809
10.8.5 Linux Extensions 810
10.8.6 Dalvik 814
10.8.7 Binder IPC 815
10.8.8 Android Applications 824
10.8.9 Intents 836
10.8.10 Application Sandboxes 837
10.8.11 Security 838
10.8.12 Process Model 844
10.9 SUMMARY 848
11 CASE STUDY 2: WINDOWS 8
11.1 HISTORY OF WINDOWS THROUGH WINDOWS 8.1 857
11.1.1 1980s: MS-DOS 857
11.1.2 1990s: MS-DOS-based Windows 859
11.1.3 2000s: NT-based Windows 859
11.1.4 Windows Vista 862
11.1.5 2010s: Modern Windows 863
11.2 PROGRAMMING WINDOWS 864
11.2.1 The Native NT Application Programming Interface 867
11.2.2 The Win32 Application Programming Interface 871
11.2.3 The Windows Registry 875
11.3 SYSTEM STRUCTURE 877
11.3.1 Operating System Structure 877
11.3.2 Booting Windows 893
11.3.3 Implementation of the Object Manager 894
11.3.4 Subsystems, DLLs, and User-Mode Services 905
11.4 PROCESSES AND THREADS IN WINDOWS 908
11.4.1 Fundamental Concepts 908
11.4.2 Job, Process, Thread, and Fiber Management API Calls 914
11.4.3 Implementation of Processes and Threads 919
11.5 MEMORY MANAGEMENT 927
11.5.1 Fundamental Concepts 927
11.5.2 Memory-Management System Calls 931
11.5.3 Implementation of Memory Management 932
11.6 CACHING IN WINDOWS 942
11.7 INPUT/OUTPUT IN WINDOWS 943
11.7.1 Fundamental Concepts 944
11.7.2 Input/Output API Calls 945
11.7.3 Implementation of I/O 948
11.8 THE WINDOWS NT FILE SYSTEM 952
11.8.1 Fundamental Concepts 953
11.8.2 Implementation of the NT File System 954
11.9 WINDOWS POWER MANAGEMENT 964
11.10 SECURITY IN WINDOWS 8 966
11.10.1 Fundamental Concepts 967
11.10.2 Security API Calls 969
11.10.3 Implementation of Security 970
11.10.4 Security Mitigations 972
11.11 SUMMARY 975
12 OPERATING SYSTEM DESIGN 981
12.1 THE NATURE OF THE DESIGN PROBLEM 982
12.1.1 Goals 982
12.1.2 Why Is It Hard to Design an Operating System 983
12.2 INTERFACE DESIGN 985
12.2.1 Guiding Principles 985
12.2.2 Paradigms 987
12.2.3 The System-Call Interface 991
12.3 IMPLEMENTATION 993
12.3.1 System Structure 993
12.3.2 Mechanism vs. Policy 997
12.3.3 Orthogonality 998
12.3.4 Naming 999
12.3.5 Binding Time 1001
12.3.6 Static vs. Dynamic Structures 1001
12.3.7 Top-Down vs. Bottom-Up Implementation 1003
12.3.8 Synchronous vs. Asynchronous Communication 1004
12.3.9 Useful Techniques 1005
12.4 PERFORMANCE 1010
12.4.1 Why Are Operating Systems Slow 1010
12.4.2 What Should Be Optimized 1011
12.4.3 Space-Time Trade-offs 1012
12.4.4 Caching 1015
12.4.5 Hints 1016
12.4.6 Exploiting Locality 1016
12.4.7 Optimize the Common Case 1017
12.5 PROJECT MANAGEMENT 1018
12.5.1 The Mythical Man Month 1018
12.5.2 Team Structure 1019
12.5.3 The Role of Experience 1021
12.5.4 No Silver Bullet 1021
12.6 TRENDS IN OPERATING SYSTEM DESIGN 1022
12.6.1 Virtualization and the Cloud 1023
12.6.2 Manycore Chips 1023
12.6.3 Large-Address-Space Operating Systems 1024
12.6.4 Seamless Data Access 1025
12.6.5 Battery-Powered Computers 1025
12.6.6 Embedded Systems 1026
12.7 SUMMARY 1027
13 READING LIST AND BIBLIOGRAPHY 1031
13.1 SUGGESTIONS FOR FURTHER READING 1031
13.1.1 Introduction 1031
13.1.2 Processes and Threads 1032
13.1.3 Memory Management 1033
13.1.4 File Systems 1033
13.1.5 Input/Output 1034
13.1.6 Deadlocks 1035
13.1.7 Virtualization and the Cloud 1035
13.1.8 Multiple Processor Systems 1036
13.1.9 Security 1037
13.1.10 Case Study 1: UNIX, Linux, and Android 1039
13.1.11 Case Study 2: Windows 8 1040
13.1.12 Operating System Design 1040
13.2 ALPHABETICAL BIBLIOGRAPHY 1041
INDEX 1071

第1章 引论 1
1.1 什么是操作系统 3
1.1.1 作为扩展机器的操作系统 4
1.1.2 作为资源管理者的操作系统 5
1.2 操作系统的历史 6
1.2.1 第一代(1945~1955):真空管和穿孔卡片 7
1.2.2 第二代(1955~1965):晶体管和批处理系统 8
1.2.3 第三代(1965~1980):集成电路和多道程序设计 9
1.2.4 第四代(1980年至今):个人计算机 14
1.2.5 第五代(1990年至今):移动计算机 19
1.3 计算机硬件简介 20
1.3.1 处理器 21
1.3.2 存储器 24
1.3.3 磁盘 27
1.3.4 I/O设备 28
1.3.5 总线 31
1.3.6 启动计算机 34
1.4 操作系统大观园 35
1.4.1 大型机操作系统 35
1.4.2 服务器操作系统 35
1.4.3 多处理器操作系统 36
1.4.4 个人计算机操作系统 36
1.4.5 掌上计算机操作系统 36
1.4.6 嵌入式操作系统 36
1.4.7 传感器节点操作系统 37
1.4.8 实时操作系统 37
1.4.9 智能卡操作系统 38
1.5 操作系统概念 38
1.5.1 进程 39
1.5.2 地址空间 41
1.5.3 文件 41
1.5.4 输入/输出 45
1.5.5 保护 45
1.5.6 shell 45
1.5.7 个体重复系统发育 46
1.6 系统调用 50
1.6.1 用于进程管理的系统调用 53
1.6.2 用于文件管理的系统调用 56
1.6.3 用于目录管理的系统调用 57
1.6.4 各种系统调用 59
1.6.5 Windows Win32 API 60
1.7 操作系统结构 62
1.7.1 单体系统 62
1.7.2 层次式系统 63
1.7.3 微内核 65
1.7.4 客户端–服务器模式 68
1.7.5 虚拟机 68
1.7.6 外核 72
1.8 依靠C的世界 73
1.8.1 C语言 73
1.8.2 头文件 74
1.8.3 大型编程项目 75
1.8.4 运行模型 76
1.9 有关操作系统的研究 77
1.10 本书其他部分概要 78
1.11 公制单位 79
1.12 小结 80
第2章 进程与线程 85
2.1 进程 85
2.1.1 进程模型 86
2.1.2 进程的创建 88
2.1.3 进程的终止 90
2.1.4 进程的层次结构 91
2.1.5 进程的状态 92
2.1.6 进程的实现 94
2.1.7 多道程序设计模型 95
2.2 线程 97
2.2.1 线程的使用 97
2.2.2 经典的线程模型 102
2.2.3 POSIX线程 106
2.2.4 在用户空间中实现线程 108
2.2.5 在内核中实现线程 111
2.2.6 混合实现 112
2.2.7 调度程序激活机制 113
2.2.8 弹出式线程 114
2.2.9 使单线程代码多线程化 115
2.3 进程间通信 119
2.3.1 竞争条件 119
2.3.2 临界区 121
2.3.3 忙等待的互斥 121
2.3.4 睡眠与唤醒 127
2.3.5 信号量 130
2.3.6 互斥量 132
2.3.7 管程 137
2.3.8 消息传递 144
2.3.9 屏障 146
2.3.10 避免锁:读–复制–更新 148
2.4 调度 148
2.4.1 调度简介 149
2.4.2 批处理系统中的调度 156
2.4.3 交互式系统中的调度 158
2.4.4 实时系统中的调度 164
2.4.5 策略和机制 165
2.4.6 线程调度 165
2.5 经典的IPC问题 167
2.5.1 哲学家就餐问题 167
2.5.2 读者–写者问题 169
2.6 有关进程与线程的研究 172
2.7 小结 173
第3章 内存管理 181
3.1 无存储器抽象 182
3.2 一种存储器抽象:地址空间 185
3.2.1 地址空间的概念 185
3.2.2 交换技术 187
3.2.3 空闲内存管理 190
3.3 虚拟内存 194
3.3.1 分页 195
3.3.2 页表 198
3.3.3 加速分页过程 201
3.3.4 针对大内存的页表 205
3.4 页面置换算法 209
3.4.1 最优页面置换算法 209
3.4.2 最近未使用页面置换算法 210
3.4.3 先进先出页面置换算法 211
3.4.4 第二次机会页面置换算法 211
3.4.5 时钟页面置换算法 212
3.4.6 最近最少使用页面置换算法 213
3.4.7 用软件模拟LRU 214
3.4.8 工作集页面置换算法 215
3.4.9 工作集时钟页面置换算法 219
3.4.10 页面置换算法小结 221
3.5 分页系统中的设计问题 222
3.5.1 局部分配策略与全局分配策略 222
3.5.2 负载控制 225
3.5.3 页面大小 225
3.5.4 分离的指令空间和数据空间 227
3.5.5 共享页面 228
3.5.6 共享库 229
3.5.7 内存映射文件 231
3.5.8 清除策略 232
3.5.9 虚拟内存接口 232
3.6 有关实现的问题 233
3.6.1 与分页有关的工作 233
3.6.2 缺页中断处理 234
3.6.3 指令备份 235
3.6.4 锁定内存中的页面 236
3.6.5 后备存储 237
3.6.6 策略和机制的分离 239
3.7 分段 240
3.7.1 纯分段的实现 243
3.7.2 分段和分页结合:MULTICS 243
3.7.3 分段和分页结合:Intel x86 247
3.8 有关内存管理的研究 252
3.9 小结 253
第4章 文件系统 263
4.1 文件 265
4.1.1 文件命名 265
4.1.2 文件结构 267
4.1.3 文件类型 268
4.1.4 文件访问 269
4.1.5 文件属性 271
4.1.6 文件操作 271
4.1.7 使用文件系统调用的一个示例程序 273
4.2 目录 276
4.2.1 一级目录系统 276
4.2.2 层次目录系统 276
4.2.3 路径名 277
4.2.4 目录操作 280
4.3 文件系统的实现 281
4.3.1 文件系统布局 281
4.3.2 文件的实现 282
4.3.3 目录的实现 287
4.3.4 共享文件 290
4.3.5 日志结构文件系统 293
4.3.6 日志文件系统 294
4.3.7 虚拟文件系统 296
4.4 文件系统管理和优化 299
4.4.1 磁盘空间管理 299
4.4.2 文件系统备份 306
4.4.3 文件系统的一致性 312
4.4.4 文件系统性能 314
4.4.5 磁盘碎片整理 319
4.5 文件系统实例 320
4.5.1 MS-DOS文件系统 320
4.5.2 UNIX V7文件系统 323
4.5.3 CD-ROM文件系统 325
4.6 有关文件系统的研究 331
4.7 小结 332
第5章 输入/输出 337
5.1 I/O硬件原理 337
5.1.1 I/O设备 338
5.1.2 设备控制器 339
5.1.3 内存映射I/O 340
5.1.4 直接存储器存取 344
5.1.5 重温中断 347
5.2 I/O软件原理 351
5.2.1 I/O软件的目标 351
5.2.2 程序控制I/O 352
5.2.3 中断驱动I/O 354
5.2.4 使用DMA的I/O 355
5.3 I/O软件层次 356
5.3.1 中断处理程序 356
5.3.2 设备驱动程序 357
5.3.3 与设备无关的I/O软件 361
5.3.4 用户空间的I/O软件 367
5.4 盘 369
5.4.1 盘的硬件 369
5.4.2 磁盘格式化 375
5.4.3 磁盘臂调度算法 379
5.4.4 错误处理 382
5.4.5 稳定存储器 385
5.5 时钟 388
5.5.1 时钟硬件 388
5.5.2 时钟软件 389
5.5.3 软定时器 392
5.6 用户界面:键盘、鼠标和监视器 394
5.6.1 输入软件 394
5.6.2 输出软件 399
5.7 瘦客户机 416
5.8 电源管理 417
5.8.1 硬件问题 418
5.8.2 操作系统问题 419
5.8.3 应用程序问题 425
5.9 有关输入/输出的研究 426
5.10 小结 428
第6章 死锁 435
6.1 资源 436
6.1.1 可抢占资源和不可抢占资源 436
6.1.2 资源获取 437
6.2 死锁简介 438
6.2.1 资源死锁的条件 439
6.2.2 死锁建模 440
6.3 鸵鸟算法 443
6.4 死锁检测和死锁恢复 443
6.4.1 每种类型一个资源的死锁检测 444
6.4.2 每种类型多个资源的死锁检测 446
6.4.3 从死锁中恢复 448
6.5 死锁避免 450
6.5.1 资源轨迹图 450
6.5.2 安全状态和不安全状态 452
6.5.3 单个资源的银行家算法 453
6.5.4 多个资源的银行家算法 454
6.6 死锁预防 456
6.6.1 破坏互斥条件 456
6.6.2 破坏占有并等待条件 456
6.6.3 破坏不可抢占条件 457
6.6.4 破坏环路等待条件 457
6.7 其他问题 458
6.7.1 两阶段加锁 458
6.7.2 通信死锁 459
6.7.3 活锁 461
6.7.4 饥饿 463
6.8 有关死锁的研究 464
6.9 小结 464
第7章 虚拟化和云 471
7.1 历史 473
7.2 虚拟化的必要条件 474
7.3 第一类和第二类虚拟机管理程序 477
7.4 高效虚拟化技术 478
7.4.1 在不支持虚拟化的平台上实现虚拟化 479
7.4.2 虚拟化的开销 482
7.5 虚拟机管理程序是正确的微内核吗 483
7.6 内存虚拟化 486
7.7 I/O虚拟化 490
7.8 虚拟装置 493
7.9 多核CPU上的虚拟机 494
7.10 授权问题 494
7.11 云 495
7.11.1 云即服务 496
7.11.2 虚拟机迁移 496
7.11.3 检查点 497
7.12 案例研究:VMware 498
7.12.1 VMware的早期历史 498
7.12.2 VMware Workstation 499
7.12.3 将虚拟化引入x86的挑战 500
7.12.4 VMware Workstation解决方案概览 502
7.12.5 VMware Workstation的演变 511
7.12.6 VMware的第一类虚拟机管理程序ESX Server 512
7.13 有关虚拟化和云的研究 514
第8章 多处理机系统 517
8.1 多处理机 520
8.1.1 多处理机硬件 520
8.1.2 多处理机操作系统类型 530
8.1.3 多处理机同步 534
8.1.4 多处理机调度 539
8.2 多计算机 544
8.2.1 多计算机硬件 545
8.2.2 低层通信软件 550
8.2.3 用户层通信软件 552
8.2.4 远程过程调用 556
8.2.5 分布式共享存储器 558
8.2.6 多计算机调度 563
8.2.7 负载平衡 563
8.3 分布式系统 566
8.3.1 网络硬件 568
8.3.2 网络服务和协议 571
8.3.3 基于文档的中间件 576
8.3.4 基于文件系统的中间件 577
8.3.5 基于对象的中间件 582
8.3.6 基于协作的中间件 584
8.4 有关多处理机系统的研究 587
8.5 小结 588
第9章 安全 593
9.1 环境安全 595
9.1.1 威胁 596
9.1.2 入侵者 598
9.2 操作系统完全 599
9.2.1 可信系统 600
9.2.2 可信计算基 601
9.3 保护机制 602
9.3.1 保护域 602
9.3.2 访问控制列表 605
9.3.3 权能字 608
9.4 安全系统的形式化模型 611
9.4.1 多级安全 612
9.4.2 隐蔽信道 615
9.5 密码学原理 619
9.5.1 私钥加密技术 620
9.5.2 公钥加密技术 621
9.5.3 单向函数 622
9.5.4 数字签名 622
9.5.5 可信平台模块 624
9.6 认证 626
9.6.1 使用物理识别的认证方式 633
9.6.2 使用生物识别的认证方式 636
9.7 软件漏洞 639
9.7.1 缓冲区溢出攻击 640
9.7.2 格式化字符串攻击 649
9.7.3 悬垂指针 652
9.7.4 空指针间接引用攻击 653
9.7.5 整数溢出攻击 654
9.7.6 命令注入攻击 655
9.7.7 检查时间/使用时间攻击 656
9.8 内部攻击 657
9.8.1 逻辑炸弹 657
9.8.2 后门陷阱 658
9.8.3 登录欺骗 659
9.9 恶意软件 660
9.9.1 特洛伊木马 662
9.9.2 病毒 664
9.9.3 蠕虫 674
9.9.4 间谍软件 676
9.9.5 rootkit 680
9.10 防御 684
9.10.1 防火墙 685
9.10.2 反病毒和抑制反病毒技术 687
9.10.3 代码签名 693
9.10.4 囚禁 694
9.10.5 基于模型的入侵检测 695
9.10.6 封装移动代码 697
9.10.7 Java安全性 701
9.11 有关安全的研究 703
9.12 小结 704
第10章 实例研究1:UNIX、Linux和Android 713
10.1 UNIX与Linux的历史 714
10.1.1 UNICS 714
10.1.2 PDP-11 UNIX 715
10.1.3 可移植的UNIX 716
10.1.4 Berkeley UNIX 717
10.1.5 标准UNIX 718
10.1.6 MINIX 719
10.1.7 Linux 720
10.2 Linux简介 723
10.2.1 Linux的设计目标 723
10.2.2 到Linux的接口 724
10.2.3 shell 725
10.2.4 Linux应用程序 728
10.2.5 内核结构 730
10.3 Linux中的进程 733
10.3.1 基本概念 733
10.3.2 Linux中进程管理相关的系统调用 735
10.3.3 Linux中进程与线程的实现 739
10.3.4 Linux中的调度 746
10.3.5 启动Linux系统 751
10.4 Linux中的内存管理 753
10.4.1 基本概念 753
10.4.2 Linux中的内存管理系统调用 756
10.4.3 Linux中内存管理的实现 758
10.4.4 Linux中的分页 764
10.5 Linux中的I/O系统 767
10.5.1 基本概念 767
10.5.2 网络 769
10.5.3 Linux中的I/O系统调用 770
10.5.4 I/O在Linux中的实现 771
10.5.5 Linux中的模块 774
10.6 Linux文件系统 775
10.6.1 基本概念 775
10.6.2 Linux中的文件系统调用 780
10.6.3 Linux文件系统的实现 783
10.6.4 NFS:网络文件系统 792
10.7 Linux的安全性 798
10.7.1 基本概念 798
10.7.2 Linux中安全相关的系统调用 800
10.7.3 Linux中的安全实现 801
10.8 Android 802
10.8.1 Android与Google 803
10.8.2 Android的历史 803
10.8.3 设计目标 807
10.8.4 Android体系结构 809
10.8.5 Linux扩展 810
10.8.6 Dalvik 814
10.8.7 Binder IPC 815
10.8.8 Android应用 824
10.8.9 意图 836
10.8.10 应用程序沙箱 837
10.8.11 安全性 838
10.8.12 进程模型 844
10.9 小结 848
第11章 实例研究2:Windows 8 857
11.1 Windows 8.1的历史 857
11.1.1 20世纪80年代:MS-DOS 857
11.1.2 20世纪90年代:基于MS-DOS的Windows 859
11.1.3 21世纪00年代:基于NT的Windows 859
11.1.4 Windows Vista 862
11.1.5 21世纪10年代:现代Windows 863
11.2 Windows 编程 864
11.2.1 原生NT应用编程接口 867
11.2.2 Win32应用编程接口 871
11.2.3 Windows注册表 875
11.3 系统结构 877
11.3.1 操作系统结构 877
11.3.2 启动Windows 893
11.3.3 对象管理器的实现 894
11.3.4 子系统、DLL和用户态服务 905
11.4 Windows中的进程和线程 908
11.4.1 基本概念 908
11.4.2 作业、进程、线程和纤程管理API调用 914
11.4.3 进程和线程的实现 919
11.5 内存管理 927
11.5.1 基本概念 927
11.5.2 内存管理系统调用 931
11.5.3 存储管理的实现 932
11.6 Windows的高速缓存 942
11.7 Windows的I/O 943
11.7.1 基本概念 944
11.7.2 I/O的API调用 945
11.7.3 I/O实现 948
11.8 Windows NT文件系统 952
11.8.1 基本概念 953
11.8.2 NTFS文件系统的实现 954
11.9 Windows电源管理 964
11.10 Windows 8中的安全 966
11.10.1 基本概念 967
11.10.2 安全相关的API调用 969
11.10.3 安全实现 970
11.10.4 安全缓解技术 972
11.11 小结 975
第12章 操作系统设计 981
12.1 设计问题的本质 982
12.1.1 目标 982
12.1.2 设计操作系统为什么困难 983
12.2 接口设计 985
12.2.1 指导原则 985
12.2.2 范型 987
12.2.3 系统调用接口 991
12.3 实现 993
12.3.1 系统结构 993
12.3.2 机制与策略 997
12.3.3 正交性 998
12.3.4 命名 999
12.3.5 绑定的时机 1001
12.3.6 静态与动态结构 1001
12.3.7 自顶向下与自底向上的实现 1003
12.3.8 同步通信与异步通信 1004
12.3.9 实用技术 1005
12.4 性能 1010
12.4.1 操作系统为什么运行缓慢 1010
12.4.2 什么应该优化 1011
12.4.3 空间–时间的权衡 1012
12.4.4 缓存 1015
12.4.5 线索 1016
12.4.6 利用局部性 1016
12.4.7 优化常见的情况 1017
12.5 项目管理 1018
12.5.1 人月神话 1018
12.5.2 团队结构 1019
12.5.3 经验的作用 1021
12.5.4 没有银弹 1021
12.6 操作系统设计的趋势 1022
12.6.1 虚拟化与云 1023
12.6.2 众核芯片 1023
12.6.3 大型地址空间操作系统 1024
12.6.4 无缝的数据访问 1025
12.6.5 电池供电的计算机 1025
12.6.6 嵌入式系统 1026
12.7 小结 1027
第13章 参考书目与文献 1031
13.1 进行深入阅读的建议 1031
13.1.1 引论 1031
13.1.2 进程与线程 1032
13.1.3 内存管理 1033
13.1.4 文件系统 1033
13.1.5 输入/输出 1034
13.1.6 死锁 1035
13.1.7 虚拟化和云 1035
13.1.8 多处理机系统 1036
13.1.9 安全 1037
13.1.10 实例研究1:UNIX、Linux和Android 1039
13.1.11 实例研究2:Windows 8 1040
13.1.12 操作系统设计 1040
13.2 按字母顺序排序的参考文献 1041

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