Georgia Tech’s Graduate Introduction to Operating Systems (GIOS), a thorough review of the core concepts behind operating systems, came highly recommended by way of OMSCentral and it did not disappoint. The lectures (delivered through Udacity) are well-structured and concise, the projects are enjoyable and go beyond the normal client/server projects in an undergrad OS course, and the course TAs and community are key to making this a top-notch experience. In summary, if you have decent C/C++ experience and either have not taken an operating systems course before or it’s been quite some time since you looked at these dinos, then I’d strongly recommend signing up for CS6200.

Ada Gavrilovska is the course professor, but most of your interactions (asking questions about projects, tests, readings, etc.) are with her teaching assistants. Fortunately, one of the fun parts of OMSCS is that most students and TAs are full-time employees themselves. This means that while the course is driven by TAs, these folks have real-world experience to bring to the table, usually from similar areas of practice.

In January I took Oregon State University’s introduction to OS course (CS344) and found it to be enjoyable, but slightly watered down. There was no watering down GIOS; by week three we had passed OSU’s level of detail and I was in new territory. Some of the highlights for me were:

  • Writing (over the course of two projects) a multithreaded web server, proxy server (that communicated via IPC with a cache server of our own design) with a multithreaded client that acted as a load-generator (read: automated client for testing) for the server. This forced me to think about synchronization between resources and data structures, message queues, shared memory, and sockets – all in C.
  • The lectures on CPU scheduling, page tables and memory management, message passing and shared memory for interprocess communication, semaphores, virtual file systems, and remote procedure calls were fantastic. While these all came after the midterm, they were worth the wait.
  • The last project was easy, but fun, and had the added bonus of saving my ass in CS6210 as they both made use of gRPC. CS6210’s last project required us to implement a MapReduce framework using gRPC to manage the remote procedure calls between the nodes in a cluster. The work involved in that project was daunting and I had no idea where to start. After sitting down for a weekend and knocking out CS6200’s distributed file system project (powered by gRPC), however, I was good to go. This was all written in C++ and introduced me to the notion of resource acquisition is initialization (Tom Dalling explains it far better here) along with the Andrew File System and distributed file systems in general.

Overall, a truly enjoyable experience, but one that tested my patience at times. The tests were humbling and the first project, while relatively simple, had exacting requirements that pushed my C knowledge to the brink. There were a few nights that left me sheepishly crawling into bed hours after my wife had drifted off to sleep. That said, I left this course with a greater appreciation for the building blocks of computer systems and a great deal more programming confidence; a moderately fair trade 😉