CS124 Operating Systems - Introduction

So you want to take CS124...

I'll make no bones about it, CS124 is a hard class. It's 12 units for a reason, and although we try hard to make sure the uniting is reasonable and that students get all the guidance and support that they need, it's still a really hard class for most students who take it. Part of the reason is that systems programming is, simply, a very hard thing to do. It requires an attention to detail and a persistence that most kinds of programming just don't require. You are working just above the hardware, and you don't have the kinds of tools for debugging and system monitoring that you might have, say in a Java or Python program, or even things like valgrind for debugging a C or C++ application.

That said, it is also incredibly fun when you get things working, and it is one of the most fulfilling creative efforts, because you really are building things from scratch. You will understand how the computer does what it does, so much more deeply than you ever did before. Towards the end of CS124 one year, a student was sitting in my office working on one of the projects, and he picked up his laptop and said, "I finally feel like I understand everything going on inside this machine." So, it's painful, but it's also worth it.

Before you go on, you should read this very well-known article about the world of systems programming. James Mickens is a hilarious dude. Fortunately, CS124 will provide many tools to facilitate work on your operating system, so it won't be quite as dire as what Mickens describes. But, by the end of this course, you will definitely be able to relate.

Recommendations and Prerequisites

If you want to maximize your chances of completing CS124, here is what I would recommend.

Teams

I require that CS124 students work in teams of 2-3 people. You are not allowed to attempt CS124 on your own. The main reason why is that debugging these systems is much easier when you have other people to talk to about what you are seeing, and potential solutions to problems you encounter. Even if you start out with a team of three, and your teammates all decide to drop the class, you will need to join another team to complete the class.

It is best to start CS124 with a team already in mind. The first assignment goes out on the first Wednesday of the term, and is due the next week, so you don't want to lose time forming a team when you need to be designing and coding up your implementation.

Here are some important considerations when forming a team:

Of course, if you don't have a team, just let Donnie know and he will find a team for you.

Course Books

No books are required for this course. I don't think you should spend a ton of money on books unless you have extra money kicking around, and/or this is a particularly interesting topic for you. All necessary material is covered in lectures, or in the assignment write-ups. So you really don't need these books to complete the class.

That said, there are two books that a lot of the course material is based on.

The "general theory" textbook is "Operating System Concepts" (9th ed) by Silberschatz, Galvin and Gagne. It's $170 from Amazon.com, which is insane. There isn't really a lot of reason to get this book unless you're just interested in it. There is no assigned reading in the class, and all required information is covered in the lecture slides and assignment write-ups. But, if you have a ton of money to burn, or you are unfamiliar with the concept of regret, you might want to pick up a copy. (Note that there is also an "essentials" version of the book - that's not the correct version.)

The "implementation details" textbook is "Understanding the Linux Kernel" (3rd ed) by Bovet and Cesati. It's about $41 on Amazon.com. I like this book a lot, and in the past I definitely would have recommended that you purchase a copy, but it is getting a bit dated by now. It covers the Linux 2.6 kernel, and we are already to the 4.12 kernel. That said, this book goes through a ton of Linux kernel internals, in a ton of detail. If you want to understand how some of these features are implemented, this is a great book.

"I'm not afraid."

"You will be. You will be." -- Yoda

Okay, you read through all of the above, and you are still excited to take CS124. Awesome! What can you do to get ready for it?
  1. Figure out your team.

  2. Review the CS24 slides.

  3. Get your CS cluster account ready.

  4. Start reviewing some of the Unix system calls, like fork(), execvp(), etc. The first assignment is implementing a command shell! (And if you have already done this before, sorry but no you cannot use your previous code.)

  5. Figure out where you want to host your team's Git repository. You must use a private repository for CS124. (We have seen team repositories cloned in the past.) Github and BitBucket both provide private repositories for academic use, but you may have to request it from their website. You can also host your repository on the CS cluster if you wish. (These details can be ironed out in the first week, but it's better if you already have a plan before the first assignment.)