Schedule

The schedule below shows the tentative dates for all class topics, readings, and assignments. You should complete all assigned reading before class on the day it is listed. Labs will be available shortly before the assigned lab day. There may be some revisions to the schedule during the semester, but I will make sure to announce these changes in class. If you view this page with JavaScript enabled you can jump to the current week on the schedule, and you should see the next day of class highlighted in the schedule below.

Week 0
F
Aug 27

Introduction

We’ll begin the course by discussing operating systems generally. What is an OS? What is its job? How does it work? We’ll also spend some time practicing C programming, which will be an important tool you’ll use to learn OS concepts this term.

Reading
Week 1
M
Aug 30

C Practice

We’ll spend today’s class practicing C programming. We’ll also discuss standards for coding style, comments, and other guidelines you’ll be expected to follow for all assignments and labs in this class.

Reading
Assigned
  • Assignment: Ngram Generator

W
Sep 1

Debugging Practice

Today we will practice using gdb to track down bugs in C programs. We’ll also finish up some of the discussion of C programming that was originally scheduled for Monday.

Reading
Activities
  • Exercise: Debugging

F
Sep 3

Processes and System Calls

Today we’ll discuss a key OS abstraction: the process. We’ll talk about why and how we use processes on Linux.

Reading
Week 2
M
Sep 6

Address Spaces and Memory

Address spaces are an important abstraction that makes it possible for the OS to run processes in isolation. We’ll look at the high-level idea of an address space, learn about how you interact with address spaces in code, and discuss some of the basic mechanisms that an OS can use to implement address spaces.

Reading
Assigned
  • Assignment: Sorted List
Due
  • Assignment: Ngram Generator (by 11:59pm)

W
Sep 8

Lab Day: Shell

In today’s lab you will implement a shell, the program that runs in a terminal window. Shells make it possible for users to interact with an operating system, so building your own will give you a chance to practice writing code to communicate with the OS. You’ll also get to practice dealing with user input in C.

Reading
  • Review lab before class
Assigned
  • Lab: Shell

F
Sep 10

Segmentation and Paging

Today we will look in detail at two real mechanisms that the OS uses to create address spaces.

Reading
Week 3
M
Sep 13

Memory Errors, Virtual Memory continued

We’ll use today’s class to think carefully about the types of memory errors a program can have. We’ll catch up on any aspects of virtual memory we didn’t get to in the previous days.

Reading
Assigned
  • Assignment: Archive Printer
Tu
Sep 14

Work Due

Reading

No reading

Due
  • Assignment: Sorted List (by 11:59pm)
W
Sep 15

Lab Day: Virtual Memory

Today’s lab will test your understanding of address spaces and the memory API. You’ll take advantage of Linux’s address space features to write some interesting and useful code.

Reading
  • Review lab before class
Assigned
  • Lab: Virtual Memory
Due
  • Lab: Shell (by 11:59pm)

F
Sep 17

Swapping

One important use of virtual memory that goes beyond simply isolating processes from each other is swapping. This makes it possible for an OS to run programs that don’t fit in the amount of memory on the system. We’ll look at why this is useful and how it works.

Reading
Week 4
M
Sep 20

Virtual Memory Wrap-Up

We’ll conclude our discussion of virtual memory by looking at the complete VM system from malloc down to disk space. This broader view leads us to some interesting applications of virtual memory, as well as some important security issues.

Reading
Assigned
  • Assignment 4
Due
  • Assignment: Archive Printer (by 11:59pm)

W
Sep 22

Lab Day: Memory Allocator

Today’s lab will be one of the most challenging of the semester. You’ll use your new understanding of virtual memory and the memory API to implement a memory allocator, the code that provides malloc and free for other programs.

Reading
Assigned
  • Lab: Memory Allocator
Due
  • Lab: Virtual Memory (by 11:59pm)

F
Sep 24

Files and Directories

Reading
Week 5
M
Sep 27

Filesystems

Today we’ll begin looking at how an operating system can store users’ files and directories on a disk, and how that storage can be made reliable.

Reading
Assigned
  • Assignment: Listing Directories

W
Sep 29

Lab Working Day

You’ll have time during class today to continue working on your malloc implementations.

Reading

No reading


F
Oct 1

Filesystems, Continued

This class gives us a chance to wrap up our discussion of filesystems. If we’re on schedule there will be some additional readings about filesystems, otherwise we’ll just use the time to wrap up topics from Monday’s class.

Reading
  • Review FSCK and Journaling reading assigned on Monday
Week 6
M
Oct 4

CPU Scheduling

We’ve seen how we can support multiple programs running on a single machine with processes and address spaces, but how does the OS decide which one to run at any given time? This is the job of the CPU scheduler. We’ll look at a few scheduling algorithms and discuss their advantages and drawbacks.

Reading
Assigned
  • Assignment 6
Due
  • Assignment: Listing Directories (by 11:59pm)

W
Oct 6

Lab Day: Worm

Today’s lab will require that you use your new understanding of CPU scheduling to write a scheduler for a console game. The game, a clone of the classic Snake game, is composed of a series of tasks. You will build the system that tracks these tasks and executes them at the appropriate times.

Reading
  • Review lab before class
Assigned
  • Lab: Worm!
Due
  • Lab: Memory Allocator (by 11:59pm)

F
Oct 8

CPU Scheduling, Continued

Reading
Week 7
M
Oct 11

Threads

