| PART ⅠList of SidebarsPrefaceWhere to find Part Ⅱ and other On-line MaterialsAcknowledgmentsCHAPTER 1 SystemsOverview1.1 Systems and Complexity1.1.1 Common Problems of Systems in Many Fields1.1.2 Systems, Components, Interfaces, and Environments1.1.3 Complexity1.2 Sources of Complexity1.2.1 Cascading and Interacting Requirements1.2.2 Maintaining High Utilization1.3 Coping with Complexity Ⅰ1.3.1 Modularity1.3.2 Abstraction1.3.3 Layering1.3.4 Hierarchy1.3.5 Putting it Back Together: Names make Connections1.4 Computer Systems are the Same but Different1.4.1 Computer Systems have no Nearby Bounds on Composition1.4.2 d(technology)/dt is Unprecedented1.5 Coping with Complexity Ⅱ1.5.1 Why Modularity, Abstraction, Layering, and Hierarchy aren't Enough1.5.2 Iteration1.5.3 Keep it SimpleWhat the Rest of this Book is AboutExercisesCHAPTER 2 Elements of Computer System OrganizationOverview2.1 The Three Fundamental Abstractions2.1.1 Memory2.1.2 Interpreters2.1.3 Communication Links2.2 Naming in Computer Systems2.2.1 The Naming Model2.2.2 Default and Explicit Context References2.2.3 Path Names, Naming Networks, and Recursive Name Resolution2.2.4 Multiple Lookup: Searching through Layered Contexts2.2.5 Comparing Names2.2.6 Name Discovery2.3 Organizing Computer Systems with Names and Layers2.3.1 A Hardware Layer: The Bus2.3.2 A Software Layer: The File Abstraction2.4 Looking Back andAhead2.5 Case Study: UNIX File System Layering and Naming2.5.1 Application Programming Interface for the UNIX File-System2.5.2 The Block Layer2.5.3 The File Layer2.5.4 The Inode Number Layer2.5.5 The File Name Layer2.5.6 The Path Name Layer2.5.7 Links2.5.8 Renaming2.5.9 The Absolute Path Name Layer2.5.10 The Symbolic Link Layer2.5.11 Implementing the File System API2.5.12 The Shell and Implied Contexts, Search Paths, and Name Discovery2.5.13 Suggestions for Further ReadingExercisesCHAPTER 3 The Design of Naming SchemesOverview3.1 Considerations in the Design of Naming Schemes3.1.1 Modular Sharing3.1.2 Metadata and Name Overloading3.1.3 Addresses: Names that Locate Objects3.1.4 Generating Unique Names3.1.5 Intended Audience and User-Friendly Names3.1.6 Relative Lifetimes of Names,Values, and Bindings3.1.7 Looking Back andAhead: Names are a Basic System Component3.9 Case Study: The Uniform Resource Locator (URL)3.2.1 Surfing as a Referential Experience; Name Discovery3.2.2 Interpretation of the URL3.2.3 URL Case Sensitivity3.2.4 Wrong Context References for a Partial URL3.2.5 Overloading of Names in URLs3.3 War Stories: Pathologies in the Use of Names3.3.1 A Name Collision Eliminates Smiling Faces3.3.2 Fragile Names from Overloading, and a Market Solution...3.3.3 More Fragile Names from Overloading, with Market Disruption3.3.4 Case-Sensitivity in User-Friendly Names3.3.5 Running Out of Telephone NumbersExercisesCHAPTER 4 Enforcing Modularity with Clients and ServicesOverview4.1 Client/Service Organization4.1.1 From Soft Modularity to Enforced Modularity4.1.2 Client/Service Organization4.1.3 Multiple Clients and Services4.1.4 Trusted Intermediaries4.1.5 A Simple Example Service4.2 Communication Between Client and Service4.2.1 Remote Procedure Call (RPC)4.2.2 RPCs are not Identical to Procedure Calls4.2.3 Communicating through an Intermediary4.3 Summary and The RoadAhead4.4 Case Study: The Interuet Domain Name System (DNS)4.4.1 Name Resolution in DNS4.4.2 Hierarchical Name Management4.4.3 Other Features of DNS4.4.4 Name Discovery in DNS4.4.5 Trustworthiness of DNS Responses4.5 Case Study: The Network File System (NFS)4.5.1 Naming Remote Files and Directories4.5.2 The NFS Remote Procedure Calls4.5.3 Extending the unix File System to Support NFS4.5.4 Coherence4.5.5 NFS Version 3 and BeyondExercisesCHAPTER 5 Enforcing Modularity with VirtualizationOverview5.1 Client/Server Organization within a Computer Using Virtualization5.1.1 Abstractions for Virtualizing Computers5.1.2 Emulation and Virtual Machines5.1.3 Roadmap: Step-by-StepVirtualization5.2 Virtual Links Using SEND, RECEIVE, and a Bounded Buffer5.2.1 An Interface for SEND and RECEIVE with Bounded Buffers5.2.2 Sequence Coordination with a Bounded Buffer5.2.3 Race Conditions5.2.4 Locks and Before-or-AfterActions5.2.5 Deadlock5.2.6 Implementing ACQUIRE and RELEASE5.2.7 Implementing a Before-or-AfterAction Using the One-Writer Principle5.2.8 Coordination between Synchronous Islands with Asynchronous Connections5.3 Enforcing Modularity in Memory5.3.1 Enforcing Modularity with Domains5.3.2 Controlled Sharing Using Several Domains5.3.3 More Enforced Modularity with Kernel and User Mode5.3.4 Gates and Changing Modes5.3.5 Enforcing Modularity for Bounded Buffers5.3.6 The Kernel5.4 Virtualizing Memory5.4.1 Virtualizing Addresses5.4.2 Translating Addresses Using a Page Map5.4.3 VirtualAddress Spaces5.4.4 Hardware versus Software and the Translation Look-Aside Buffer5.4.5 Segments (Advanced Topic)5.5 Virtualizing Processors Using Threads5.5.1 Sharing a ProcessorAmong Multiple Threads5.5.2 Implementing YIELD5.5.3 Creating and Terminating Threads5.5.4 Enforcing Modularity with Threads: Preemptive Scheduling5.5.5 Enforcing Modularity with Threads andAddress Spaces5.5.6 Layering Threads |
商品评论(0条)