# Computer Systems

> The Introduction to Computer Systems course provides a programmer's view of how computer systems execute programs, store information, and communicate. It enables students to become more effective programmers, especially in dealing with issues of performance, portability and robustness. It also serves as a foundation for courses on compilers, networks, operating systems, and computer architecture, where a deeper understanding of systems-level issues is required.
>
> Topics covered include: machine-level code and its generation by optimizing compilers, performance evaluation and optimization, computer arithmetic, memory organization and management, networking technology and protocols, and supporting concurrent computation.

**Course Website**: [https://www.cs.cmu.edu/\~213/](https://www.cs.cmu.edu/~213/)

**Textbook**: Computer Systems: A Programmer’s Perspective, Third Edition

## Course Overview

Abstraction is good, but don't forget reality.

### Programs and Data

* Bits operations, arithmetic, assembly language programs
* Representation of C control and data structures
* Aspects of architecture and compilers

### The Memory Hierarchy

* Memory technology, memory hierarchy, caches, disks, etc.
* Aspects of architecture and operating systems

### Exceptional Control Flow

* Hardware exceptions, processes, process control, UNIX signals, non-local jumps
* Aspects of compilers, operating systems, and architecture

### Virtual Memory

* Virtual memory, address translation, dynamic storage allocation
* Aspects of architecture and operating systems

### Networking and Concurrency

* High-level and low-level I/O
* Internet services and web servers
* Concurrency, threads
* I/O multiplexing with select
* Aspects of networking, operating systems, and architecture
