Operating Systems
CSCI-GA.2250-001, Summer 2024






General Information

Lecture:
Mon 6:20pm - 8:50pm , online
Instructor: Hubertus Franke, frankeh@cs.nyu.edu, Background of the Instructor
Graders Assignments and Consulting Hours:

Please see Brightspace

Anything grading related stuff you need to talk to your assigned Grader. Also, please ask questions on Discord to get quick answers. Anybody (Prof, Grader, Students) should help answer questions (other than providing code) to make the class a success for everybody.
Prerequisites: Common CS knowledge and programming skills.
Four labs consisting of approximately 500-600 lines of code each (give and take). Expect at least 20hrs per lab, typically spread over 3 weeks. This class is designated as a class to emphasize programming in C/C++ and as most operating systems are written in C this is a perfect opportunity to pick this skill up. As a result all labs will have to be coded in C/C++. Learning how to become proficient in C/C++ is one side goal of this class. Expect to learn C/C++ through self study over the first 3 weeks. If necessary, an extra session will be provided to get you up to speed, which will take place after class ( > 8:20pm ) [ just let me know a few days in advance ]. There is plenty of online material to get a crash course on C++ (most students use C++ over C) to come prepared.
Text book: Author: Andrew Tannenbaum
Title: Modern Operating Systems
Edition: 4th
Publisher: Prentice Hall
ISBN-13: 978-0-12-3591720
ISBN-10: 0-13-359172X

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 (though Linux will be used for most examples). Topics that will be covered include:

The following topics will be covered in this class:

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 (though desired) to have C or C++ knowledge, but all labs will have to be written in C/C++, so basic working knowledge in either language or similar functional language like Java is desired. There are multiple classes on Linda that can help you get started on 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

Grades are based on the labs, the midterm and final exam, each being important. The weighting will be:
Lab Assignments65%
Final35%

This is a graduate level class, so I am looking for lively interactions during the class and not just presence.
The final will be given on TBD, there is no midterm due to the short summer period. You have to be on Zoom to participate.

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

All materials etc are available of Brightspace only

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 grader during consulting hours (see web page for their hours).
  2. Asking me during my office hours or after class (see web page for my hours).
  3. Asking on the Discord forum (preferred).
  4. Checking slashdot for simple things like iterating through a queue (etc.)
  5. Asking another student, but ...
    Keep the discussion at the abstract level
    Your lab must be your own.
    That is, each student must submit a unique lab based on his/her own design and problem solving. Naturally, simply changing comments, variable names, restructuring, etc. does not produce a unique lab and code verification easily identifies these. Searching online for potential solutions will contaminate your code and it will show in code verification.

Publicly storing your code such as GITHUB

Developers increasingly are using github to support their devops. Please make your repositories private to avoid others copying your code and being dragged unwillingly into cheating issues (yes that happened before).

See also

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

http://cs.nyu.edu/courses/summer23/CSCI-GA.2250-001/index.html