15-Week Semester Outline (Sample)

Week 1: Introduction Topics: What is an OS? Goals, abstractions, structure.

OSTEP: Introduction chapters

xv6: Build and run xv6 in QEMU. Overview of source tree.

Lab: Set up xv6 build env (Docker or Linux VM)

Week 2: Processes OSTEP: Processes (Ch. 4–5)

xv6: proc.c, fork(), exec(), wait()

Lab: Modify fork() to track parent-child relationships or log system calls.

Week 3: Context Switching OSTEP: Limited Direct Execution (Ch. 6), Context Switching (Ch. 7)

xv6: swtch.S, trap.c

Lab: Instrument context switch count

Week 4: Scheduling OSTEP: Scheduling (Ch. 8–10)

xv6: Scheduler loop in proc.c

Lab: Implement Round-Robin or priority scheduler in xv6

Week 5: System Calls OSTEP: System Calls (review)

xv6: syscall.c, usys.S, system call dispatch table

Lab: Add a new system call to xv6

Week 6–7: Memory Abstraction OSTEP: Virtual Memory (Ch. 13–15)

xv6: vm.c, kalloc.c, trap.c

Lab: Modify memory allocation, track page usage

Week 8: Midterm + Review OSTEP: Summary and midterm catch-up

Lab: Debugging walkthrough of trap handling

Week 9–10: Memory Management OSTEP: Paging (Ch. 16–18), Swapping (Ch. 19)

xv6: Extend memory system or implement page replacement simulation

Lab: Write a user program that triggers allocation and observe sbrk()

Week 11: File Systems OSTEP: File system intro + APIs (Ch. 35–38)

xv6: fs.c, file.c, bio.c, inode.c

Lab: Walk through inode/block logic, add logging or stats

Week 12: File System Internals OSTEP: FS implementation (Ch. 39–41)

xv6: Add new file type or a pseudo device file

Lab: Modify block allocator or file metadata

Week 13: Synchronization OSTEP: Locks, Mutexes, Semaphores (Ch. 26–28)

xv6: spinlock.c, sleeplock.c

Lab: Add locking to critical sections in new system call

Week 14: Concurrency Bugs OSTEP: Deadlock, Concurrency Bugs (Ch. 30–32)

xv6: Demonstrate deadlock through crafted syscall ordering

Lab: Implement deadlock detection or avoidance

Week 15: Capstone Project Options:

Add a system monitor syscall

Improve xv6 shell

Add user-level threading

Presentation + Code Review