While processes make it possible to run multiple programs on a single machine, sometimes we might like a single program to do multiple tasks at a time. Threads make it possible for a single process to run multiple operations concurrently. We’ll look at why threads are useful, how to create and interact with threads in Linux, and what makes thread programming particularly challenging.

Reading
Assigned
  • Assignment 7

W
Oct 13

Lab Day: Password Cracker

For today’s lab, you will solve an embarassingly parallel problem using threads. An embarassingly parallel problem is one that is easy to distribute over multiple threads.

Reading
  • Review lab before class
Assigned
  • Lab: Password Cracker
Due
  • Lab: Worm! (by 11:59pm)

F
Oct 15

Threads, Continued

We’ll continue our introduction to threads, practice writing some parallel code, and begin to look at where things can go wrong in concurrent programs.

Reading

No reading

Fall Break
Week 8
M
Oct 25

Introduction to GPUs

Today we will learn how to use graphics processing units (GPUs) to write parallel programs that, when carefully designed, can run tens or hundreds of times faster than parallel programs that use threads on conventional processors.

Reading
Activities
  • Exercise: Introduction to GPUs
  • Exercise: CUDA Memory
Assigned
  • Assignment 8

W
Oct 27

Introduction to GPUs, Continued

Reading

No reading


F
Oct 29

Lab Day: GPU Sudoku Solver

This week’s lab will require you to implement a parallel computation that can run on a GPU. This computation will be part of a larger system that uses the GPU as a co-processor, a common model for modern workloads.

Reading
  • Review lab before class
Assigned
  • Lab: GPU Sudoku Solver
Due
  • Lab: Password Cracker (by 11:59pm)
Week 9
M
Nov 1

Synchronization with Locks

We’ll build on our understanding of threads from the previous class and look at how we can use locks to control concurrent accesses to data structures.

Reading
Activities
  • Exercise: Locks
Assigned
  • Assignment: Parallel Lettercount

W
Nov 3

Condition Variables and Semaphores

While locks are important for guaranteeing mutual exclusion, they aren’t the only tool available for controlling concurrency. We’ll look at two additional concurrency control primitives today and see how they can help us write interesting concurrent programs.

Reading

F
Nov 5

Concurrency Bugs

Today we will look at the kinds of bugs that concurrent programs can have, and think about how to design a concurrent program to avoid these bugs.

Reading
Week 10
M
Nov 8

Distributed Systems

One of the most interesting and challenging problems computer science is designing and implementing systems that work reliably across multiple machines. We’ll look at what makes this problem difficult and explore some of the interesting techniques that make it possible to build distributed systems that work well.

Reading
Activities
  • Exercise: Networking
Assigned
  • Assignment 10
Due
  • Assignment: Parallel Lettercount (by 11:59pm)

W
Nov 10

Lab Day: Peer-to-Peer Chat

This week’s lab will combine your experience with networks and distributed systems. You will implement a small distributed system using some of the techniques we’ve seen in class.

Reading
  • Review lab before class
Assigned
  • Lab: Peer-to-Peer Chat
Due
  • Lab: GPU Sudoku Solver (by 11:59pm)

F
Nov 12

Event-Based Concurrency

We will look at another mechanism for writing concurrent programs where the primary work being done concurrently is I/O. This is a common model for software that interacts with networks, large files, or users.

Reading
Week 11
M
Nov 15

Introduction to the Project

Reading
Assigned
  • Project Proposal
Due
  • Assignment 10 (by 11:59pm)

W
Nov 17

Lab Working Day

You’ll have time during class today to continue your work on the p2pchat lab

Reading

No reading


F
Nov 19

Project Proposal Working Day

Reading

No reading

Week 12
M
Nov 22

Project Working Day (afternoon only)

Reading

No reading

Due
  • Project Proposal (by 11:59pm)

W
Nov 24

Project Working Day (morning only)

Reading

No reading

Week 13
M
Nov 29

Special Topic: Memory Errors and Security

Writing secure software is incredibly important, especially when you’re writing OS-level code in a language like C. We’ll work through three security exercises as a class today. This won’t make you an expert in secure programming with C, but hopefully you’ll think about the vulnerabilities we discuss when you find yourself writing important code in the future.

Reading

No reading

Activities
  • Exercise: Security Vulnerabilities
Assigned
  • Reading Journal: UNIX and Worse is Better

W
Dec 1

Project Working Day

Reading

No reading

Due
  • Lab: Peer-to-Peer Chat (by 11:59pm)

F
Dec 3

Special Topic: Memory Errors and Security, continued

We’ll continue the memory errors and security activity from Monday’s class.

Reading

No reading

Week 14
Su
Dec 5

Work Due

Reading

No reading

Due
  • Reading Journal: UNIX and Worse is Better (by 10:00pm)
M
Dec 6

Discussion: UNIX and Worse is Better

In today’s class we’ll look back at a particularly influential systems project—the UNIX operating system. Dennis Ritchie wrote an interesting description of some of the basic features of UNIX and how they came about. We’ll combine that with Richard Gabriel’s commentary on two distinct approaches to system building, and how they fare over time.

Reading

W
Dec 8

Project Working Day

Reading

No reading


F
Dec 10

Wrap Up

Reading

No reading

Finals Week
W
Dec 15

Section 01 Project Presentations (9am–noon)

Reading

No reading


Th
Dec 16

Section 02 Project Presentations (2–5pm)

Reading

No reading

F
Dec 17

Work Due

Reading

No reading

Due
  • Complete Project