Course Description

Computer Systems discusses computers as an integrated whole, including: hardware resources (e.g., CPU cores, CPU cache, memory management unit (MMU), RAM), the operating system (process synchronization and iter-process communication, CPU scheduling, interrupts), POSIX threads, the shell (the original UNIX scripting language), devices, linkers and loaders; file-systems; and virtualization (including both containers and virtual machines), and an introduction to distributed systems (concurrency, consensus, and fault-tolerance). This course will be conducted in a non-traditional manner. In particular, rather than teaching a textbook-style course that limits itself to "toy" academic projects, this course will expose the student to some real-world projects.

In order to prepare the students for these real-world projects, the course homeworks during the first half of the semester will provide a rigorous background. During the second half of the semester, students will be required to work on a real-world project of relevance today, including but not limited to container orchestration, the Cloud, live migration, storage, and fault tolerance.

Finally, there will also be weekly reading assignments from systems papers, both classic works and current papers on the newer technologies. Surprise quizzes will be used to ensure that students keep up with the readings.

Prerequisites

This course requires working knowledge of a high level language (C/C++/Java), data structures and computer organization (along with passive knowledge of assembly language). This course will use Linux (with XV6 code browsing) extensively, thus one should be familiar with a UNIX-style operating system. To better prepare students for the class, a homework (HW0) has been assigned.

Textbooks

Academic Integrity

Read and intimately familiarize yourselves with the Northeastern Academic Integrity policy. Please ask, if you're not sure what's allowed.

Course Organization and Workload

There will be a variety of homework assignments, plus quizzes, a midterm and a team project. They will be weighted as:
  • 35%: Exam(s)
  • 40%: Homeworks and quizzes
  • 25%: A team-based class-project
The weights assigned to exam(s) and class project are subject to change!

Schedule

This is an approximate plan. I reserve the right to update it based on the interests and background of the class and/or time constraints. The reading list will be updated as we progress in the semester. Please check back regularly for the assigned readings for the quiz.
Week Topics Chapter/Assigned Reading
Sept. 10 Intro to process model; system calls;
cpu/memory state; C Pointers
MIPS assembly
class lecture, xv6:syscall.c, xv6:sysproc
The UNIX Time-Sharing System
Sept. 17 UNIX shell, fork/exec/wait; signals;
linking and loading; env vars;
file descriptors, I/O re-direction;
Intro. to scheduling: get/seccontext
Ch. 4--6, Ch. 2 (code), Ch. 5 (code);
xv6: file.c, sysfile.c, pipe.c, proc.[ch]
Readings:
Sept. 24 POSIX Threads, Concurrency; a first look at Locks
Ch. 28--31, xv6:spinlock.c
Required readings: Optional readings:
Oct. 1 Virtual Memory, clock algo.; Cache/MMU/TLB
class lecture; Ch. 13--15, Ch. 17--19,
xv6: memlayout.h, exec.c, kalloc.c, mmu.h, and vm.c
Required reading:
Virtual memory, processes, and sharing in multics
Optional suggested reading:
What Every Programmer Should Know About Memory
Oct. 8 University holiday: Columbus Day -- no class
Oct. 15 CPU Caches class lecture
Oct. 22 Device I/O; storage
Oct. 29 Filesystems Class lecture; Ch. 37 - 43
xv6: fs.c,file.c,sysfile.c,exec.c
Readings:
Nov. 5 Midterm
Nov. 12 University holiday: Veterans Day -- no class
Nov. 19 Linux Containers, Docker, Cloud, Orchestration class lecture
Nov. 26 Distributed Systems;
Security
class lecture
Dec. 3 Virtual Machines class lecture
ostep.org: App B
Dec. 10 Project presentations Final Projects Due