Operating Systems: Pebbles Kernel & Thread Library
From my very first week at Carnegie Mellon, I knew that the 15-410 Operating Systems Design and Implementation was a class to dread. At the same time, enrollment in 410 was something to die for, especially for underclassmen. After taking 15-213 in the Fall of 2009, I enrolled in OS in the Spring. The core experience of the class was building a UNIX-like "Pebbles" kernel and a user-space thread library to go on top of the kernel, although during the first couple projects we also wrote an x86 C stack tracer and the game 'Bejeweled' to run directly on hardware. The specification for the kernel can be found here.
Before we (this was a partner project) implemented a kernel, we were given a functional operating system on top of which we were to write a user-space thread library. Here we had to deal with our very first race conditions, stack memory corruptions, deadlocks, and other multi-threading issues. This took a couple weeks. Next came the meat of the course: building the OS. With over 20 system calls, high standards for memory management, locking, and kernel preemptibility, this single assignment took about 25 hours a week for a period of about 6 weeks. Looking back, I learned more from this one project than any other project I've completed for school.