Computer Systems: A Programmer's Perspective (Global Edition)
A comprehensive deep-dive into how computer systems execute programs and store information. This course bridges the gap between high-level programming and the underlying hardware, covering machine-level representation, processor architecture, memory hierarchy, and concurrent programming.
Course Overview
Content Summary
A comprehensive deep-dive into how computer systems execute programs and store information. This course bridges the gap between high-level programming and the underlying hardware, covering machine-level representation, processor architecture, memory hierarchy, and concurrent programming.
Master the art of systems programming by understanding the hardware-software interface.
Author: Randal E. Bryant, David R. O'Hallaron
Acknowledgments: Supported by the students and instructors of the 15-213 course at Carnegie Mellon University. Acknowledgments include contributions from Manasa S. and Mohit Tahiliani.
Learning Objectives
- Identify how information is represented using bits and context within a system.
- Trace the four stages of the compilation system from source code to executable.
- Describe the organizational structure of hardware and the hierarchical nature of storage devices.
- Convert between decimal, binary, and hexadecimal notations and explain machine-level addressing (Endianness).
- Perform bit-level and logical operations in C and predict the results of arithmetic shifts.
- Analyze integer encodings to identify potential overflow vulnerabilities and casting errors.
- Analyze the mapping between C constructs (loops, branches, procedures) and x86-64 assembly instructions.
- Deconstruct the run-time stack to explain how parameters are passed, local variables are stored, and recursive calls are managed.
- Evaluate memory layouts for heterogeneous data structures and apply alignment rules to calculate total storage requirements.
- Define the Y86-64 Programmer-Visible State and encode/decode instructions into byte sequences.