This course requires several programming assignments that will give you experience in building, booting and running an operating system. The assignments will also expose you to methodological systems issues such as how to model, measure and report performance, how to design a workload to test kernel functionality, and the dependence on workload for the evaluation of a system feature. Finally the assignments will expose you to how to write about systems, their design, implementation and measurement.
These assignments should demystify the operating system, convincing you that the OS really is just a program. Sometimes puzzling system behavior can be understood and worked out by reading and understanding the source code of the OS. Why did mmap return ENOMEM? There are several distinct possibilities. These assignments might even give you a bit of practical knowledge, for example allowing you to get Linux to recognize your fancy, new USB device.
The assignments are designed to expose you to as many interesting ideas as possible while minimizing the amount of drudge work. Therefore, I expect every student to do each assignment on his or her own. You may discuss the assignment with each other, but please do not share code.
First you need to setup the enrivonment. Check with the link above. This link covers installing QEMU, creating an Ubuntu VM image, and getting it to boot.
Building the kernel and its modules.
The goal of this assignment is to be able to compile and boot the Linux kernel on QEMU.
The goal of this assignment is to modify the kernel scheduler.
The goal of this assignment is to create a user-level networked file system.
The goal of this assignment is to decide on a topic for Assignment 3.
Instructions for what you need to turn in for Assignment 3.