Overview
- The Night Watch by James Mickins
- LOVE: Chapter 1
- LOVE: A Beast of a Different Nature, Chapter 2, Pg 16-22
- The Unix Time Sharing System by Dennis M. Ritchie and Ken Thompson
About this course
This course is challenging! You will be building a kernel from scratch. It is programming-intensive. You may ask: Why learn about operating systems by building a kernel?
You will understand very well all the features that the kernel automatically provides for you by building a system (the kernel) without any of the things you take for granted when building applications over operating systems such as memory protection, clean IO interfaces, file systems, etc.
You will learn about important concepts such as how to provide synchronization primitives and how to build software with good synchronization and concurrency. In addition, without access to standard libraries, you will understand better the interaction between your software and the hardware through the kernel.
Most importantly, you will become better systems programmers by engineering large modular systems, and examining systems design tradeoffs not just at a conceptual level but also at a more concrete, implementation level. You will get a better appreciation of how to engineer systems to ensure security, and good performance.
You should also ask: Why study Operating Systems? Why is this a required course for the major?
You might argue that you want to build applications and you don’t really care about operating systems. There all kinds of tools that will make your applicaitons work on any operating system out there. This course is a deep dive into a specific software, the Operating System, that you can just use blindly. In other words, Operating Systems just work well.
There are conceptual ideas that you will learn here that apply more generally to any system or application that you build. e.g. how to handle limited resources? how to abstract complexity in elegant ways that empower your application end-users? how to build concurrent data structures or synchronize multiple threads? how to recover from failures?
It is also important to understand how things work under the hood to recognize why your application might not be performing well on a certain operating system. In many instances, when building applications where performance and scalability are critical, you might want to side-step some of the services that the OS provides like its default file system and build your own.
Course Structure & Materials
This course is organized around 10 different modules that go over the main concepts and components of operating systems. Each such module is presented as a chapter in this book.
Required reading materials will be listed in each module as follows:DINOS Chapter 1
LOVE Chapter 1
We will refer to the course textbook as “DINOS” because of the dinosaurs on the cover page. There might additional readings from different sources, in particular the “LOVE” book by Robert Love, called Linux Kernel Development. Links or pdfs will be provided for these additional readings.
If you haven’t done so already, go ahead and read the materials for this overview module. Scroll up and find them listed in their boxes.
You should try and read the optional materials but I understand that things can get hectic and you may not have the time to go over them. These optional readings, however, will definitely enrich your understanding of the subject or introduce different perspectives on the topic.
This online book is a weekly (roughly) set of notes that organizes the material around the readings, lecture slides, and a core set of learning objectives, which will be presented as follows:
Learning Objectives
- Why study Operating Systems?
- What was special about Unix? Why did it take off in comparison to the Operating Systems around back then?
- What are the main functions of an OS/kernel?
You should be able to answer the questions in the objectives or define any terms or concepts listed before you can feel somewhat comfortable about the module. If you can’t, make sure you go over the readings, the lecture slides and ask questions. Note that you are responsible for material that may not have been covered in class but is discussed in the readings.
Assessments
There are four to five labs that can be found in the appendix. These labs will help you build a kernel from scratch!
All the labs are done in groups of 3 students. Create a group contract before you begin on these.
There will also be two in-class midterms, paper cuts where two groups debate a recent or seminal OS paper, and occasional smaller-scale problem sets.
Further course details can be found in the course syllabus.
How to get help?
- Join the slack channel: use the forum to ask your peers and us for help.
- Schedule a time to meet your instructors: Azza or Miro