Modules & lessons
Five modules, thirteen units, and eighty-one lessons. Every lesson follows the same eleven-part structure so the format is always predictable.
Third-Year Core · Asynchronous · Self-Paced
Principles, design, implementation, and evaluation of modern operating systems. Examine process and thread management, scheduling, synchronization, deadlocks, memory and virtual memory, file systems, storage, security, virtualization, and cloud operating systems — then build and measure these mechanisms yourself in Linux-based laboratories.
Course components
Seven kinds of component work together. Each has its own page in the course hierarchy, and each is aligned to one or more of the eight course learning outcomes.
Five modules, thirteen units, and eighty-one lessons. Every lesson follows the same eleven-part structure so the format is always predictable.
Twelve hands-on laboratories, one per major topic area, run in the supplied Linux VM. Each combines implementation, measurement, and analysis.
Thirteen unit-level quizzes, one per unit. Every quiz is available now, with full model answers for self-assessment.
Two substantial programming assignments. Assignment 1 focuses on processes, threads, and synchronization; Assignment 2 builds an operating-system simulator.
A midterm covering Modules 1–3, and a comprehensive final covering all thirteen units. Both papers include full instructor answer keys.
A substantial operating-system component with five project options, evaluated on design, functionality, depth, validation, documentation, and demonstration.
Thirteen unit-level discussion activities with applied prompts. Each requires a substantive original post and replies to two classmates.
Getting started
The course is complete: every module, laboratory, quiz, assignment, examination, project specification, and discussion is available now. Where you begin depends on your goals.
Whether you are new to the course or returning to it, complete Lesson 1.0 — Setting Up Your Course VM. It walks you through installing Ubuntu in a virtual machine, configuring the development toolchain, verifying the setup, and taking a baseline snapshot. Every other component in the course assumes you have completed it.
Course overview
An operating system is the layer of software that turns raw hardware into a usable, safe, and efficient machine. This course examines how that layer is designed, how its algorithms behave under load, and how its abstractions are implemented in a real kernel.
This course introduces the principles, design, implementation, and evaluation of modern operating systems. Students examine process and thread management, scheduling, synchronization, deadlocks, memory management, virtual memory, file systems, storage management, security, virtualization, and cloud operating systems.
Through Linux-based laboratories and programming assignments, students gain practical experience implementing and analyzing operating-system mechanisms.
You should be comfortable writing and debugging programs in C or C++, reading assembly-level explanations of hardware behaviour, and working from the command line.
Fully online, asynchronous, and self-paced. All content — readings, worked examples, interactive activities, knowledge checks, laboratories, and assessments — is available from day one.
Course learning outcomes
Every unit, lesson, laboratory, and assessment in this course maps back to one or more of the eight course learning outcomes below.
Curriculum
The course moves from foundations, through the concurrency and memory core of operating systems, into storage, security, and modern virtualized and cloud environments.
What an operating system is, how it evolved, what services it provides, and how its architecture shapes everything above it.
The heart of the course: process and thread abstractions, CPU scheduling, synchronization, and the deadlock problem.
From the memory hierarchy and address binding to paging, page replacement, and the control of thrashing.
How persistent data and devices are organised: files, inodes, journaling, drivers, interrupts, DMA, RAID, and SSDs.
Protection and access control, OS hardening, hypervisors, containers, orchestration, and cloud operating systems.
Laboratories
Every laboratory runs in the supplied Linux virtual machine using GCC, Make, Git, GDB, and the POSIX API. Each laboratory combines implementation, measurement, and analysis, and produces source code plus a written report. All twelve are available now.
~/comp3150/labs/.gcc -Wall -Wextra -g.
Complete Lesson 1.0 — Setting
Up Your Course VM and Lesson
2.5 — Development Environment first. The laboratories assume the
toolchain is installed and that the workspace directory
~/comp3150/ exists.
Take a snapshot named before-lab-n before starting
each laboratory. If the lab goes badly, revert to the snapshot
and start over with a clean environment.
| Lab | Topic | Related unit | Status | Link |
|---|---|---|---|---|
| Lab 1 | Linux Fundamentals | Unit 2 | Available | Open Lab 1 → |
| Lab 2 | Process Management | Unit 3 | Available | Open Lab 2 → |
| Lab 3 | POSIX Threads | Unit 4 | Available | Open Lab 3 → |
| Lab 4 | Scheduling Simulation | Unit 5 | Available | Open Lab 4 → |
| Lab 5 | Synchronization | Unit 6 | Available | Open Lab 5 → |
| Lab 6 | Deadlock Analysis | Unit 7 | Available | Open Lab 6 → |
| Lab 7 | Memory Management | Unit 8 | Available | Open Lab 7 → |
| Lab 8 | Virtual Memory | Unit 9 | Available | Open Lab 8 → |
| Lab 9 | File Systems | Unit 10 | Available | Open Lab 9 → |
| Lab 10 | Storage Systems | Unit 11 | Available | Open Lab 10 → |
| Lab 11 | Security | Unit 12 | Available | Open Lab 11 → |
| Lab 12 | Containers and Virtualization | Unit 13 | Available | Open Lab 12 → |
The full laboratory directory, with all instructions, submission requirements, and grading rubrics, is at labs/index.html.
Assignments · 35%
The two assignments are the largest individual programming tasks in the course before the final project. Each spans multiple weeks and draws on several units.
Design and implement a complete, concurrent log-analysis system that uses both processes and threads, communicates through pipes and shared memory, synchronises access to a bounded buffer with mutexes and condition variables, and shuts down gracefully on a signal. The assignment draws on every unit of Module 2.
| Criterion | Weight |
|---|---|
| Process implementation | 15% |
| Thread implementation | 20% |
| Synchronization design | 25% |
| Correctness | 20% |
| Code quality | 10% |
| Technical report | 10% |
Design, implement, test, and analyse a discrete-event simulator for one operating-system subsystem. Choose from three options — CPU scheduler, virtual-memory manager, or file system — and build it end to end with rigorous testing and quantitative analysis.
| Criterion | Weight |
|---|---|
| Requirements coverage | 20% |
| Algorithm correctness | 25% |
| System design | 20% |
| Testing and validation | 15% |
| Documentation | 10% |
| Code quality | 10% |
Examinations
Both examination papers are complete, with full instructor answer keys, model answers, marking guides, and formula sheets. They may be used for proctored assessment or for self-study and review.
A two-hour, closed-book examination covering Modules 1–3 — foundations, concurrency, and memory. Four parts: multiple choice, short answer, problems, and design/analysis. Includes a full instructor answer key with model answers and a marking guide.
A three-hour comprehensive examination covering all thirteen units, with emphasis on Modules 4–5 — file systems, storage, security, and virtualization. Same four-part structure as the midterm, with a full instructor answer key.
Final Project · 20%
A substantial operating-system component, evaluated on design, functionality, depth, validation, documentation, demonstration, and professional quality. Choose from five project options, each integrating multiple course topics.
Build a small but complete operating-system kernel for x86-64 that boots, manages memory, schedules processes, handles interrupts, and runs a simple user-space program.
Boot, paging, scheduling, syscallsBuild a container runtime from scratch — image pulling, root file-system assembly, namespace and cgroup configuration, and container lifecycle management.
Namespaces, cgroups, seccompBuild a type-2 hypervisor that uses KVM to run a guest virtual machine, including VM creation, memory mapping, virtual CPU management, and virtio-based I/O.
KVM, virtio, virtual CPUsBuild a component of a distributed operating system — a replicated key-value store, a cluster scheduler, or a distributed file system — with fault tolerance and consistency.
Replication, consensus, fault toleranceBuild a suite of tools that observe and diagnose a running Linux system: system-call tracer, scheduler analyser, memory profiler, I/O observer, integrated into a single dashboard.
ptrace, eBPF, /proc, perfThe project is worth 20% of the final grade and is assessed on seven criteria: technical design (20%), functionality (25%), complexity and depth (15%), testing and validation (15%), documentation (10%), demonstration (10%), and professional quality (5%). The demonstration is a required component.
Discussion activities · 5%
Every unit includes a graded discussion activity. Each requires a substantive original post plus replies to at least two classmates. All thirteen are available now, and each is tailored to the content of its unit.
Assessment
Assessment is continuous and applied. Roughly half of the final grade comes from laboratory and project work that you build and test yourself; the other half comes from quizzes, two assignments, and the midterm exam.
Thirteen unit-level quizzes with immediate feedback.
Twelve Linux laboratories, one per major topic area.
Processes, threads, and synchronization.
An operating-system simulator of your choosing.
Covers Modules 1–3: foundations, concurrency, memory.
Design, build, test, document, and demonstrate a system.
Thirteen unit discussion activities and peer engagement.
| Assessment | Weight | Primary outcomes |
|---|---|---|
| Quizzes (13) | 10% | CLO1–CLO5, CLO7 |
| Laboratories (12) | 15% | CLO2–CLO7 |
| Assignment 1 — Parallel Log Analyzer | 15% | CLO2, CLO3, CLO6, CLO8 |
| Assignment 2 — Operating-System Simulator | 20% | CLO3, CLO4, CLO5, CLO6, CLO8 |
| Midterm Exam | 15% | CLO1–CLO4 |
| Final Project | 20% | CLO2–CLO6, CLO8 |
| Participation (13 discussions) | 5% | CLO1, CLO3, CLO7 |
| Total | 100% |
Each unit ends with a quiz that covers that unit's lessons. All thirteen self-check quizzes are available now; each is ungraded and can be attempted repeatedly.
Alignment
Every course learning outcome is assessed in more than one way, so no single artefact carries the whole weight of an outcome.
| CLO | Quiz | Lab | A1 | A2 | Midterm | Final | Project | Discussion |
|---|---|---|---|---|---|---|---|---|
| CLO1 | ✓ | — | — | — | ✓ | ✓ | — | ✓ |
| CLO2 | ✓ | ✓ | ✓ | — | ✓ | ✓ | ✓ | — |
| CLO3 | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ | ✓ |
| CLO4 | ✓ | ✓ | — | ✓ | ✓ | ✓ | ✓ | — |
| CLO5 | ✓ | ✓ | — | ✓ | — | ✓ | ✓ | — |
| CLO6 | — | ✓ | ✓ | ✓ | — | — | ✓ | — |
| CLO7 | ✓ | ✓ | — | — | — | ✓ | — | ✓ |
| CLO8 | — | — | ✓ | ✓ | — | — | ✓ | — |
Resources
The primary textbook is an open educational resource and is freely available online. Secondary references are optional but recommended.
Arpaci-Dusseau, R. H., & Arpaci-Dusseau, A. C.
Operating Systems: Three Easy Pieces (OSTEP) — Open Educational Resource.
Open access Required readingAccreditation & design
This course is designed to satisfy the requirements of a required third-year operating systems course in Computer Science, Computing and Information Systems, Software Engineering, or Information Technology programs.
ACM CS2023 ABET Student Outcomes CEAB Graduate Attributes Canadian Degree Qualifications Framework Quality Matters Standards
Begin with Lesson 1.0 — Setting Up Your Course VM, then work through Lesson 1.1 and the rest of Unit 1 in order.
No. Unit 2 covers Linux architecture, the shell, users and groups, permissions, and the development environment before any systems programming begins.
Primarily C, with POSIX threads and the Linux system-call interface. Shell scripting is used for laboratory workflows.
Yes. All twelve laboratories, thirteen quizzes, two assignments, both examinations, the final project specification, and all thirteen discussion activities are available. The course is complete and can be taken in full.
The course is asynchronous and self-paced. Content is released in full, and the recommended schedule completes one unit per week across a thirteen-week term, with one laboratory every one to two weeks and the midterm after Lesson 9.7.
Yes — the laboratory-intensive variant carries an additional credit and expands the twelve laboratories with extended implementation work and additional validation requirements.
The course development plan specifies a midterm (15%) and a final project (20%), but no separate final examination. The comprehensive final examination is provided for assessment-plan variants that include it, or as a capstone review resource for the final project. Instructors should confirm the weighting in the course syllabus.
Start with Lesson 1.0 — Setting Up Your Course VM, then work through Module 1. Everything you need is already available.