| 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. |
Jan 30 |
10 |
| Lab
2 Virtual memory |
Build a 2-level page table and a
free-space list. |
Feb 13 |
15 |
| Lab
3A Processes/Environments |
Create user-level process.
Develop interrupt/trap handlers. |
Feb 27 (part A) Mar 7 (part B) |
20 |
| 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 11 |
5 |
| 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(). |
Apr 3 (A, B), Apr 10 (C) |
20 |
| Lab
5 Exec |
Access a rudimentary file system
to allow a process to exec() a program stored in the file system |
Apr 24 |
20 |
| Lab
6 Shell |
Construct unix-like
shell with pipes and redirection. |
May 8 |
10 |