Experiential Learning "Active" learning opportunities

This page collects together all of the “experiences” associated with individual modules.

In this site, experiences represent “active” learning opportunities, as opposed to readings, which represent “passive” learning opportunities. In many courses, readings and experiences together constitute the “assignments”.

Module: Getting Started

Homework Assignment #0

Making sure that you’re set up with the software needed for this course

Module: Computer Architecture ([Over|Re]view)

Homework Assignment #1

A pencil-and-paper assignment to make sure that you understand the fetch-decode-execute cycle

Module: OS Overview and Interfaces

Homework Assignment #2

An assignment in which you use strace to count system calls and spy on programs

Module: Processes

Homework Assignment #3

A pencil-and-paper assignment to make sure that you understand fork()

Homework Assignment #4

An assignment in which you write C code using fork, exec, popen, etc.

Module: Threads

Homework Assignment #5

Using Java Threads for speed and interactivity

Module: Scheduling

Homework Assignment #6

A pencil-and-paper assignment about scheduling

Module: Synchronization

Homework Assignment #7

A programming assignment to make sure that you understand thread synchronization

Module: Review: Counting and Addressing

[Extra Credit] Homework Assignment #9

A pencil-and-paper assignment to make sure that you understand number conversions and counting

Module: Main Memory

Homework Assignment #8

A pencil-and-paper assignment to make sure that you understand contiguous memory allocation

Module: Virtual Memory: Paging

Homework Assignment #10

A pencil-and-paper assignment to make sure that you understand page tables

Homework Assignment #11

A pencil-and-paper assignment to make sure that you understand page faults