CS 61: Systems Programming and Machine Organization (2021)
Harvard School of Engineering and Applied Sciences
Eddie Kohler
Lectures: Tuesday and Thursday, 11:15am–12:30pm
Location: SEC 1.321 Lecture Hall, Allston
Course Description
| Setup
| Grading server
Git
| Coding style
| C and C++ patterns
Lecture feedback
| Canvas (videos, Ed discussion, calendar)
| Course staff
Announcements
- Problem sets: 1 (dmalloc), 2 (bomb), 3 (WeensyOS), 4 (Stdio), 5 (Shell), 6 (Breakout)
- Lecture notes: Datarep 9/2, 9/7, 9/9, 9/14, 9/16, 9/21; Asm full notes, 9/23, 9/28, 9/30, 10/5; Kernel full notes, 10/7, 10/12, 10/14; EthiCS 10/21: prep, ethics, UTF-8; Storage full notes, 10/26, 10/28, 11/2, 11/4; Process control full notes, 11/9, 11/11, 11/16; Synchronization full notes, 11/18, 11/23, 11/30, 12/2
- Section notes: 1 (C++ data structures), 2 (memory bugs), 3 (datarep exercises), 4 (fun), 5 (asm exercises), 6 (virtual memory), 7 (kernel exercises), 8 (single-slot cache), 9 (storage exercises), 10 (shell representation), 11 (process control exercises), 12 (threads and lock granularity)
- Exercises: Datarep, Assembly, Kernel, Storage, Process control, Synchronization
- Lecture code repository
- Lecture videos are posted on the Canvas site under “Extension Course Videos”; to join a live lecture, use the “Zoom” link.
- Problem set 0: a warmup problem set that introduces you to course infrastructure
About
CS 61 is an introduction to the fundamentals of computer systems programming. Topics include C, C++, and assembly language programming, performance analysis and improvement strategies, memory management, caching, concurrency, threads, and synchronization.
CS 61 will help you develop the skills to write programs for the real world, where performance and robustness really matter. It will also prepare you for more advanced CS courses, including operating systems, compilers and programming languages, architecture, and graphics. We want it to be fun and challenging.
The 2021 offering of the course will include more material on software engineering, such as testing code and reasoning about code.
Full course description with policies
Prerequisites
CS 50, CS 51, or the instructor’s permission.
Note: This course requires programming in C++. Ideally you should already have experience programming in C or C++. If you have not previously programmed in C or C++ but know another procedural language, such as Java, you will likely be able to quickly learn what you need. Talk to one of the instructors if you are unsure whether you are sufficiently prepared for CS 61, or do the ungraded warmup assignment to check your preparation.
Textbook
Computer Systems: A Programmer’s Perspective, Third Edition by Randal E. Bryant and David R. O’Hallaron. More information and readings by topic
College concentration requirements
CS 61 satisfies the Programming 2 and Systems requirements for the computer science concentration, and may be used as one of the four CS courses to satisfy the requirements for a secondary field in computer science.
Extension school
CS 61 is offered through the Extension School as CSCI E-61. See information for Extension students.