Carnegie Mellon
SCS logo
Computer Science Department

15-410, Operating System Design and Implementation

Welcome to the Spring 2023 edition of 15-410/605.

Partner Registration

Project 2/3/4 Partner Registration Page, early access for early birds; a sign for advertising interest in a partner (PDF).


Preparatory coursework
The best preparation for this class is taking 15-213/513 (18-213, 18-613, 14-513) followed by one of the 15-4xx/6xx "Systems electives": 15-411/611, 15-418/618, 15-440/640, 15-441/641, 15-445/645. Those specific classes are believed to be better preparation than other classes that contain some Systems content and/or have "Systems" in the name of the class. That specific list contains classes that the CSD Systems faculty agree meet a variety of criteria related to conceptual content and project work. In specific circumstances other preparation may suffice. Academic advisors in related programs may be able to provide detailed advice. Discussion with one's advisor is an important step for students -- especially master's students -- planning to take the class.
Wait list
This course is usually full, so it is very possible that you will not be able to take it the first time you want to. Please note that the Registrar's wait list is not a FIFO queue; students will be accepted from the wait list according to our best estimate of readiness to successfully complete the class, moderated to some extent by urgency. Your numerical position on the registrar's wait list is irrelevant. Please do not send us mail mentioning your numerical position on the registrar's wait list.
Getting off the wait list
If you are concerned about getting into the class, probably the best way to improve your chances is via your academic advisor: if your advisor makes the case to us that you are solidly prepared and that this course is important to your educational objectives, that will help. This is not a skippable step. If your advisor doesn't understand the objectives and time commitment of this class and your educational objectives well enough to affirmatively recommend that you should take this course this semester, you should discuss these topics with your advisor before contacting us about getting into the class.
This course is usually full, and we generally receive many more requests to audit than we can accept. If you wish to audit, please have your advisor contact us before the semester begins to discuss how auditing might meet your educational goals.

Prep work

The following are productive things to do before the semester begins:

  1. If you've forgotten how to modify your shell startup files (e.g., so that your PATH environment variable includes a specific directory automatically when you log in, or how to add a command alias), please refresh your memory.

  2. If you don't know how to use grep, it is probably wise to look into that. For example, if given a large source tree, know how to use grep to find all mentions of a function. There are other ways to do this! Some people might prefer cscope, in which case it's ok to know how to use both of them. As another example: list name of all the files in a source tree that contain the string "increment", the string "decrement", or both, without regard to capitalization of those strings.

  3. If you don't know how to use find, it is probably wise to look into that. For example, list assembly-language files in a source tree whose file name contains the string "tree".

  4. It is probably useful to install an X server on your personal machine. To make sure you have it working, SSH into LINUX.ANDREW and run xrefresh, xeyes, and/or xclock.

  5. The textbook information includes some optional additional readings. If you are proficient at banging out code that runs ok but gets complaints from project partners, it would probably be productive to read The Practice of Programming, at least the first few chapters. Again, this is optional! But some students do start the semester writing code exhibiting features which are not best practices in any programming language. This is a good semester to write good code, and there are books that discuss how to do that.

  6. Speaking of textbooks, if your relationship with 15-213/513 didn't involve a lot of textbook time, please be aware that we expect you to be able to apply a 213-level understanding of relevant 213 topics, including files and directories, file I/O, signals, and virtual memory, in addition to the absolutely core machine-model material on instructions, registers, and caches. If you are fuzzy on any of this, the 213 textbook contains excellent refresher material!

  7. Speaking of 213, it is probably a good idea for you to re-read most of the code you submitted. Probably the Malloc lab and the Shell lab are the most directly applicable. If there is anything in the code you submitted that you no longer understand, please remedy that!

  8. It is a good idea to be familiar with C conventions. For example, it is generally not the case that a void * is a pointer. If seeing a void * parameter, or a void ** parameter, in a function prototype would be confusing, this would be a good area to look into. You should know what sizeof() is for, and be prepared to use it.

  9. If you like to watch videos, this one might be interesting: SREcon14 - Keys to SRE, Ben Treynor, Jun 26, 2014. And if you like to read papers, this might be eye-opening: A Few Billion Lines of Code Later: using static analysis to find bugs in the real world.

  10. If you are interested in writing small amounts of dangerous code, these may be of interest: From Debugging to Integrity in Coding (Dan O'Dowd, Fall 2017); Software That Never Fails and Can't Be Hacked (Dan O'Dowd, June 11, 2021).


Until the semester actually begins, here is a self-assessment/warm-up exercise. This exercise is mandatory for incoming 410 students who have not passed 15-213 and is not a bad way for all incoming students to get back up to speed.

  • 15-410 self-assessment exercise
  • Prerequisite/self-assessment status form
  • Intel's Instruction Set Reference
  • Textbook

    The traditional textbook is Operating System Concepts, by Silberschatz, Galvin, and Gagne. We provide a table mapping reading assignments to the 6th through 10th editions of the book. The newer editions are more up-to-date on some topics, but they are also more expensive. What you get out of the textbook depends more on how much time you spend with it than on which edition you have, though you probably want to avoid some of the stranger sub-editions, e.g., "Essentials" or "with Java". We will not cover all of the text, and some topics (such as synchronization) will be taught using additional material. Rumor has it that the OSC text is available (purchase or rental) as an e-book from at least one major e-book vendor. As we have no experience with this format, if you try it, please let us know whether you like it.

    The experimental textbook is Operating Systems: Principles and Practice, Second Edition, 2014, by Anderson and Dahlin:

    You may also find useful the 15-213 textbook, Computer Systems: A Programmer's Perspective, Third Edition; the K&R C book; and perhaps C Traps and Pitfalls. An excellent source of suggestions for programming style and structure is Brian Kernigan and Rob Pike's The Practice of Programming, especially the first few chapters.

    Final exams

    You are responsible for checking the official CMU final exam schedule and immediately notifying instructors of all affected courses about any conflicts.

    Wind River graciously supports our educational mission by providing us with a free Simics license (more info).

    Some of the library software used in this class is used under license (more info).

    [Last modified Thursday January 19, 2023]