事务处理概念与技术

2009年人民邮电出版社出版的图书
《事务处理概念与技术(英文版)》一书从系统的角度全面阐述事务处理的概念和技术，其中涉及终端上的表示管理、通信子系统、操作系统、数据库、程序设计语言的运行时系统以及应用开发环境等。
作者简介
作者：(美国)Jim Gray (美国)Andreas Reuter
Jim Gray ，（1944-2007）计算机科学大师，因在数据库和事务处理研究和实现方面的开创性贡献而获得1998年图灵奖。美国科学院、工程院两院院士，ACM和IEEE两会会士：他25岁成为加州大学伯克利分校计算机科学学院第一位博士。在IBM工作期间参与和主持了IMS、System R、SQUDS、DB2等项目的开发。后任职于微软研究院，主要关注应用数据库技术来处理各学科的海量信息。2007年1月独自驾船出海后失踪。
内容简介
《事务处理概念与技术(英文版)》重点放在事务处理的基本概念上，主要阐述事务概念是如何用于解决分布式系统问题的，以及利用这些概念如何能够在有限的资金和风险范围内建立高性能、高可用性的应用系统。全书重点讲述了事务处理基础、容错基础知识、面向事务的计算、并发控制、恢复、事务型文件系统、系统概览等7个主题，介绍了事务的ACID特性、并发的理论和实践、事务管理和恢复技术等方面的内容，最后还介绍了一个非常重要的资源管理器的实现。《事务处理概念与技术(英文版)》主要面向计算机及相关专业的高年级本科生和研究生，适合作为事务处理导论、数据库系统、分布式系统、操作系统等课程的辅助教材，需要了解事务处理系统的开发人员也可将其作为基本参考书。
目录
Contents
PART ONE——The Basics of Transaction Processing
1　INTRODUCTION　3
1.1　Historical Perspective　3
1.2　What Is a TransacUon Processing System？　5
1.2.1　The End User's View of a Transaction Processing System　8
1.2.2　The Administrator/Operator's View of a TP System　9
1.2.3　Application Designer's View of a TP System　12
1.2.4　The Resource Manager's View of a TP System　18
1.2.5　TP System Core Services　21
1.3 A Transaction Processing System Feature List　22
1.3.1　Application Development Features　22
1.3.2　Repository Features　23
1.3.3　TP Monitor Features　26
1.3.4　Data Communications Features　29
1.3.5　Database Features　33
1.3.6　Operations Features　39
1.3.7　Education and Testing Features　40
1.3.8　Feature Summary　41
1.4　Summary　42
1.5　Historical Notes　43
Exercises　44
Answers　46
2　BASIC COMPUTER SCIENCE TERMINOLOGY　47
2.1　Introduction　47
2.1.1　Units　47
2.2　Basic Hardware　48
2.2.1　Memories　49
2.2.2　Processors　57
2.2.3　Communications Hardware　58
2.2.4　Hardware Architectures　59
2.3　Basic Software——Address Spaces, Processes, Sessions　62
2.3.1　Address Spaces　62
2.3.2　Processes, Protection Domains, and Threads　63
2.3.3　Messages and Sessions　66
2.4　Generic System Issues　67
2.4.1　Clients and Servers　67
2.4.2　Naming　69
2.4.3　Authentication　70
2.4.4　Authorization　71
2.4.5　Scheduling and Performance　72
2.4.6　Summary　74
2.5　Files　74
2.5.1　File Operations　74
2.5.2　File Organizations　75
2.5.3　Distributed Files　77
2.5.4　SQL　78
2.6　Software Performance　78
2.7　Transaction Processing Standards　80
2.7.1　Portability versus Interoperability Standards　80
2.7.2　APIs and FAPs　80
2.7.3　LU6.2, a de facto Standard　82
2.7.4　OSI-TP with X/Open DTP, a de jure Standard　83
2.8　Summary　85
Exercises　86
Answers　88
PART TWO——The Basics of Fault Tolerance
3　FAULT TOLERANCE　93
3.1　Introduction　93
3.1.1　A Crash Course in Simple Probability　93
3.1.2　An External View of Fault Tolerance　95
3.2　Definitions　98
3.2.1　Fault, Failure, Availability, Reliability　98
3.2.2　Taxonomy of Fault Avoidance and Fault Tolerance　99
3.2.3　Repair, Failfast, Modularity, Recursive Design　100
3.3　Empirical Studies　100
3.3.1　Outages Are Rare Events　100
3.3.2　Studies of Conventional Systems　101
3.3.3　A Study of a Fault-Tolerant System　103
3.4　Typical Module Failure Rates　105
3.5　Hardware Approaches to Fault Tolerance　109
3.5.1　The Basic N-Plex Idea: How to Build Failfast Modules　109
3.5.2　Failfast versus Failvote Voters in an N-Plex　109
3.5.3　N-Plex plus Repair Results in High Availability　112
3.5.4　The Voter's Problem　113
3.5.5　Summary　115
3.6　Software Is the Problem　115
3.6.1　N-Version Programming and Software Fault Tolerance　116
3.6.2　Transactions and Software Fault Tolerance　117
3.6.3　Summary　119
3.7　Fault Model and Software Fault Masking　119
3.7.1　An Overview of the Model　120
3.7.2　Building Highly Available Storage　122
3.7.3　Highly Available Processes　128
3.7.4　Reliable Messages via Sessions and Process Pairs　138
3.7.5　Summary of the Process-Message-Storage Model　147
3.8　General Principles　148
3.9　A Cautionary Tale——System Delusion　149
3.10　Summary　150
3.11　Historical Notes　151
Exercises　152
Answers　155
PART THREE——Transaction-Oriented Computing
4　TRANSACTION MODELS　159
4.1　Introduction　159
4.1.1　About this Chapter　160
4.2　Atomic Actions and Flat Transactions　160
4.2.1　Disk Writes as Atomic Actions　161
4.2.2　A Classification of Action Types　163
4.2.3　Flat Transactions　165
4.2.4　Limitations of Flat Transactions　171
4.3　Spheres of Control　174
4.3.1　Definition of Spheres of Control　174
4.3.2　Dynamic Behavior of Spheres of Control　176
4.3.3　Summary　180
4.4　A Notation for Explaining Transaction Models　180
4.4.1　What Is Required to Describe Transaction Models?　181
4.4.2　Elements of the Notation　183
4.4.3　Defining Transaction Models by a Set of Simple Rules　184
4.5　Flat Transactions with Savepoints　187
4.5.1　About Savepoints　187
4.5.2　Developing the Rules for the Savepoint Model　189
4.5.3　Persistent Savepoints　190
4.6　Chained Transactions　192
4.7　Nested Transactions　195
4.7.1　Definition of the Nesting Structure　195
4.7.2　Using Nested Transactions　198
4.7.3　Emulating Nested Transactions by Savepoints　200
4.8　Distributed Transactions　202
4.9　Multi-Level Transactions　203
4.9.1　The Role of a Compensating Transaction　204
4.9.2　The Use of Multi-Level Transactions　206
4.10　Open Nested Transactions　210
4.11　Long-Lived Transactions　210
4.11.1　Transaction Processing Context　212
4.11.2　The Mini-Batch　215
4.11.3　Sagas　217
4.12　Exotics　219
4.13　Summary　221
4.14　Historical Notes　222
Exercises　225
5　TRANSACTION PROCESSING MONITORS——An Overview　239
5.1　Introduction　239
5.2　The Role of TP Monitors in Transaction Systems　239
5.2.1　The Transaction-oriented Computing Style　241
5.2.2　The Transaction Processing Services　249
5.2.3　TP System Process Structure　252
5.2.4　Summary　258
5.3　The Structure of a TP Monitor　259
5.3.1　The TP Monitor Components　260
5.3.2　Components of the Transaction Services　263
5.3.3　TP Monitor Support for the Resource Manager Interfaces　266
5.4　Transactional Remote Procedure Calls: The Basic Idea　267
5.4.1　Who Participates in Remote Procedure Calls?　267
5.4.2　Address Space Structure Required for RPC Handling　268
5.4 3　The Dynamics of Remote Procedure Calls　270
5.4.4　Summary　273
5.5　Examples of the Transaction-Oriented Programming Style　274
5.5.1　The Basic Processing Loop　275
5.5.2　Attaching Resource Managers to Transactions: The Simple Cases　276
5.5.3　Attaching Resource Managers to Transactions: The Sophisticated Case　282
5.5.4　Using Persistent Savepoints　284
5.6　Terminological Wrap-Up　285
5.7　Historical Notes　286
Exercises　288
Answers　289
6　TRANSACTION PROCESSING MONITORS　293
6.1　Introduction　293
6.2　Transactional Remote Procedure Calls　295
6.2.1　The Resource Manager Interface　297
6.2.2　What the Resource Manager Has to Do in Support of Transactions　299
6.2.3　Interfaces between Resource Managers and the TP Monitor
301
6.2.4　Resource Manager Calls versus Resource Manager Sessions
304
6.2.5　Summary　312
6.3　Functional Principles of the TP Monitor　312
6.3.1　The Central Data Structures of the TPOS　313
6.3.2　Data Structures Owned by the TP Monitor　318
6.3.3　A Guided Tour Along the TRPC Path　324
6.3.4　Aborts Racing TRPCs　331
6.3.5　Summary　332
6.4　Managing Request and Response Queues　333
6.4.1　Short-Term Queues for Mapping Resource Manager Invocations　335
6.4.2　Durable Request Queues for Asynchronous Transaction Processing　336
6.4.3　Summary　347
6.5　Other Tasks of the TP Monitor　347
6.5.1　Load Balancing　347
6.5.2　Authentication and Authorization　354
6.5.3　Restart Processing　360
6.6　Summary　362
6.7　Historical Notes　364
Exercises　366
Answers　368
PART FOUR——Concurrency Control
7　ISOLATION CONCEPTS　375
7.1　Overview　375
7.2　Introduction to Isolation　375
7.3　The Dependency Model of Isolation　378
7.3.1　Static versus Dynamic Allocation　378
7.3.2　Transaction Dependencies　379
7.3.3　The Three Bad Dependencies　380
7.3.4　The Case for a Formal Model of Isolation　381
7.4　Isolation: The Application Programmer's View　382
7.5　Isolation Theorems　383
7.5.1　Actions and Transactions　383
7.5.2　Well-Formed and Two-Phased Transactions　385
7.5.3　Transaction Histories　385
7.5.4　Legal Histories and Lock Compatibility　386
7.5.5　Versions, Dependencies, and the Dependency Graph　387
7.5.6　Equivalent and Isolated Histories: BEFORE, AFTER, and Wormholes　388
7.5.7　Wormholes Are Not Isolated　389
7.5.8　Summary of Definitions　390
7.5.9　Summary of the Isolation Theorems　396
7.6　Degrees of Isolation　397
7.6.1　Degrees of Isolation Theorem　398
7.6.2　SQL and Degrees of Isolation　398
7.6.3　Pros and Cons of Low Degrees of Isolation　400
7.6.4　Exotic SQL Isolation——Read-Past and Notify Locks　402
7.7　Phantoms and Predicate Locks　403
7.7.1　The Problem with Predicate Locks　405
7.8　Granular Locks　406
7.8.1　Tree Locking and Intent Lock Modes　406
7.8.2　Update Mode Locks　409
7.8.3　Granular Locking Summary　410
7.8.4　Key-Range Locking　411
7.8.5　Dynamic Key-Range Locks: Previous-Key and Next-Key Locking　412
7.8.6　Key-Range Locks Need DAG Locking　414
7.8.7　The DAG Locking Protocol　415
7.8.8　Formal Definition of Granular Locks on a DAG　417
7.9　Locking Heuristics　419
7.10　Nested Transaction Locking　421
7.11　Scheduling and Deadlock　422
7.11.1　The Convoy Phenomenon　423
7.11.2　Deadlock Avoidance versus Toleration　424
7.11.3　The Wait-for Graph and a Deadlock Detector　425
7.11.4　Distributed Deadlock　426
7.11.5　Probability of Deadlock　428
7.12　Exotics　429
7.12.1　Field Calls　430
7.12.2　Escrow Locking and Other Field Call Refinements　432
7.12.3　Optimistic and Timestamp Locking　434
7.12.4　Time Domain Addressing　435
7.13　Summary　437
7.14　Historical Notes　438
Exercises　440
Answers　442
8　LOCK IMPLEMENTATION　449
8.1　Introduction　449
8.1.1　About This Chapter　449
8.1.2　The Need for Parallelism within the Lock Manager　449
8.1.3　The Resource Manager and Lock Manager Address Space　450
8.2　Atomic Machine Instructions　452
8.3　Semaphores　454
8.3.1　Exclusive Semaphores　454
8.3.2　Crabbing: Traversing Shared Data Structures　456
8.3.3　Shared Semaphores　458
8.3.4　Allocating Shared Storage　461
8.3.5　Semaphores and Exceptions　462
8.4　Lock Manager　464
8.4.1　Lock Names　464
8.4.2　Lock Queues and Scheduling　465
8.4.3　Lock Duration and Lock Counts　467
8.4.4　Lock Manager Interface and Data Structures　469
8.4.5　Lock Manager Internal Logic　471
8.4.6　Lock Escalation and Generic Unlock, Notify Locks　477
8.4.7　Transaction Savepoints, Commit, and Rollback　478
8.4.8　Locking at System Restart　479
8.4.9　Phoenix Transactions　480
8.4.10　Lock Manager Configuration and Complexity　481
8.4.11　Lock Manager Summary　481
8.5　Deadlock Detection　481
8.6　Locking for Parallel and Parallel Nested Transactions　483
8.7　Summary　484
8.8　Historical Notes　485
Exercises　485
Answers　488
PART FIVE——Recovery
9　LOG MANAGER　493
9.1　Introduction　493
9.1.1　Uses of the Log　493
9.1.2　Log Manager Overview　494
9.1.3　The Log Manager's Relationship to Other Services　495
9.1.4　Why Have a Log Manager?　496
9.2　Log Tables　496
9.2.1　Mapping the Log Table onto Files　497
9.2.2　Log Sequence Numbers　499
9.3　Public Interface to the Log　500
9.3.1　Authorization to Access the Log Table　500
9.3.2　Reading the Log Table　500
9.3.3　Writing the Log Table　502
9.3.4　Summary　503
9.4　Implementation Details of Log Reads and Writes　504
9.4.1　Reading the Log　504
9.4.2　Log Anchor　505
9.4.3　Transaction Related Anchors　505
9.4.4　Log Insert　506
9.4.5　Allocate and Flush Log Daemons　507
9.4.6　Careful Writes: Serial or Ping-Pong　508
9.4.7　Group Commit, Batching, Boxcarring　509
9.4.8　WADS Writes　510
9.4.9　Multiple Logs per Transaction Manager　511
9.4.10　Summary　511
9.5　Log Restart Logic　511
9.5.1　Saving the Transaction Manager Anchor　512
9.5.2　Preparing for Restart: Careful Writes of the Log Anchor 512
9.5.3　Finding the Anchor and Log End at Restart　513
9.6　Archiving the Log　514
9.6.1　How Much of the Log Table Should Be Online?　514
9.6.2　Low-Water Marks for Rollback, Restart, Archive　515
9.6.3　Dynamic Logs: Copy Aside versus Copy Forward　516
9.6.4　Archiving the Log Without Impacting Concurrent Transactions　517
9.6.5　Electronic Vaulting and Change Accumulation　518
9.6.6　Dealing with Log Manager-Archive Circularity　519
9.7　Logging in a Client-Server Architecture　519
9.8　Summary　520
9.9　Historical Notes　521
Exercises　521
Answers　523
10　TRANSACTION MANAGER CONCEPTS　529
10.1　Introduction　529
10.2　Transaction Manager Interfaces　529
10.2.1　The Application Interface to Transactions　531
10.2.2　The Resource Manager Interface to Transactions　534
10.2.3　Transaction Manager Functions　536
10.3　Transactional Resource Manager Concepts　538
10.3.1　The DO-UNDO-REDO Protocol　538
10.3.2　The Log Table and Log Records　540
10.3.3　Communication Session Recovery　541
10.3.4　Value Logging　545
10.3.5　Logical Logging　546
10.3.6　Physiological Logging　548
10.3.7　Physiological Logging Rules: FIX, WAL, and Force-Log-at-commit　550
10.3.8　Compensation Log Records　558
10.3.9　Idempotence of Physiological REDO　560
10.3.10　Summary　561
10.4　Two-Phase Commit: Making Computations Atomic　562
10.4.1　Two-Phase Commit in a Centralized System　563
10.4.2　Distributed Transactions and Two-Phase Commit　567
10.5　Summary　573
10.6　Historical Notes　574
Exercises　576
Answers　578
11　TRANSACTION MANAGER STRUCTURE　585
11.1　Introduction　585
11.2　Normal Processing　585
11.2.1　Transaction Identifiers　586
11.2.2　Transaction Manager Data Structures　586
11.2.3　MyTrid(), Status_Transaction(), Leave_Transaction(), Resume_Transaction()　590
11.2.4　Savepoint Log Records　591
11.2.5　Begin Work()592
11.2.6　Local CommiLWork().　593
11.2.7　Remote Commit_Work(): Prepare() and Commit()　596
11.2.8　Save_Work() and Read_Context()　599
11.2.9　Rollback_Work()　601
11.3　Checkpoint　604
11.3.1　Sharp Checkpoints　605
11.3.2　Fuzzy Checkpoints　606
11.3.3　Transaction Manager Checkpoint　607
11.4　System Restart　609
11.4.1　Transaction States at Restart　610
11.4.2　Transaction Manager Restart Logic　610
11.4.3　Resource Manager Restart Logic, Identify()　613
11.4.4　Summary of the Restart Design　616
11.4.5　Independent Resource Managers　616
11.4.6　The Two-Checkpoint Approach: A Different Strategy　616
11.4.7　Why Restart Works　618
11.4.8　Distributed Transaction Resolution: Two-Phase Commit at Restart　620
11.4.9　Accelerating Restart　620
11.4.10　Other Restart Issues　621
11.5　Resource Manager Failure and Restart　622
11.6　Archive Recovery　622
11.7　Configuring the Transaction Manager　624
11.7.1　Transaction Manager Size and Complexity　624
11.8　Summary　624
Exercises　625
Answers　626
12　ADVANCED TRANSACTION MANAGER TOPICS　631
12.1　Introduction　631
12.2　Heterogeneous Commit Coordinators　631
12.2.1　Closed versus Open Transaction Managers　632
12.2.2　Interoperating with a Closed Transaction Manager　632
12.2.3　Writing a Gateway to an Open Transaction Manager　635
12.2.4　Summary of Transaction Gateways　638
12.3　Highly Available (Non-Blocking) Commit Coordinators　638
12.3.1　Heuristic Decisions Resolve Blocked Transaction Commit　640
12.4　Transfer-of-Commit　641
12.5　0ptimizations of Two-Phase Commit　643
12.5.1　Read-Only Commit Optimization　644
12.5.2　Lazy Commit Optimization　645
12.5.3　Linear Commit Optimization　645
12.6　Disaster Recovery at a Remote Site　646
12.6.1　System Pair Takeover　648
12.6.2　Session Switching at Takeover　649
12.6.3　Configuration Options: 1-Safe, 2-Safe, and Very Safe　651
12.6.4　Catch-up After Failure　652
12.6.5　Summary of System Pair Designs　653
12.7　Summary　654
12.8　Historical Notes　654
Exercises　655
Answers　656
PART SIX——Transactional File System:A Sample Resource Manager
13　FILE AND BUFFER MANAGEMENT　661
13.1　Introduction　661
13.2　The File System as a Basis for Transactional Durable Storage　662
13.2.1　External Storage versus Main Memory　662
13.2.2　The External Storage Model Used in this Book　668
13.2.3　Levels of Abstraction in a Transactional File and Database Manager　671
13.3　Media and File Management　673
13.3.1　Objects and Operations of the Basic File System　673
13.3.2　Managing Disk Space　677
13.3.3　Catalog Management for Low-Level File Systems　686
13.4　Buffer Management　688
13.4.1　Functional Principles of the Database Buffer　689
13.4.2　Implementation Issues of a Buffer Manager　697
13.4.3　Logging and Recovery from the Buffer's Perspective　708
13.4.4　Optimizing Buffer Manager Performance　714
13.5　Exotics　723
13.5.1　Side Files　724
13.5.2　Single-Level Storage　732
13.6　Summary　738
13.7　Historical Notes　739
Exercises　741
Answers　744
14　THE TUPLE-ORIENTED FILE SYSTEM　751
14.1　Introduction　751
14.2　Mapping Tuples into Pages　752
14.2.1　Internal Organization of Pages　752
14.2.2　Free Space Administration in a File　757
14.2.3　Tuple Identification　760
14.3　Physical Tuple Management　768
14.3.1　Physical Representation of Attribute Values　769
14.3.2　Physical Representation of Short Tuples　772
14.3.3　Special Aspects of Representing Attribute Values in Tuples　784
14.3.4　Physical Representation of Long Tuples　786
14.3.5　Physical Representation of Complex Tuples and Very Long Attributes　791
14.4　File Organization　794
14.4.1　Administrative Operations　795
14.4.2　An Abstract View on Different File Organizations via Scans　799
14.4.3　Entry-sequenced Files　806
14.4.4 System-Sequenced Files　811
14.4.5　Relative Files　814
14.4.6 Key-Sequenced Files and Hash Files　817
14.4.7　Summary　818
14.5　Exotics　819
14.5.1 Cluster Files　819
14.5.2 Partitioned Files　820
14.5.3　Using Transactions to Maintain the File System　821
14.5.4　The Tuple-Oriented File System in Current Database Systems　822
14.6　Summary　823
Exercises　824
Answers　825
15　ACCESS PATHS　831
15.1　Introduction　831
15.2　Overview of Techniques to Implement Associative Access Paths　833
15.2.1　Summary　835
15.3　Associative Access By Hashing　835
15.3.1　Folding the Key Value into a Numerical Data Type　836
15.3.2　Criteria for a Good Hash Function　838
15.3.3　Overflow Handling in Hash Files　845
15.3.4　Local Administration of Pages in a Hash File　848
15.3.5　Summary of Associative Access Based on Hashing　848
15.4　B-Trees　851
15.4.1　B-Trees: The Basic Idea　851
15.4.2　Performance Aspects of B-Trees　861
15.4.3　Synchronization on B-Trees: The Page-Oriented View　867
15.4.4　Synchronization on B-Trees: The Tuple-Oriented View　868
15.4.5　Recovering Operations on B-Trees　872
15.5　Sample Implementation of Some Operations on B-Trees　876
15.5.1　Declarations of Data Structures Assumed in All Programs 876
15.5 2　Implementation of the roadkoy Operation on a B-Tree　878
15.5.3　Key-Range Locking in a B-Tree　880
15.5.4　Implementation of the Insert Operation for a B-Tree:The Simple Case　882
15.5.5　Implementing B-Tree Insert: The Split Case　884
15.5.6　Summary　886
15.6　Exotics　886
15.6.1　Extendible Hashing　887
15.6.2　The Grid File　892
15.6.3　Holey Brick B-Trees　897
15.7　Summary　904
15.8　Historical Notes　905
Exercises　909
Answers　911
PART SEVEN——System Surveys
16　SURVEY OF TP SYSTEMS　917
16.1　Introduction　917
16.2　IMS　917
16.2.1　Hardware and Operating System Environment　918
16.2.2　Workflow Model　920
16.2.3　Program Isolation　923
16.2.4　Main Storage Databases and Field Calls　923
16.2.5　Data Sharing　924
16.2.6　Improved Availability and Duplexed Systems　925
16.2.7　DB2　927
16.2.8　Recent Evolution of IMS　928
16.3　CICS and LU6.2　928
16.3.1　CICS Overview　928
16.3.2　CICS Services　930
16.3.3　CICS Workflow　931
16.3.4　CICS Distributed Transaction Processing　932
16.3.5　LU6.2　934
16.4　Guardian 90　937
16.4.1　Guardian: The Operating System and Hardware　938
16.4.2　Pathway, Terminal Context, and Server Class Management　939
16.4.3　Transaction Management　941
16.4.4　Other Interesting Features　947
16.5　DECdta　947
16.5.1　ACMS's Three-Ball Workflow Model of Transaction Processing　948
16.5.2　ACMS Services　951
16.5.3　ACMS Summary　952
16.5.4　VMS Transaction Management Support　954
16.5.5　Summary of DECdta　958
16.5.6　Reliable Transaction Router (RTR)　959
16.6　X/Open DTP, OSI-TP, CCR　960
16.6.1　The Local Case　962
16.6.2　The Distributed Case: Services and Servers　964
16.6.3　Summary　964
16.7　Other Systems　965
16.7.1　Universal Transaction Manager (UTM)　965
16.7.2　ADABAS TPF966
16.7.3　Encina　968
16.7.4　Tuxedo　970
16.8　Summary　972
PART EIGHT——Addenda
17　REFERENCES　975
18　DATA STRUCTURES AND INTERFACES　993
19　GLOSSARY　1003
INDEX　1047