Computer Systems

Computer Systems : A Programmer's Perspective: United States Edition

4.37 (567 ratings by Goodreads)
By (author)  , By (author) 

List price: US$153.99

Currently unavailable

Add to wishlist

AbeBooks may have this title (opens in new window).

Try AbeBooks


For Computer Organization and Architecture and Computer Systems courses in CS and EE and ECE departments.

Developed out of an introductory course at Carnegie Mellon University, this text explains the important and enduring concepts underlying all computer systems, and shows the concrete ways that these ideas affect the correctness, performance, and utility of application programs. The text's concrete and hands-on approach will help students understand what is going on "under the hood" of a computer system.
show more

Product details

  • Hardback | 1304 pages
  • 198.12 x 233.68 x 40.64mm | 1,678.28g
  • Pearson
  • United States
  • English
  • 013034074X
  • 9780130340740
  • 2,146,834

Table of contents

(NOTE: Each chapter concludes with Summary.)


1. A Tour of Computer Systems.

Information Is Bits + Context. Programs Are Translated by Other Programs into Different Forms. It Pays to Understand How Compilation Systems Work. Processors Read and Interpret Instructions Stored in Memory. Caches Matter. Storage Devices Form a Hierarchy. The Operating System Manages the Hardware. Systems Communicate with Other Systems Using Networks. The Next Step.


2. Representing and Manipulating Information.

Information Storage. Integer Representations. Integer Arithmetic. Floating Point.

3. Machine-Level Representation of Programs.

A Historical Perspective. Program Encodings. Data Formats. Accessing Information. Arithmetic and Logical Operations. Control. Procedures. Array Allocation and Access. Heterogeneous Data Structures. Alignment. Putting It Together: Understanding Pointers. Life in the Real World: Using the GDB Debugger. Out-of-Bounds Memory References and Buffer Overflow. Floating-Point Code. Embedding Assembly Code in C Programs.

4. Processor Architecture.

The Y86 Instruction Set Architecture. Overview of Logic Design and the Hardware Control Language. A Sequential Implementation. General Principles of Pipelining. Pipelined Implementations.

5. Optimizing Program Performance.

Capabilities and Limitations of Optimizing Compilers. Expressing Program Performance. Program Example. Eliminating Loop Inefficiencies. Reducing Procedure Calls. Eliminating Unneeded Memory References. Understanding Modern Processors. Reducing Loop Overhead. Converting to Pointer Code. Enhancing Parallelism. Putting It Together: Summary of Results for Optimizing Combining Code. Branch Prediction and Misprediction Penalties. Understanding Memory Performance. Life in the Real World: Performance Improvement Techniques. Identifying and Eliminating Performance Bottlenecks.

6. The Memory Hierarchy.

Storage Technologies. Locality. The Memory Hierarchy. Cache Memories. Writing Cache-Friendly Code. Putting It Together: Exploiting Locality in Your Programs.


7. Linking.

Compiler Drivers. Static Linking. Object Files. Relocatable Object Files. Symbols and Symbol Tables. Symbol Resolution. Relocation. Executable Object Files. Loading Executable Object Files. Dynamic Linking with Shared Libraries. Loading and Linking Shared Libraries from Applications. Position-Independent Code (PIC). Tools for Manipulating Object Files.

8. Exceptional Control Flow.

Exceptions. Processes. System Calls and Error Handling. Process Control. Signals. Nonlocal Jumps. Tools for Manipulating Processes.

9. Measuring Program Execution Time.

The Flow of Time on a Computer Systems. Measuring Time by Interval Counting. Cycle Counters. Measuring Program Execution Time with Cycle Counters. Time-of-Day Measurements. Putting It Together: An Experimental Protocol. Looking into the Future. Life in the Real World: An Implementation of the K-Best Measurement Scheme. Lessons Learned.

10. Virtual Memory.

Physical and Virtual Addressing. Address Spaces. VM as a Tool for Caching. VM as a Tool for Memory Management. VM as a Tool for Memory Protection. Address Translation. Case Study: The Pentium/Linux Memory System. Memory Mapping. Dynamic Memory Allocation. Garbage Collection. Common Memory-Related Bugs in C Programs. Recapping Some Key Ideas about Virtual Memory.


