Computer Systems: A Programmer's Perspective, 2/e (IE-Paperback)

Randal E. Bryant




DescriptionFew students studying computer science or computer engineering will ever have the opportunity to build a computer system. On the other hand, most students will be required to use and program computers on a near daily basis. Computer Systems: A Programmer's Perspective introduces the important and enduring concepts that underlie computer systems by showing how these ideas affect the correctness, performance, and utility of application programs. The text's hands-on approach (including a comprehensive set of labs) helps students understand the “under-the-hood” operation of a modern computer system and prepares them for future courses in systems topics such as compilers, computer architecture, operating systems, and networking.




  • Extensive sets of practice problems interspersed throughout the chapters encourage students to read actively
  • An extensive set of homework problems, rated by difficulty level
  • A set of labs (including the well known “Binary Bomb Lab”) with supporting software and detailed discussion for instructors
  • Web asides, parenthetical remarks that supplement the main presentation of the book, are referenced within the book, and are available from the CS:APP web page.

    New to This Edition
  • Chapter 2: Representing and Manipulating Information. The authors added more careful explanations of concepts and many more practice and homework problems to make the material more accessible. Some of the more theoretical aspects are moved to web asides. A description of some of the security vulnerabilities that arise due to the overflow properties of computer arithmetic is included.
  • Chapter 3: Machine-Level Representation of Programs. Coverage is extended to include x86-64, the extension of x86 processors to a 64-bit word size. Code is used that is generated by a more recent version of gcc. Coverage of buffer overflow vulnerabilities is enhanced. Web asides are included on two different classes of instructions for floating point, and also a view of the more exotic transformations made when compilers attempt higher degrees of optimization.
  • Chapter 4: Processor Architecture. A more careful exposition of exception detection and handling in processor design. A new web aside showing a mapping of the processor designs into Verilog, enabling synthesis into working hardware.
  • Chapter 5: Optimizing Program Performance. Greatly enhanced coverage of how an out-of-order processor operates and a new, simple technique for analyzing program performance based on the paths in a data-flow graph representation of a program. A web aside describes how C programmers can write programs that make use of the SIMD (single-instruction, multiple-data) instructions found in more recent versions of x86 processors.
  • Chapter 6: The Memory Hierarchy. Added material in solid-state disks, and an updated presentation based on the memory hierarchy of an Intel Core i7 processor.
  • Chapter 8: Exceptional Control Flow. An enhanced discussion of how the process model introduces some fundamental concepts of concurrency, such as nondeterminism.
  • Chapter 9: Virtual Memory. The memory system case study is updated to describe the 64-bit Intel Core i7 processor. The sample implementation of malloc is updated to work for both 32 and 64-bit execution.
  • Chapter 12: Concurrent Programming. Increased coverage of the general principles of concurrency, and a description of how programmers can use thread-level parallelism to make programs run faster on multi-core machines.
  • The old Chapter 9 (Measuring Program Execution Time), has been deleted. In addition, a number of practice and homework problems have been added or revised.

    Table of Contents
    1 A Tour of Computer Systems
    I Program Structure and Execution
    2 Representing and Manipulating Information
    3 Machine-Level Representation of Programs
    4 Processor Architecture
    5 Optimizing Program Performance
    6 The Memory Hierarchy
    II Running Programs on a System
    7 Linking
    8 Exceptional Control Flow
    9 Virtual Memory
    III Interaction and Communication Between Programs
    10 System-Level I/O
    11 Network Programming
    12 Concurrent Programming