Dive Into Systems

Book description

Dive Into Systems is a vivid introduction to computer organization, architecture, and operating systems that is already being used as a classroom textbook at more than 25 universities.

This textbook is a crash course in the major hardware and software components of a modern computer system. Designed for use in a wide range of introductory-level computer science classes, it guides readers through the vertical slice of a computer so they can develop an understanding of the machine at various layers of abstraction.

Early chapters begin with the basics of the C programming language often used in systems programming. Other topics explore the architecture of modern computers, the inner workings of operating systems, and the assembly languages that translate human-readable instructions into a binary representation that the computer understands. Later chapters explain how to optimize code for various architectures, how to implement parallel computing with shared memory, and how memory management works in multi-core CPUs. Accessible and easy to follow, the book uses images and hands-on exercise to break down complicated topics, including code examples that can be modified and executed.

Table of contents

  1. Cover Page
  2. Title Page
  3. Copyright Page
  4. BRIEF CONTENTS
  5. CONTENTS IN DETAIL
  6. ACKNOWLEDGMENTS
  7. PREFACE
  8. 0 INTRODUCTION
    1. What Is a Computer System?
    2. What Do Modern Computer Systems Look Like?
    3. What You Will Learn In This Book
    4. Getting Started with This Book
    5. Notes
  9. 1 BY THE C, BY THE C, BY THE BEAUTIFUL C
    1. 1.1 Getting Started Programming in C
    2. 1.2 Input/Output (printf and scanf)
    3. 1.3 Conditionals and Loops
    4. 1.4 Functions
    5. 1.5 Arrays and Strings
    6. 1.6 Structs
    7. 1.7 Summary
  10. 2 A DEEPER DIVE INTO C PROGRAMMING
    1. 2.1 Parts of Program Memory and Scope
    2. 2.2 C’s Pointer Variables
    3. 2.3 Pointers and Functions
    4. 2.4 Dynamic Memory Allocation
    5. 2.5 Arrays in C
    6. 2.6 Strings and the String Library
    7. 2.7 C Structs
    8. 2.8 I/O in C (Standard and File)
    9. 2.9 Some Advanced C Features
    10. 2.10 Summary
  11. 3 C DEBUGGING TOOLS
    1. 3.1 Debugging with GDB
    2. 3.2 GDB Commands in Detail
    3. 3.3 Debugging Memory with Valgrind
    4. 3.4 Advanced GDB Features
    5. 3.5 Debugging Assembly Code
    6. 3.6 Debugging Multithreaded Programs with GDB
    7. 3.7 Summary
  12. 4 BINARY AND DATA REPRESENTATION
    1. 4.1 Number Bases and Unsigned Integers
    2. 4.2 Converting Between Bases
    3. 4.3 Signed Binary Integers
    4. 4.4 Binary Integer Arithmetic
    5. 4.5 Integer Overflow
    6. 4.6 Bitwise Operators
    7. 4.7 Integer Byte Order
    8. 4.8 Real Numbers in Binary
    9. 4.9 Summary
  13. 5 WHAT VON NEUMANN KNEW: COMPUTER ARCHITECTURE
    1. 5.1 The Origin of Modern Computing Architectures
    2. 5.2 The von Neumann Architecture
    3. 5.3 Logic Gates
    4. 5.4 Circuits
    5. 5.5 Building a Processor: Putting It All Together
    6. 5.6 The Processor’s Execution of Program Instructions
    7. 5.7 Pipelining: Making the CPU Faster
    8. 5.8 Advanced Pipelined Instruction Considerations
    9. 5.9 Looking Ahead: CPUs Today
    10. 5.10 Summary
  14. 6 UNDER THE C: DIVING INTO ASSEMBLY
  15. 7 64-BIT X86 ASSEMBLY (X86-64)
    1. 7.1 Diving into Assembly: Basics
    2. 7.2 Common Instructions
    3. 7.3 Arithmetic Instructions
    4. 7.4 Conditional Control and Loops
    5. 7.5 Functions in Assembly
    6. 7.6 Recursion
    7. 7.7 Arrays
    8. 7.8 Matrices
    9. 7.9 structs in Assembly
    10. 7.10 Real World: Buffer Overflow
  16. 8 32-BIT X86 ASSEMBLY (IA32)
    1. 8.1 Diving into Assembly: Basics
    2. 8.2 Common Instructions
    3. 8.3 Arithmetic Instructions
    4. 8.4 Conditional Control and Loops
    5. 8.5 Functions in Assembly
    6. 8.6 Recursion
    7. 8.7 Arrays
    8. 8.8 Matrices
    9. 8.9 structs in Assembly
    10. 8.10 Real World: Buffer Overflow
  17. 9 ARM ASSEMBLY
    1. 9.1 Diving into Assembly: Basics
    2. 9.2 Common Instructions
    3. 9.3 Arithmetic Instructions
    4. 9.4 Conditional Control and Loops
    5. 9.5 Functions in Assembly
    6. 9.6 Recursion
    7. 9.7 Arrays
    8. 9.8 Matrices
    9. 9.9 structs in Assembly
    10. 9.10 Real World: Buffer Overflow
  18. 10 KEY ASSEMBLY TAKEAWAYS
    1. 10.1 Common Features
    2. 10.2 Further Reading
  19. 11 STORAGE AND THE MEMORY HIERARCHY
    1. 11.1 The Memory Hierarchy
    2. 11.2 Storage Devices
    3. 11.3 Locality
    4. 11.4 CPU Caches
    5. 11.5 Cache Analysis and Valgrind
    6. 11.6 Looking Ahead: Caching on Multicore Processors
    7. 11.7 Summary
  20. 12 CODE OPTIMIZATION
    1. 12.1 Code Optimization First Steps: Code Profiling
    2. 12.2 Other Compiler Optimizations: Loop Unrolling and Function Inlining
    3. 12.3 Memory Considerations
    4. 12.4 Key Takeaways and Summary
  21. 13 THE OPERATING SYSTEM
    1. 13.1 How the OS Works and How It Runs
    2. 13.2 Processes
    3. 13.3 Virtual Memory
    4. 13.4 Interprocess Communication
    5. 13.5 Summary and Other OS Functionality
  22. 14 LEVERAGING SHARED MEMORY IN THE MULTICORE ERA
    1. 14.1 Programming Multicore Systems
    2. 14.2 Hello Threading! Writing Your First Multithreaded Program
    3. 14.3 Synchronizing Threads
    4. 14.4 Measuring the Performance of Parallel Programs
    5. 14.5 Cache Coherence and False Sharing
    6. 14.6 Thread Safety
    7. 14.7 Implicit Threading with OpenMP
    8. 14.8 Summary
  23. 15 LOOKING AHEAD: OTHER PARALLEL SYSTEMS AND PARALLEL PROGRAMMING MODELS
    1. 15.1 Heterogeneous Computing: Hardware Accelerators, GPGPU Computing, and CUDA
    2. 15.2 Distributed Memory Systems, Message Passing, and MPI
    3. 15.3 To Exascale and Beyond: Cloud Computing, Big Data, and the Future of Computing
  24. INDEX

Product information

  • Title: Dive Into Systems
  • Author(s): Suzanne J. Matthews, Tia Newhall, Kevin C. Webb
  • Release date: September 2022
  • Publisher(s): No Starch Press
  • ISBN: 9781718501362