Intro to Computer Systems
Nand2Tetris
Timeline: 114 - 186 hours
Nand2Tetris provides a basic introduction to computer architecture and computer systems, scratching the surface of almost every subject in computer science, and showing you how they all fit together.
Primary topics: digital logic circuits, boolean algebra, computer architecture, computer systems, operating systems, compilers
Extra Resources:
- The Elements of Computing Systems: Building a Modern Computer from First Principles
The textbook for the course is a great supplement to the video lectures and projects.
Computer Systems (Recommended)
Timeline: 40-60 hours
This course acts as a stand-in for CS-354: Intro to Computer Systems taught at the University of Wisconsin-Madison, which acts as an introduction to real-world computer systems. This course is not strictly required for students who wish to do the base approach to OSTEP, however, it is highly recommended, as it gives valuable insight into how to program for real hardware. For the extended approach, this course is strictly required.
The course covers 3 main topics:
- Intro to C
- Machine Programming with x86
- The Memory Hierarchy
The primary textbook for this course is Dive into Systems with selected lectures from CMU 15-213 and labs from CS:APP. You do not need the CS:APP textbook to complete these labs. The readings are assigned as whole chapters. This means that when you are assigned eg. chapter 1 as a reading, you should read the chapter introduction as well as sections 1.1 through 1.8. Remember to do the exercises after each chapter.
Topic | Readings | Lectures | Labs |
---|---|---|---|
Intro to C Programming | [1] | [C Review] | |
Binary Data Representation | [4] | [2] [3] [4] | Data Lab: Writeup, Handout, Recitation |
Machine-Level Programming | [6] [7] [10] | [5] [6] [7] [8] [9] | Bomb Lab: Writeup, Handout, Recitation |
C continued | [2] [3] | [13] | |
The Memory Hierarchy | [11] | [11] [12] | Cache Lab: Writeup, Handout, Recitation |
Additional Resources
- Computer Systems: A Programmer's Perspective, Third Edition
This most excellent textbook provides a thorough introduction to the topic of systems programming. Besides covering all material encountered in this course, it also covers additional material such as virtual memory, system level I/O, basic networking and concurrency in C. If you're serious about systems-level programming, this book is a must-have. Beware that the Global Edition is riddled with errors in its exercises and solutions. This edition is not recommended.
C
- CS 50 Manual Pages: a great reference for looking up C library functions; most functions include both the usual manual as well as a beginner-friendly "less comfortable" option (just note that the "less comfortable" version uses
string
as an alias forchar *
.) - cdecl: a tool to translate C gibberish into English.
- Secure Coding Practices in C and C++: if you want to understand why other C resources are so unsafe.
- The C Programming Language: the original book on C by its creators.
Assembly
- CPU Registers x86: good for looking up specific registers.
- PC Assembly Language: a short book on x86 assembly.
- GCC Inline Assembly HOWTO: a guide to writing assembly code inside a C program.
- Intel 80386 Programmer's Reference Manual: the official (and huge) resourcefrom Intel.