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!