Cover image for Principles of Computer System Design : An Introduction.
Principles of Computer System Design : An Introduction.
Title:
Principles of Computer System Design : An Introduction.
Author:
Saltzer, Jerome H.
ISBN:
9780080959429
Personal Author:
Physical Description:
1 online resource (561 pages)
Contents:
Front Cover -- Half Title Page -- Title Page -- Copyright Page -- Dedication Page -- Table of Contents -- List of Sidebars -- Preface -- Where to find Part II and other On-line Materials -- Acknowledgments -- Chapter 1. Systems -- Overview -- 1.1 Systems and Complexity -- 1.1.1 Common Problems of Systems in Many Fields -- 1.1.2 Systems, Components, Interfaces, and Environments -- 1.1.3 Complexity -- 1.2 Sources of Complexity -- 1.2.1 Cascading and Interacting Requirements -- 1.2.2 Maintaining High Utilization -- 1.3 Coping with Complexity I -- 1.3.1 Modularity -- 1.3.2 Abstraction -- 1.3.3 Layering -- 1.3.4 Hierarchy -- 1.3.5 Putting it Back Together: Names make Connections -- 1.4 Computer Systems are the Same but Different -- 1.4.1 Computer Systems have no Nearby Bounds on Composition -- 1.4.2 d(technology)/dt is Unprecedented -- 1.5 Coping with Complexity II -- 1.5.1 Why Modularity, Abstraction, Layering, and Hierarchy aren't Enough -- 1.5.2 Iteration -- 1.5.3 Keep it Simple -- What the Rest of this Book is About -- Exercises -- Chapter 2. Elements of Computer System Organization -- Overview -- 2.1 The Three Fundamental Abstractions -- 2.1.1 Memory -- 2.1.2 Interpreters -- 2.1.3 Communication Links -- 2.2 Naming in Computer Systems -- 2.2.1 The Naming Model -- 2.2.2 Default and Explicit Context References -- 2.2.3 Path Names, Naming Networks, and Recursive Name Resolution -- 2.2.4 Multiple Lookup: Searching through Layered Contexts -- 2.2.5 Comparing Names -- 2.2.6 Name Discovery -- 2.3 Organizing Computer Systems with Names and Layers -- 2.3.1 A Hardware Layer: The Bus -- 2.3.2 A Software Layer: The File Abstraction -- 2.4 Looking Back and Ahead -- 2.5 Case Study: UNIX® File System Layering and Naming -- 2.5.1 Application Programming Interface for the UNIX File System -- 2.5.2 The Block Layer -- 2.5.3 The File Layer.

2.5.4 The Inode Number Layer -- 2.5.5 The File Name Layer -- 2.5.6 The Path Name Layer -- 2.5.7 Links -- 2.5.8 Renaming -- 2.5.9 The Absolute Path Name Layer -- 2.5.10 The Symbolic Link Layer -- 2.5.11 Implementing the File System API -- 2.5.12 The Shell and Implied Contexts, Search Paths, and Name Discovery -- 2.5.13 Suggestions for Further Reading -- Exercises -- Chapter 3. The Design of Naming Schemes -- Overview -- 3.1 Considerations in the Design of Naming Schemes -- 3.1.1 Modular Sharing -- 3.1.2 Metadata and Name Overloading -- 3.1.3 Addresses: Names that Locate Objects -- 3.1.4 Generating Unique Names -- 3.1.5 Intended Audience and User-Friendly Names -- 3.1.6 Relative Lifetimes of Names, Values, and Bindings -- 3.1.7 Looking Back and Ahead: Names are a Basic System Component -- 3.2 Case Study: The Uniform Resource Locator (URL) -- 3.2.1 Surfing as a Referential Experience -- Name Discovery -- 3.2.2 Interpretation of the URL -- 3.2.3 URL Case Sensitivity -- 3.2.4 Wrong Context References for a Partial URL -- 3.2.5 Overloading of Names in URLs -- 3.3 War Stories: Pathologies in the Use of Names -- 3.3.1 A Name Collision Eliminates Smiling Faces -- 3.3.2 Fragile Names from Overloading, and a Market Solution -- 3.3.3 More Fragile Names from Overloading, with Market Disruption -- 3.3.4 Case-Sensitivity in User-Friendly Names -- 3.3.5 Running Out of Telephone Numbers -- Exercises -- Chapter 4. Enforcing Modularity with Clients and Services -- Overview -- 4.1 Client/Service Organization -- 4.1.1 From Soft Modularity to Enforced Modularity -- 4.1.2 Client/Service Organization -- 4.1.3 Multiple Clients and Services -- 4.1.4 Trusted Intermediaries -- 4.1.5 A Simple Example Service -- 4.2 Communication Between Client and Service -- 4.2.1 Remote Procedure Call (RPC) -- 4.2.2 RPCs are not Identical to Procedure Calls.

