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




- 在章節中穿插了大量的練習問題,鼓勵學生積極閱讀
- 一套評級的大量家庭作業問題
- 一套實驗室(包括著名的“二進制炸彈實驗室”),提供支持軟件和詳細的教學討論
- 網絡附錄,補充了書的主要內容,並可從CS:APP網頁上獲取

- 第2章:信息的表示和操作。作者增加了更仔細的概念解釋和更多的練習和家庭作業問題,以使材料更易理解。一些更理論性的方面被移至網絡附錄。包括了由於計算機算術的溢出特性而產生的一些安全漏洞的描述。
- 第3章:程序的機器級表示。擴展了對x86-64的覆蓋,即將x86處理器擴展到64位字長。使用了由更新版本的gcc生成的代碼。增強了對緩衝區溢出漏洞的覆蓋。網絡附錄包括了兩種不同類型的浮點指令,以及編譯器在優化程度更高時進行的更奇特的轉換。
- 第4章:處理器架構。對處理器設計中的異常檢測和處理進行了更仔細的闡述。新增了一個網絡附錄,展示了將處理器設計映射到Verilog的方法,使其能夠合成為可工作的硬件。
- 第5章:程序性能優化。大大增強了對於無序處理器的操作方式的覆蓋,並介紹了一種基於程序的數據流圖表示的分析程序性能的簡單技術。一個網絡附錄描述了C程序員如何編寫利用最新版本x86處理器中的SIMD(單指令多數據)指令的程序。
- 第6章:內存層次結構。增加了關於固態硬盤的材料,並根據Intel Core i7處理器的內存層次結構進行了更新的介紹。
- 第8章:異常控制流。對處理模型引入的一些並發的基本概念(如非確定性)進行了增強的討論。
- 第9章:虛擬內存。更新了內存系統案例研究,以描述64位Intel Core i7處理器。更新了malloc的示例實現,使其適用於32位和64位執行。
- 第12章:並發編程。增加了對並發一般原則的覆蓋,以及描述程序員如何使用線程級並行性來提高性能的描述。