Computer Systems: A Programmer's Perspective, 3rd edition
Published by Pearson (March 2, 2015) © 2016
- Randal E. Bryant Carnegie Mellon University
- David R. O'Hallaron Carnegie Mellon University
eTextbook
- Anytime, anywhere learning with the Pearson+ app
- Easy-to-use search, navigation and notebook
- Simpler studying with flashcards
- Hardcover, paperback or looseleaf edition
- Affordable rental option for select titles
Mastering
For courses in computer science and programming.
A programmer's perspective
Computer Systems explains the underlying elements common among all computer systems and how they affect general application performance. Written from the programmer's perspective, this book shows students how understanding elements of computer systems can lead them to create better programs. This comprehensive introduction to programming provides opportunities for students to practice working problems as well as writing and running programs.
The 3rd Edition now exclusively bases its presentation on x86-64 machine code. It is recommended that students have basic familiarity with C or C++, and access to a Linux system.
Hallmark features of this title
- Comprehensive coverage. A carefully planned 12 chapter layout covers all of the core topics of computer programming.
- A programmer's perspective. Presents the concepts of computer systems in a way that allows application programmers to use their knowledge of a system to write better programs. This book focuses on systems that execute an x86-64 machine code, and recommends that students have access to a Linux system for this course. Students should have basic familiarity with C or C++.
- Learn by doing. When a new concept is introduced, it is immediately followed by one or more practice problems. Students can check their answers at the end of the chapter. Sets of homework problems of varying difficulty are included for each chapter.
- Instructor resources. The Instructor's Resource Manual, lecture notes, lab assignments, exam problems and code examples are available to instructors on a password-protected website. To request access, visit http://csapp.cs.cmu.edu/3e/instructors.html
New and updated features of this title
The book now exclusively bases its presentation on x86-64
- UPDATED: Chapter 1 includes a discussion of Amdahl's law, originally in chapter 5.
- UPDATED: Chapter 2 has been rewritten to simplify mathematical presentations helping students to better understand its major concepts.
- UPDATED: Chapter 3 has been rewritten heavily based on the book's conversion from using a mix of IA32 and x86-64 software to one that solely uses the latter. This includes reorganization of major concepts and a new presentation of machine-level support for programs operating on floating-point data.
- REVISED: Chapter 4 has been revised to support 64-bit words and operations of earlier processor design.
- UPDATED: Chapter 5 contains new material on the performance capabilities of recent generations of x86-64 processors, which is a more reliable predictor of performance.
- UPDATED: Chapter 6 now reflects more recent technology.
- UPDATED: Chapter 7 has been rewritten to support x86-64. The discussion of using the GOT and PLT to create position-independent code has been expanded. There is also a new section about library interpositioning.
- UPDATED: Chapter 8 has more in-depth information about signal handlers, including asynic-signal-safe functions, specific guidelines for writing signal handlers, and using sigsuspend to wait for handlers.
- NEW: Chapter 10 now includes a section on files and the file hierarchy.
- NEW: Chapter 11 introduces techniques for protocol-independent and thread-safe network programming using the modern getaddrinfo and getnameinfo functions to replace older, obsolete functions.
- UPDATED: Chapter 12 includes greater coverage of using thread-level parallelism to make programs run faster on multi-core machines.
Features of Mastering Computer Science for the 3rd Edition
- Tutorial homework problems emulate the instructor's office-hour environment, guiding students through concepts in multi-step problems. Wrong-answer specific feedback is given, along with optional hints to break a problem down further.
- Adaptive Follow-ups are targeted problem sets that follow a homework assignment and provide additional practice to address gaps in understanding. Repeatedly presenting concepts over spaced intervals helps students understand and retain information.
- The Mastering gradebook records all scores for automatically graded assignments. Struggling students and challenging assignments are highlighted in red, giving you an at-a-glance view of potential hurdles in the course.
- With Learning Catalyticsâ„¢, you'll hear from every student when it matters most. You pose a variety of questions that help students recall ideas, apply concepts, and develop critical-thinking skills, and students respond using their own smartphone, tablet, or laptop.
Part I: Program Structure and Execution
Chapter 1: A Tour of Computer Systems
Chapter 2: Representing and Manipulating Information
Chapter 3: Machine-Level Representation of Programs
Chapter 4: Processor Architecture
Chapter 5: Optimizing Program Performance
Chapter 6: The Memory Hierarchy
Â
Part II: Running Programs on a System
Chapter 7: Linking
Chapter 8: Exceptional Control Flow
Chapter 9: Virtual Memory
Â
Part III: Interaction and Communication Between Programs
Chapter 10: System-Level I/O
Chapter 11: Network Programming
Chapter 12: Concurrent Programming
Â
Appendix
Error Handling
About our authors
Randal E. Bryant received his bachelor’s degree from the University of Michigan in 1973 and then attended graduate school at the Massachusetts Institute of Technology, receiving his PhD 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. For five of those years he served as head of the Computer Science Department, and for ten of them he served as Dean of the School of Computer Science. He is currently a university professor of computer science. He also holds a courtesy appointment with the Department of Electrical and Computer Engineering.
Professor Bryant has taught courses in computer systems at both the undergraduate and graduate level for around 40 years. Over many years of teaching computer architecture courses, he began shifting the focus from how computers are designed to how programmers can write more efficient and reliable programs if they understand the system better. Together with Professor O’Hallaron, he developed the course 15-213, Introduction to Computer Systems, at Carnegie Mellon that is the basis for this book. He has also taught courses in algorithms, programming, computer networking, distributed systems, and VLSI design.
Most of Professor Bryant’s research concerns the design of software tools to help software and 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 150 technical papers. His research results are used by major computer manufacturers, including Intel, IBM, Fujitsu, and Microsoft. 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, the Emmanuel Piore Award, the Phil Kaufman Award, and the A. Richard Newton Award from the Institute of Electrical and Electronics Engineers (IEEE). He is a fellow of both the ACM and the IEEE and a member of both the US National Academy of Engineering and the American Academy of Arts and Sciences.
David R. O’Hallaron is a professor of computer science and electrical and computer engineering at Carnegie Mellon University. He received his PhD from the University of Virginia. He served as the director of Intel Labs, Pittsburgh, from 2007 to 2010.
He has taught computer systems courses at the undergraduate and graduate levels for 20 years on such topics as computer architecture, introductory computer systems, parallel processor design, and Internet services. Together with Professor Bryant, he developed the course at Carnegie Mellon that led to this book. In 2004, he was awarded the Herbert Simon Award for Teaching Excellence by the CMU School of Computer Science, an award for which the winner is chosen based on a poll of the students.
Professor O’Hallaron works in the area of computer systems, with specific interests in software systems for scientific computing, data-intensive computing, and virtualization. The best-known example of his work is the Quake project, an endeavor involving a group of computer scientists, civil engineers, and seismologists who have developed the ability to predict the motion of the ground during strong earthquakes. In 2003, Professor O’Hallaron and the other members of the Quake team won the Gordon Bell Prize, the top international prize in high-performance computing. His current work focuses on the notion of autograding, that is, programs that evaluate the quality of other programs.
Need help? Get in touch