Surviving Georgia Tech OMSCS: Advanced Operating Systems

Obi R.
6 min readDec 26, 2021

Tips on preparing and succeeding in Georgia Tech’s Advanced Operating Systems course

Note: This is based on the 2020 edition of the course. Nevertheless, the key mental models and challenges are unlikely to change significantly in the future. OMSCS courses have generally remained fairly stable in terms of the teaching material (based on a comparison with the OMSCS content submitted to Udacity several years ago).


  • difficult, but very rewarding
  • C/C++ heavy
  • will make you a better Data Engineer

How the course can help you professionally

This is one of the highest-rated OMSCS courses (4.13/5.00 rating on OMSCentral). It will give you solid theoretical foundations for Distributed Systems, Data Engineering and Cloud Computing jobs, or a career in academia.

The programming projects generally translate to marketable skills and microskills, such as using RPC, MapReduce, threading and multiprocessing. On the academic side of things, you will be asked to do research, solve new, inventive problems, and think for yourself — all the hallmarks of a proper graduate course.

Provided you get an A, Advanced Operating Systems will allow you to sign up for even more demanding Distributed Systems courses. Doing well in Advanced OS can really help you make the best of your time at Georgia Tech.

Before you sign up

Theory — know thy basics

AdvOS is a difficult class. Thankfully, there’s an easy way to find out if you’re ready for it before you enroll.

Most of the lecture videos from the course are available free-of-charge on YouTube and Udacity. That includes the Refresher course — part 0 of the course, if you like. Watch a few of the videos (links below). If you find that you can follow the material with relative ease — that’s a sign you’ll most likely be able to manage the workload.

Udacity link to refresher course (requires registration)

Sample video on memory systems

Practice — learn C / C++

You’re going to have a hell of a hard time in this course if you’re not at least moderately fluent in C or C++ (both, preferably).

It might not be a bad idea to hire tutor early on to show you the ropes, teach you to read the documentation etc. Otherwise, you might really struggle with the programming projects.

Project tips

Icon showing a hypervisor sitting on top of 3 guest systems

Topic: CPU scheduling and Memory Allocation

In this project, you learn how to optimally allocate resources between different operating systems on one physical machine.

This is rather fun and the bar is set quite low compared to the other assignments in this course.



Useful links/tips:

This project should be fairly easy to do if you pay attention in the lectures.

You are asked to write a script which monitors and assigns CPU and memory resources optimally between several Virtual Machines on your computer.

Icon showing parallel arrows

Topic: Parallel Programming

The purpose of this project is for you to practice parallel programming.

The tools you’ll be using are MPI (Message Passing Interface) and OpenMP.

This assignment gives you a good intuition for:

  • the limits of parallel programming,
  • the mechanics of locks and barriers,
  • the advantages of shared memory vs message passing.

My cohort was asked to run an experiment on a distributed system and write a paper on how multithreading scales vs multiprocessing.



If you’re more comfortable with C++ than C, ask the instructors if you can use it. Some people in my year did just that and got a ‘yes’ in response!

Useful links/tips:

MPI installation on Ubuntu Linux

Download from here.

Execute with instructions from here.

In my case, that wasn’t enough, as evidenced below:

➜  openmpi-4.0.5 mpiexec --version
mpiexec: error while loading shared libraries: cannot open shared object file: No such file or directory

I needed to also execute:

sudo apt install libopenmpi-dev

Project infrastructure

Having to wait for the university server to be available for you to run your experiments is quite annoying.

I ended up deploying my own set of machines on Amazon Web Services so that I could experiment to my heart’s desire without stressing about the approaching deadline.

Icon showing a network structure consisting of connected nodes

Topic: Threading + Remote RPC

This project is implemented in C++ entirely. Here, you’ll be moving slightly closer to familiar, everyday software development.

The main learning concepts are:

  • how to implement a thread pool
  • how to use RPC (gRPC in this case)
  • how to build an asynchronous server application

Unless you’re proficient with C++, you might find it easier to sketch out the program in a language you find easier to reason in (for example Python, Ruby, or JavaScript). There are quite a few mental models to wrap your head around, so it’s nice to have that extra cognitive space in your head.



Useful links/tips:

You are fine to base your solution off stuff you found online (I did say this project is like everyday work, didn’t I?). Just remember to attribute any sources you use.

Here are two links to help you prime the pump:

Icon showing work being handed off to many worker processes and the sent back to a single process

Topic: MapReduce

This is an absolutely crucial project for anyone thinking of a career in Data Engineering.

You’ll be asked to implement MapReduce from scratch, using gRPC for inter-process communication.



Useful links/tips

If you survived the previous projects, this one should be relatively easy, if slightly time-consuming.

Make sure to understand the purpose of sharding, and the difference between a logical shard and a physical shard.

This article should be a good place to start.

If you’re interested in how Map Reduce is used in Data Science, check out my article on PySpark.

Exam tips

Midterm Exam

The exam focuses on the material from the first part of the semester.

Pro tip: watch Lesson 7b (Distributed Shared Memory) from the second part of the course. The explanations for memory consistency models in the earlier lectures are quite sparse. Lesson 7b will give you a much better intuition for the entire problem.

Final Exam

The exam is based on the material from the second part of the semester.


The exams in this course are pretty hardcore and they’ll require you to think. But they’re absolutely manageable even if you’re not a Systems whiz kid.

Here’s how:

Before the exam, the professor will post some questions for you to work through with other students. These exercises are invaluable to do in terms of preparing for the exam. And it’s actually quite fun to tackle them together.


Video hangouts with the professor are pretty useful. This is the closest you’ll get to having office hours in this course.

Your specific questions often won’t get answered in Piazza (the class forum), so this is a good place to go if you want to get a better intuition for the material taught.

As a bonus, the hangouts are sometimes the only source of answers for some of the exam questions.

The time slots are not great for anyone not living in the Americas, but the hangouts are available as recordings on the course website.

Article reviews

As part of your graduate work, you will be asked to review two seminal articles. The topics range from OS design to MapReduce optimization.

This is the easy part of the course, and it’s also quite fun (subjectively speaking). Your reviews do not have to be a work of genius — it’s more about the engagement with the material.

Final remarks

The content of the course may change over the next couple of years. Please give me a shout if you’d like something updated in this article.

Also, check out the course’s website and its reviews on OMSCentral.

Other courses

This article is part of a series of OMSCS course reviews. If you’re interested in Human-Computer Interaction, AI for Robotics or Artificial Intelligence, I’ll be submitting those in the near future.

About The Author

I’m a Software and Data Engineer based in the UK. I like calisthenics and complaining.

Feel free to say hi on LinkedIn or Discord.


Circuit board photo — Image by Gerd Altmann from Pixabay