Lecture:
| Mon 6:20pm - 8:50pm , online
|
Instructor: |
Hubertus Franke,
frankeh@cs.nyu.edu,
Background of the Instructor
|
Graders Assignments and Consulting Hours:
|
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
|
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:
- Introduction: Computer Architecture, History and Basics
- Processes and Threads
- Scheduling
- Concurrency and Synchronization
- Memory Management
- Input/Output
- File Systems
- Networking
- Advanced Topics
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 Assignments | 65% |
Final | 35% |
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
- You must have a computer account on the NYU CIMS linux machines.
All students registered must obtain a cims account, if you have none yet, by
applying here:
Computer Access and Accounts
- All communication should go through Discord (public or private chat)
- General questions on the labs should go to Discord as well
You may answer questions posed on the Discord forum as well.
- If you want to send mail just to me, use frankeh@cs.nyu.edu ( I do not monitor hf44@nyu.edu on a frequent basis )
- I will respond to all questions; if another student has answered the
question before I get to it, I will address if I disagree with the answer.
Silence on my end means "OK".
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)
- Computer programs YOU must write
- Due several lectures later (date given on assignment).
- Graded and form part of your final grade.
- Penalized for lateness.
The penalty is 2 points per day. Start your lab early and finish on time !!!
You can submit upto one week late after which we will not assess further late points.
You can submit as often you like until the due date, at which point grading starts
and no further submission are permitted. Once a late submission is submitted,
grading will be conducted with the late points being assessed.
If you miss the one week late deadline, talk to TA/me.
- We are using multiple code checkers to verify originality against several years,
though some of the assignments have since evolved.
- Labs have to run on the linserv1 machine in the CIMS lab and all discrepancies on code will be resolved based on that machine.
Doing Labs on non-NYU Systems
You may solve lab assignments on any system you wish, but ...
- You are responsible for any non-nyu machine.
I extend deadlines if the nyu machines are down, not if yours are.
- Be sure to test your assignments on the nyu
systems.
In an ideal world, a program written in a high level language like
C/C++ that works on your system would also work on the
NYU system used by the grader/me.
Sadly, this ideal is not always achieved despite marketing claims
that it is achieved.
So, although you may develop your lab on any system, you
must ensure that it runs on the nyu system assigned to
the course (linserv1).
Thank you.
Obtaining Help with the Labs
Good methods for obtaining help include
- Asking the grader during consulting hours (see web page for their hours).
- Asking me during my office hours or after class (see web page for my hours).
- Asking on the Discord forum (preferred).
- Checking slashdot for simple things like iterating through a queue (etc.)
- 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).
http://cs.nyu.edu/courses/summer23/CSCI-GA.2250-001/index.html