Assignment 1: 1 week. 6 hours
In this assignment you will set up the repository, compile the distributed code base.
Learning outcomes:
Learn how to use git.
Low to build and compile OS161.
Navigate and read the source code with the goal of answering questions about how it works.
Learn using the gdb debugger.
Assignment 2: 10 days. 20 hours
In this assignment you will implement basic synchronization primitives
Learning outcomes:
Read about and understand how the hardware implements atomic instructions and their impact on software.
Implement blocking locks and condition variables in OS161 based on existing implementation of mutexes and semaphores.
Assignment 3: 7 days. 10 hours
In this assignment you will solve a toy synchronization problem that involves using synchronization primitives in OS161
Learning outcomes:
Understand how to enforce mutual exclusion and thread-to-thread signaling using the synchronization primitives implemented in A2.
Assignment 4: 14 days. 40 hours
In this assignment you will implement file-related system calls
Learning outcomes:
Implement several new system calls in OS161
Understand how to safely transport the arguments (copy in/out) between the user land and the kernel.
Implement new data structures in the kernel to support the new file-related system calls: open, close, read, write, lseek, chdir.
Learn about and use the virtual file system interface.
Assignment 5: 21 days. 60 hours
In this assignment you will implement fork/exec system calls
Learning outcomes:
Implement fork and exec system calls in OS161.
Learn about the process abstraction and Unix and mechanisms of new process creation
Learn about enforcing protection and safety in a multiprocess operating system.
Assignment 6: 24 days. 80 hours
In this assignment you will implement the virtual memory system
Learning outcomes:
Learn about the functions, benefits and costs of virtual memory
Understand the hardware and software mechanisms needed to implement it.
Implement full virtual memory support in OS161:
** Handling of TLB faults
** Abstractions and data structures for virtual address spaces
** Page tables (handling large page tables)
** Paging to disk.