Lab |
Objective |
Due |
Relative Weight |
Lab
1 Bootloader |
Understand the lab development
environment. Understand how initialization works. Understand linking,
loading, position-dependent code, and position-independent code. |
Feb 2 |
10 |
Lab
2 Virtual memory |
Build a 2-level page table and a
free-space list. |
Feb 16 |
15 |
Lab
3A Processes/Environments |
Create user-level process.
Develop interrupt/trap handlers. |
Mar 2 (part A) | 10 |
Lab
T Multi-threaded programming |
This short lab will focus on basic
multi-threaded programming techniques. This lab is not integrated into
the main "build an operating system" project, but it helps you develop
an essential, practical skill that you will need for real-world
programming projects. |
Mar 9 |
10 |
Lab
3B Processes/Environments |
Create user-level process.
Develop interrupt/trap handlers. |
Mar 23 |
10 |
Lab
4 Multiprogramming and Fork |
Create multiple user-level
processes. Develop system calls to allow communication between a
user-level process and the kernel (and between user-level processes.)
Implement a user-level page-fault handler. Implement an efficient
copy-on-write fork(). |
Mar 30 (A) Apr 13 (B) Apr 20 (C) |
25 |
Lab
5 Exec |
Access a rudimentary file system
to allow a process to exec() a program stored in the file system |
May 4 |
20 |
Lab
6 Shell |
Extra credit: Execute
commands as specified by
shell input. Add IO redirection ("pipes") for convenient
communication between processes. |
May 4 |
15 (extra credit) |