4.2.3 Communicating through an Intermediary -- 4.3 Summary and The Road Ahead -- 4.4 Case Study: The Internet Domain Name System (DNS) -- 4.4.1 Name Resolution in DNS -- 4.4.2 Hierarchical Name Management -- 4.4.3 Other Features of DNS -- 4.4.4 Name Discovery in DNS -- 4.4.5 Trustworthiness of DNS Responses -- 4.5 Case Study: The Network File System (NFS) -- 4.5.1 Naming Remote Files and Directories -- 4.5.2 The NFS Remote Procedure Calls -- 4.5.3 Extending the UNIX File System to Support NFS -- 4.5.4 Coherence -- 4.5.5 NFS Version 3 and Beyond -- Exercises -- Chapter 5. Enforcing Modularity with Virtualization -- Overview -- 5.1 Client/Server Organization within a Computer Using Virtualization -- 5.1.1 Abstractions for Virtualizing Computers -- 5.1.2 Emulation and Virtual Machines -- 5.1.3 Roadmap: Step-by-Step Virtualization -- 5.2 Virtual Links Using SEND, RECEIVE, and a Bounded Buffer -- 5.2.1 An Interface for SEND and RECEIVE with Bounded Buffers -- 5.2.2 Sequence Coordination with a Bounded Buffer -- 5.2.3 Race Conditions -- 5.2.4 Locks and Before-or-After Actions -- 5.2.5 Deadlock -- 5.2.6 Implementing ACQUIRE and RELEASE -- 5.2.7 Implementing a Before-or-After Action Using the One-Writer Principle -- 5.2.8 Coordination between Synchronous Islands with Asynchronous Connections -- 5.3 Enforcing Modularity in Memory -- 5.3.1 Enforcing Modularity with Domains -- 5.3.2 Controlled Sharing Using Several Domains -- 5.3.3 More Enforced Modularity with Kernel and User Mode -- 5.3.4 Gates and Changing Modes -- 5.3.5 Enforcing Modularity for Bounded Buffers -- 5.3.6 The Kernel -- 5.4 Virtualizing Memory -- 5.4.1 Virtualizing Addresses -- 5.4.2 Translating Addresses Using a Page Map -- 5.4.3 Virtual Address Spaces -- 5.4.4 Hardware versus Software and the Translation Look-Aside Buffer -- 5.4.5 Segments (Advanced Topic).

