You are previewing Principles of Computer System Design.
O'Reilly logo
Principles of Computer System Design

Book Description

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.

Table of Contents

  1. Cover Image
  2. Contents
  3. Title
  4. Copyright
  5. Dedication
  6. List of Sidebars
  7. Preface
  8. Where to Find Part II and other Materials
  9. Acknowledgments
  10. Chapter 1. Systems
    1. Chapter Contents
    2. Overview
    3. 1.1. Systems and Complexity
    4. 1.2. Sources of Complexity
    5. 1.3. Coping with Complexity I
    6. 1.4. Computer Systems are the Same But Different
    7. 1.5. Coping with Complexity II
    8. What the Rest of this Book is About
    9. Exercises
  11. Chapter 2. Elements of Computer System Organization
    1. Chapter Contents
    2. Overview
    3. 2.1. The Three Fundamental Abstractions
    4. 2.2. Naming in Computer Systems
    5. 2.3. Organizing Computer Systems with Names and Layers
    6. 2.4. Looking Back and Ahead
    7. 2.5. Case study: UNIX® file system layering and naming
    8. Exercises
  12. Chapter 3. The Design of Naming Schemes
    1. Chapter Contents
    2. Overview
    3. 3.1. Considerations in the design of naming schemes
    4. 3.2. Case Study: The Uniform Resource Locator (URL)
    5. 3.3. War stories: Pathologies in the use of names
    6. Exercises
  13. Chapter 4. Enforcing Modularity with Clients and Services
    1. Chapter Contents
    2. Overview
    3. 4.1. Client/Service Organization
    4. 4.2. Communication Between Client and Service
    5. 4.3. Summary and the Road Ahead
    6. 4.4. Case Study: The Internet Domain Name System (DNS)
    7. 4.5. Case Study: The Network File System (NFS)
    8. Exercises
  14. Chapter 5. Enforcing Modularity with Virtualization
    1. Chapter Contents
    2. Overview
    3. 5.1. Client/Server Organization within a Computer Using Virtualization
    4. 5.2. Virtual Links Using SEND, RECEIVE, and a Bounded Buffer
    5. 5.3. Enforcing Modularity in Memory
    6. 5.4. Virtualizing Memory
    7. 5.5. Virtualizing Processors Using Threads
    8. 5.6. Thread Primitives for Sequence Coordination
    9. 5.7. Case Study: Evolution of Enforced Modularity in the Intel X86
    10. 5.8. Application: Enforcing Modularity Using Virtual Machines
    11. Exercises
  15. Chapter 6. Performance
    1. Chapter Contents
    2. Overview
    3. 6.1. Designing for Performance
    4. 6.2. Multilevel Memories
    5. 6.3. Scheduling
    6. Exercises
  16. About Part II
  17. APPENDIX A. The Binary Classification Trade-Off
  18. Suggestions for Further Reading
  19. Problem Sets
  20. Index