Skip to main content

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:

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.

TopicReadingsLecturesLabs
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 for char *.)
  • 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