Thursday, August 25, 2016

Welcome to Advanced Operating Systems

After I graduated from college with a BS in Mathematics (minor in Computer Science), I planned to pursue graduate study (I was smart, capable, and had graduated with honors). Graduate study seemed reasonable.

My first graduate course was at Georgia Tech, CS-6241 Compiler Construction, nearly 30 years ago. But circumstances (work schedules, deadlines, distance, etc) dissuaded me from continuing my graduate study. And Life happened. I had a wife, children, a mortgage, car payments, etc.

time passed...

But after a long career designing and writing software, I still retained my curiosity and my love of learning. Circumstances finally converged to present me with both the opportunity and motivation to return to academia, and return to graduate study. Georgia Tech had partnered with Udacity (and AT&T) to create a new on-line program, an MS in Computer Science, crafted to the needs of students who could not suspend their lives to pursue advanced education.

I admit that I was both skeptical; would the experience offer the same quality and comparable experience to an on-campus program? And I was intimidated; I had not been in a formal class setting in a long time; would I face challenges that would overwhelm me? This was a huge commitment.

Could I handle the rigor?
Could I handle the workload?
Could I handle the schedules, the deadlines?

Realize that I have a full-time software development job; I have work deadlines.
Realize that I have a family commitments (wife, children in high school and college).
Realize that I have financial demands and time commitments.
Realize that I would like to enjoy some leisure.

The program offered a variety of interesting courses and several course specializations. Computing Systems promised to teach about Operating Systems, Networks, Security, and Theory, while Machine Learning offered courses in Machine Learning, Artificial Intelligence, and Data Visualization. Perception and Robotics promised Visual Processing, Artificial Intelligence, and robotics control.  But scheduling presented challenges. Several courses were full. Would I be able to secure a core course and make progress?

The first course I chose was CS-6210 Advanced Operating Systems, also known as AOS. This course has a reputation as a course that both challenges a student's ability and requires significant effort. The course was a formidable re-introduction to academia. The course required lectures, tests, reading papers, and projects.

The lectures were good, and the covered the material. One key piece of advice I must share is that you need to keep on pace watching the lectures. But do not just watch the lectures in a perfunctory manner. Understand the material. Own the material. Ask questions on Piazza (the Q&A forum provided for each class, where TA's and the Instructor answer student questions). The discussions keep pace with the syllabus, so you need to keep current. Consider watching the lectures twice (watch ahead, and watch on schedule).

The papers were hard. I had read academic papers and RFCs for work. I had written documentation, reports and white papers on various topics. I found myself reading nearly 40 academic papers (~3/wk) covering an array of OS topics, ranging from process scheduling, memory allocation, segmentation and paging, TLB and address translation, inter-process communication, monolithic versus lightweight kernels, virtualization, network communications, security, distributed file and memory storage, distributed synchronization, content distribution networks, and more. These papers spanned important points of OS development stretching over nearly 40 years of advances. I found some papers unclear, and further investigation and reading were needed to clarify concepts. Some concepts were easy, while others were deep.

Understand that my career spanned many of the developments studied in AOS. I had written programs for several of the example OS studied, and had knowledge of  MS-DOS, BSD Unix, SysV Unix, Mach, Solaris, Linux, VMware, Xen, NFS, RPC, Sockets, etc. Some of the material was familiar. Some of the material was new.

Reading these papers took time. I needed too much time. Something needed to change. I had to learn how to read academic papers more efficiently, how to find, highlight, and extract important information. I  had to learn how to understand and assimilate these concepts. All this while completing the other assignments. My advice is to make a schedule, and keep up with the readings. Establish a pace for yourself.

The projects were hard, they took time and effort. The first project was to write a C program to address the Dining Philosophers' problem. We had to understand the problem (resource contention and deadlock), and how to solve the problem (break one of the four conditions leading to deadlock). Each student had to build a working program. And submit by the deadline. But that was only 10% of the first project. The other 90% was to build a thread package (gtthreads), but not using pthreads. Students had to find the system calls to make a new process context, switch between contexts, and perform scheduling. We had to ensure that each thread got time. And we had to avoid deadlock. The project was challenging and took time (I probably spent 50-60 hours working on the project).

The class shared their understanding of the requirements. Many students contributed test programs to validate each of the requirements we identified. The students used Piazza and github to share their understanding of the requirements and test harness. The projects were individual, but we collaborated to create the tests.

This is a graduate course at a premier university. Dr. Kishore, the professor, expects you to actively participate in learning, to seek and discover the information you need (which is provided in the papers and lectures).

The tests were proctored (Proctortrack, get comfortable with it before the midterm), and timed. The questions were brief, but required knowledge of a lot of material. Keep up with the lectures, and read the papers (efficiently), and you will know most of the material. The tests require knowledge, and you want to learn the knowledge.

I learned a tremendous amount in AOS, and have completed two more OMSCS courses.

I am now a TA for AOS, and I look forward to sharing a rich learning experience.
I survived AOS. You will survive AOS.
Enjoy the journey.

(I will share more of my experiences from AOS and OMSCS in upcoming posts).
---

Georgia Institute of Technology in Atlanta, Georgia is a premier university which offers an excellent education, and is considered one of the top engineering schools in the country.

OMSCS (On-line Master of Science in Computer Science) is a program which offers courses completely on-line, delivering education to over 4000 enrolled MS-CS students. The courses use the Udacity learning portal, delivering lectures, quizzes, and automated grading platforms, and combined with technologies including T-Square, Piazza and Proctortrack (among others) delivers a rich learning experience comparable to the on-campus program, yet unconstrained by time or location.

Here are the OMSCS courses