Operating Systems
CSCI-GA.2250-001, Spring 2016

Note: I will post important short-term notices here
NO CLASS ON 3/14 (spring break)
MIDTERM ON 3/21 (half the session)

General Information

Mon 7:10P- 9:00P Weaver CIWW 109
Instructor: Hubertus Franke, frankeh@cs.nyu.edu
TAs/Graders: Vikram Mullachery, mv333@nyu.edu
Gabriel Nunes, (gbn210@nyu.edu)
Jiakai Zhang, (jiakai.ta@gmail.com)
Office Hours:
TA Assignment
[0-9] Hubertus Franke: Mon 6:15 - 7:00 Room Weaver 320 or after class
[A-G] Vikram Mullachery: Wed 6-7PM CIWW 13th floor (lounge)
[H-Sa] Gabriel Nunes: Tue 3-4PM CIWW 13th floor (lounge)
[Sb-Z] Jiakai Zhang: Thu 4-5PM CIWW 13th floor (lounge)

Prerequisites: Common CS knowledge and programming skills (most of the programming will be based on C/C++). First lab we allow Java. Four labs consists of approximately 500-600 lines of code each (give and take).
Text book: Author: Andrew Tannenbaum
Title: Modern Operating Systems
Edition: 4th (you will also survive 3rd)
Publisher: Prentice Hall
ISBN-13: 978-0-12-3591620 or 978-0-13-6006663-2
ISBN-10: 0-13-359162X or 0-13-600663-9

Course Description

This course is an introductory course in operating systems (OS), focusing on the core concepts of operating systems. The emphasis will be on understanding general concepts that are applicable to a wide range of operating systems, rather than a discussion of the features of any one specific system. Topics that will be covered include:

Examples will be from Unix/Linux. Programming assignments will be based on C or C++ as Operatings Systems are implemented that way. You will initially not be required to have C or C++ knowledge, but after the first of four labs you will have to move over to C/C++. Each of the four labs is approximately 600 lines of code.

This course does not assume that you have taken an Operating Systems course as an undergraduate, or that you have had extensive experience working with one. In fact, if you have taken such a course or have a fair amount of practical experience with OS internals, this course is probably too elementary for you. Please take a look at the course schedule to get a sense of the topics that will be covered: if you can explain most of the terms contained there, you are likely looking for a more advanced course. We will NOT be "hacking" on an operating system but will have lab assignments that deal with the fundamental elements such as different process schedulers and memory management algorithms and I/O schedulers. It will allow you to get and experiment with the concept rather than spending endless hours debugging tedious operating system code.


Grades are based on the labs, the midterm and final exam, each being important. The weighting will be:
Lab Assignments55%
This is a graduate level class, so I am looking for lively interactions during the class and not just presence.
The midterm will be given on 3/21.
The final will be given on 5/9.

Class Materials, Handouts, Lectures and Assignments (will be made avail before classes)

DateTopicHandouts ReadingsAssignments
Introduction: Computer System Architectures (what does the OS manage)
Class Overview ,
Introduction to O/S
Chapter 1
Lab 1 Due 2/16
Intro + Processes and Threads
Processes and Threads
Chapter 2

Processes and Threads Processes and Threads
Chapter 2

Process Scheduling Scheduling

Chapter 2.4
Lab 2 Due 3/15
Concurrency Concurrency Chapter 2.3 and 6

Memory Management 1
Memory Management 1 Chapter 3.1-3.3

MIDTERM + Memory Management 2
Memory Management 2 Chapter 3.4 Lab 3 Due 4/12
Input/Output Chapter 5.1-5-5
Input/Output Chapter 5.1-5-5
File Systems
FileSystems Chapter 4.1-4.3
Lab 4 Due 5/3
File Systems
FileSystems Chapter 4.4

Networking / Security
Networking not in book
Chapter 9

Advanced Topics/ Review
Advanced Topics


Computer Accounts and Mailman Mailing List

Several labs (programming assignments) across the semester will provide practical implementations of operating system concepts such as processor scheduling and memory management. These assignments are accepted in C or C++.

Labs (aka programming assignments)

Doing Labs on non-NYU Systems

You may solve lab assignments on any system you wish, but ...

Obtaining Help with the Labs

Good methods for obtaining help include

  1. Asking the TA during office hours (see web page for their hours).
  2. Asking me during office hours or after class (see web page for my hours).
  3. Asking the mailing list or the NYU Classes forum (preferred).
  4. Asking another student, but ...
    Your lab must be your own.
    That is, each student must submit a unique lab. Naturally, simply changing comments, variable names, etc. does not produce a unique lab.

See also

Graduate cs.nyu.edu courses: http://cs.nyu.edu/webapps/spring2016/courses
Graduate cs.nyu.edu schedule: http://cs.nyu.edu/webapps/spring2016/Graduate/courses
Academic integrity policy: http://cs.nyu.edu/web/Academic/Graduate/academic_integrity.html