11. System-Level I/O.

Unix I/O. Opening and Closing Files. Reading and Writing Files. Robust Reading and Writing with the R10 Package. Reading File Metadata. Sharing Files. I/O Redirection. Standard I/O. Putting It Together: Which I/O Functions Should I Use?

12. Network Programming.

The Client-Server Programming Model. Networks. The Global IP Internet. The Sockets Interface. Web Servers. Putting It Together: The TINY Web Server.

13. Concurrent Programming.

Concurrent Programming with Processes. Concurrent Programming with I/O Multiplexing. Concurrent Programming with Threads. Shared Variables in Threaded Programs. Synchronizing Threads with Semaphores. Putting It Together: A Concurrent Server Based on Pre-Threading. Other Concurrency Issues.

Appendix A. HCL Descriptions of Processor Control Logic.

HCL Reference Manual. SEQ. SEQ+. PIPE.

Appendix B. Error Handling.

Error Handling in Unix Systems. Error-Handling Wrappers. The csapp .h Header File. The csapp .c Source File.
show more

About David R. O'Hallaron

Randal E. Bryant received the Bachelor's degree from the University of Michigan in 1973 and then attended graduate school at the Massachusetts Institute of Technology, receiving the Ph.D. degree in computer science in 1981. He spent three years as an Assistant Professor at the California Institute of Technology and has been on the faculty at Carnegie Mellon since 1984. He is currently the President's Professor of Computer Science and head of the Department of Computer Science. He also holds a courtesy appointment with the Department of Electrical and Computer Engineering.

He has taught courses in computer systems at both the undergraduate and graduate level for over 20 years. Over many years of teaching computer architecture courses, he began shifting the focus from how computers are designed to one of how programmers can write more efficient and reliable programs if they understand the system better. Together with Prof. O'Hallaron, he developed the course "Introduction to Computer Systems" at Carnegie Mellon that is the basis for this book. He has also taught courses in algorithms and programming.

Prof. Bryant's research concerns the design of software tools to help hardware designers verify the correctness of their systems. These include several types of simulators, as well as formal verification tools that prove the correctness of a design using mathematical methods. He has published over 100 technical papers. His research results are used by major computer manufacturers including Intel, Motorola, IBM, and Fujitsu. He has won several major awards for his research. These include two inventor recognition awards and a technical achievement award from the Semiconductor Research Corporation, the Kanellakis Theory and Practice Award from the Association for Computer Machinery (ACM), and the W. R. G. Baker Award and a Golden Jubilee Medal from the Institute of Electrical and Electronics Engineers (IEEE). He is a Fellow of both the ACM and the IEEE.

David R. O'Hallaron received the Ph.D. degree in computer science from the University of Virginia in 1986. After a stint at General Electric, he joined the Carnegie Mellon faculty in 1989 as a Systems Scientist. He is currently an Associate Professor in the Departments of Computer Science and Electrical and Computer Engineering.

He has taught computer systems courses at the undergraduate and graduate levels, on such topics as computer architecture, introductory computer systems, parallel processor design, and Internet services. Together with Prof. Bryant, he developed the course "Introduction to Computer Systems" that is the basis for this book.

Prof. O'Hallaron and his students perform research in the area of computer -systems. In particular, they develop software systems to help scientists and engineers simulate nature on computers. The best known example of their work is the Quake project, a group of computer scientists, civil engineers, and seismologists who have developed the ability to predict the motion of the ground during strong earthquakes, including major quakes in Southern California, Kobe, Japan, Mexico, and New Zealand. Along with the other members of the Quake Project, he received the Allen Newell Medal for Research Excellence from the CMU School of Computer Science. A benchmark he developed for the Quake project, 183.equake, was selected by SPEC for inclusion in the influential SPEC CPU and OMP (Open MP) benchmark suites.
show more

Rating details

567 ratings
4.37 out of 5 stars
5 58% (328)
4 26% (147)
3 13% (74)
2 2% (12)
1 1% (6)
Book ratings by Goodreads
Goodreads is the world's largest site for readers with over 50 million reviews. We're featuring millions of their reader ratings on our book pages to help you find your new favourite book. Close X