- Location: Pittsburgh, PA
- Start Date: February 2017
- End Date: May 2017
- Related: 15-410, Operating System Design and Implementation
- POSIX-like thread library.
- Timer, keyboard and console device drivers.
- Virtual memory management system.
- Various system call routines.
- Scheduler and context-switching capabilities.
- Synchronization locking mechanisms.
- Barebone para-virtualization hypervisor.
- Completed in a team of 2. Written in C.
"An experience like no other." This was the quote Professor Eckhardt put on the first slide of the first content lecture of OS. Boy, was he right. Back during registration period in Fall 2016, I didn't think much before clicking the "add to course plan" button under OS -- so what if it's rumored to be one of the hardest CS classes at CMU? Now, 6 months and a semester of literal sweat and tears later, my partner (pictured) and I made it out alive on the other side, and I am truly humbled by this experience.
Things I learned:
- Kernel-mode debugging by stepping through assembly and inspecting various hardware states including registers, flags, the stack and heap... etc.
- Synchronization errors and how to analyze and solve them.
- Design and implementation of locking mechanisms including mutexes, condition variables, semaphores, and reader/writer locks.
- Different sections of an executable binary and how to load it into memory and run it.
- Design and implementation of a 2-level page table virtual memory management system with zero-fill-on-demand technique.
- How to manage saved states during context switch and mode switch.
- The interrupt descriptor table and how to set up interrupt handlers.
- Details of a thread and a process -- what exactly are they? -- and how to manage them.
- How to "trick" a user-mode process into thinking it's running in kernel mode.
- Proper robust error handling techniques for the kernel and consistent definition of error codes.
- Modular design and code management for over 13,000 lines of code.
... The list goes on and on -- through all the late nights and early mornings (class was 10:30am... trust me, it's pretty early when you sleep past 3 :P), debugging sessions and code audits on paper, to completely revamping a major part of the kernel 2 days before the deadline, I think I'll agree with Professor Eckhardt that OS is truly an experience like no other.