General Information


Course Description

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. Homeworks will be based on Linux, XV6, and DMTCP.

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.

In this course, students will be exposed to various aspects of computer systems, including but not limited to: hardware resources (CPU cores, Caches, MMU, RAM); the operating system (process synchronization and inter-process communication, CPU scheduling, virtual memory, interrupts, file systems, etc.); the linkers and loaders; the memory and POSIX threads API; and Python as a scripting language.

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 and XV6 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 that will be due on the first day of class.

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:
  • 25%: Exam(s)
  • 40%: Homework assignments
  • 10%: Quizzes
  • 25%: A team-based class-project
The weights assigned to exam(s) and class project are subject to change!