I decided to take Operating Systems this summer, as I knew I was going to be in Los Angeles and figured it couldn’t hurt to knock out one of the “heavy hitter” classes in the curriculum while I was here. Between Ponder (see Part 1), my other projects (Parts 3 and 4), and this class, I’ve definitely had my hands full, but I have really gotten to spend a lot of time working on my technical skills as a result.
There are operating systems running in your microwave, car, laptop, and much more, and each is designed to meet the specific constraints and challenges pertaining to each use case. Basically, we create operating systems to make computers easier to use, and the structure of the class I have been taking reflects this. The class is composed of 4 projects, and in each project I implemented new functionality on top of an existing, “bare-bones” operating system with my 2 teammates (one of them is Ellen!).
The goal of the first project was to extend our given system so that it could run multiple programs by using the notion of “threads”. One neat trick we’ve “taught” computers is to have them run many programs “at once” by having them quickly switch between every program a user wants them to run. This creates the illusion that the computer is doing many things simultaneously, but really it just does one thing at a time (now that we have multi-core computers we actually can run multiple processes simultaneously though). Using this trick it seems like your web browser, word processor and facetime applications all run at once, but really they run one at a time really quickly.
The second project built off the first and also introduced system calls. System calls are special instructions that the operating system or user runs to perform tasks like starting a new process or to read/write to a file. One set of system calls made it possible for users to write their own “multithreaded” programs that seem to execute many things simultaneously as well.
Memory and memory management is what project three was all about. Computers run much faster when their memory is managed efficiently, and implemented something called demand paged virtual memory was the main bulk of the assignment. A smaller portion of the assignment introduced networking, or allowing the operating system to providing functionality for communicating with other computers.
The last topic of the course was distributed computing. Throughout all the previous assignments we built and continuously extended an airport simulation that relied on the multithreading, system call, and memory management behavior we were building in parallel to the simulation. The climax of the course is making an airport simulation that takes place across a distributed set of computers, and will rely on all the concepts and functionality we have built up until this point. My group is actually still working on this part and will be turning it in this Friday!
This class has been a ton of work, but it has been interesting to see how I now see these systems concepts popping up outside of the classroom, at work and just in daily life. Also, writing this blog in an airport, it is occurring to me that after 3 months of writing airport simulation software, I will never see these places the same again. Anyways, stay tuned for the next part of the series to learn about the projects I am working on within Spark SC, the school’s student driven hub for entrepreneurship and innovation.Meet Calvin