5.5 Virtualizing Processors Using Threads -- 5.5.1 Sharing a Processor Among Multiple Threads -- 5.5.2 Implementing YIELD -- 5.5.3 Creating and Terminating Threads -- 5.5.4 Enforcing Modularity with Threads: Preemptive Scheduling -- 5.5.5 Enforcing Modularity with Threads and Address Spaces -- 5.5.6 Layering Threads -- 5.6 Thread Primitives for Sequence Coordination -- 5.6.1 The Lost Notification Problem -- 5.6.2 Avoiding the Lost Notification Problem with Eventcounts and Sequencers -- 5.6.3 Implementing AWAIT, ADVANCE, TICKET, and READ (Advanced Topic) -- 5.6.4 Polling, Interrupts, and Sequence Coordination -- 5.7 Case Study: Evolution of Enforced Modularity in the Intel x86 -- 5.7.1 The Early Designs: No Support for Enforced Modularity -- 5.7.2 Enforcing Modularity Using Segmentation -- 5.7.3 Page-Based Virtual Address Spaces -- 5.7.4 Summary: More Evolution -- 5.8 Application: Enforcing Modularity Using Virtual Machines -- 5.8.1 Virtual Machine Uses -- 5.8.2 Implementing Virtual Machines -- 5.8.3 Virtualizing Example -- Exercises -- Chapter 6. Performance -- Overview -- 6.1 Designing for Performance -- 6.1.1 Performance Metrics -- 6.1.2 A Systems Approach to Designing for Performance -- 6.1.3 Reducing Latency by Exploiting Workload Properties -- 6.1.4 Reducing Latency using Concurrency -- 6.1.5 Improving Throughput: Concurrency -- 6.1.6 Queuing and Overload -- 6.1.7 Fighting Bottlenecks -- 6.1.8 An Example: The I/O Bottleneck -- 6.2 Multilevel Memories -- 6.2.1 Memory Characterization -- 6.2.2 Multilevel Memory Management using Virtual Memory -- 6.2.3 Adding Multilevel Memory Management to a Virtual Memory -- 6.2.4 Analyzing Multilevel Memory Systems -- 6.2.5 Locality of Reference and Working Sets -- 6.2.6 Multilevel Memory Management Policies -- 6.2.7 Comparative Analysis of Different Policies -- 6.2.8 Other Page-Removal Algorithms.

6.2.9 Other Aspects of Multilevel Memory Management -- 6.3 Scheduling -- 6.3.1 Scheduling Resources -- 6.3.2 Scheduling Metrics -- 6.3.3 Scheduling Policies -- 6.3.4 Case Study: Scheduling the Disk Arm -- Exercises -- About Part II -- Appendix A. The Binary Classification Trade-off -- Suggestions for Further Reading -- Problem Sets -- Glossary -- Index of Concepts.
Abstract:
This text identifies, examines, and illustrates fundamental concepts in computer system design that are common across operating systems, networks, database systems, distributed systems, programming languages, software engineering, security, fault tolerance, and architecture. Through carefully analyzed case studies from each of these disciplines, it demonstrates how to apply these concepts to tackle practical system design problems. To support the focus on design, the text identifies and explains abstractions that have proven successful in practice such as, remote procedure call, client/service organization, file systems, data integrity, consistency, and authenticated messages. Most computer systems are built using a handful of such abstractions. The text describes how these abstractions are implemented, demonstrates how they are used in different systems, and prepares the reader to apply them in future designs. This unique book is offered in an online / offline split: Chapters 1-6 are included in the book available from Morgan Kaufmann in print or ebook form. Chapters 7-11 are available online under a Creative Commons license. Download them for free at http://www.elsevierdirect.com/companion.jsp?ISBN=9780123749574 Features: Concepts of computer system design guided by fundamental principles. Cross-cutting approach that identifies abstractions common to networking, operating systems, transaction systems, distributed systems, architecture, and software engineering. Case studies that make the abstractions real: naming (DNS and the URL); file systems (the UNIX file system); clients and services (NFS); virtualization (virtual machines); scheduling (disk arms); security (TLS). Numerous pseudocode fragments that provide concrete examples of abstract concepts. Extensive support. The authors and MIT OpenCourseWare  provide on-line, free of charge, open

educational resources, including additional chapters, course syllabi, board layouts and slides, lecture videos, and an archive of lecture schedules, class assignments, and design projects.
Local Note:
Electronic reproduction. Ann Arbor, Michigan : ProQuest Ebook Central, 2017. Available via World Wide Web. Access may be limited to ProQuest Ebook Central affiliated libraries.
Added Author:
Electronic Access:
Click to View
Holds: Copies: