COMS W4118 -- Operating Systems I

MonWed 02:40P-03:55 PM
Room 1127 Mudd


Design and implementation of operating systems. Topics include process management, process synchronization and interprocess communication, memory management, virtual memory, interrupt handling, processor scheduling, device management, I/O, and file systems. Case study of the UNIX operating system.

Computer Use
Academic Honesty
Submitting Homework


CSEE W3827 (Fundamentals of Computer Systems) and knowledge of C and programming tools as covered in W3157 (Advanced Programming) or W3101 (Programming Languages). Note well: knowledge of C++ is not an adequate substitute.

Teaching Assistants

Yingbo Song ys2242 Tue 4:00-5:00
Thu 11:00-12:00
Ye Ilhoiy2110 Mon 5:45-6:45
Fri 1:00-2:00
Japinder Chawla jsc2127 Mon 4:00-5:00
Wed 1:30-2:30


Homeworks  50%

If you have complaints about grading of any homework or exam question, please discuss it first with the TA, within two weeks of when the grade is assigned. If you're still not satisfied, forward all relevant email to me.


  • Tanenbaum, Modern Operating Systems, 2nd Edition, Prentice-Hall, 2001, ISBN 0-13-031358-0. (Required)
  • Bovet and Desati, Understanding the Linux Kernel, 3rd Edition, O'Reilly, 2006, ISBN 0-596-00565-2. Note: get only the 3rd Edition, since it describes the Linux 2.6 kernel. (Required)

Other Readings

  • Organick, The Multics System; An Examination of its Structure, MIT Press, 1972. On reserve in the Engineering library. (Supplementary)
  • Ritchie and Thompson, "The UNIX Time-Sharing System", Communications of the ACM 17:7, July 1974.
  • Supplementary background material on Multics.

    Computer Use

    You're welcome to use any development environment you want, but all programming assignments must run on the CLIC machines. Programs that don't compile or kernels that do not boot under VMware will receive zero credit.

    In order to use the CLIC machines, you need a CS account. You are responsible for obtaining this account. Please obtain it immediately, since you probably cannot do the programming assignments without an account.


    Homeworks will consist of written answers and programming problems. All assigments must be submitted electronically; the exact mechanism will be announced shortly.

    Homeworks serve three purposes: practice in the material covered in class, ensuring that you've learned material covered in class, and pedagogical. That is, you're expected to learn from the homework assignments. In particular, this means that not every last detail will be spelled out. You're expected to use sound judgment in making any necessary decisions. In general, the more central to the purpose of the assignment a decision is, the more critical it is.

    All homeworks are due at the start of class. Homeworks received later that day lose 5%, the next day 10%, two days late 20%, three days late 30%; after that, zero credit. You need a really good reason to get an extension, backed up (if appropriate).

    A number of the homework assignments will involve reading and modifying the Linux kernel. As such, knowledge of C -- not C++ -- is required.

    Assignments are here.

    Academic Honesty

    I expect students to observe the highest standards of academic honesty. The penalty for a first offense is a zero grade on the affected assignment and/or reduction in course grade; in addition, I will report the offense to the Academic Committee and to the Dean's office. There will be no warnings and no second chances.

    Discussing lectures, assignments, algorithms, and the like is permitted and encouraged. Turning in someone else's answers or code is strictly prohibited, whether the source is someone else in the class or something you found on the Internet.

    The CS department has its own academic honesty policy. You are responsible for reading, understanding, and following it.

    Working in Groups

    The programming part of most homework assignments will be done in groups of three people. You are encouraged to form your own groups; I'll fill in the blanks as needed. In general, I'll be grouping CVN students together, and separating graduate students from undergraduates. I'll probably rearrange the groups during the semester, grouping together students who do not contribute appropriately.

    Official Linux Kernel Archive
    Helpful site for the beginner kernel hacker
    This site indexes kernel files and functions; very helpful for finding things
    Free tech books online
    C programming guide
    CVS tutorial
    Another CVS tutorial
    A Makefile tutorial
    Another Makefile tutorial
    Documentation on VNC
    A source tree browsing tool