This book is distinctive, ambitious, and significant. It is not about the typical workings of things; rather, it is about the fundamentals of computer system architecture. These ideas are frequently found in research articles.
This is the first textbook to tackle computer system design from a principles-based perspective. It identifies, analyses, and provides examples of key ideas in computer system design that are shared by networks, operating systems, programming languages, software engineering, distributed systems, databases, architecture, and fault tolerance.
The book identifies and explains abstractions, such as names, remote procedure calls, client/service organization, file systems, transactions, replication with repair, read/write coherence, and authenticated and confidential messages, that have been successful in practice to support the emphasis on design. These abstractions give designers the ability to build systems with stronger modularity, safeguarding against faults ranging from careless programmers to nefarious enemies. This book explains how these abstractions are put into practice, shows how they are employed in various systems, and gets the reader ready to use them in upcoming designs.