This course will be an in-depth study of important concepts and techniques found in modern computer operating systems. It will not attempt to provide a comprehensive introduction to operating systems. Some previous exposure to the basics of multi-programmed operating systems will be assumed. This will permit a detailed examination of some of the more important areas, including file systems, storage, virtual memory, networking, and security, with an eye to recent directions in these areas. Textbook readings will be supplemented where appropriate by papers from the research literature.
An important part of the course will be the case study of an actual operating system. We will primarily use Linux 4.x in this class. Students will study the source code for this operating system, and will do programming exercises and projects that involve modifying the operating system and measuring its behavior and performance. aaaaaaax
If you follow the course readings and homeworks, you will come out of this course with a basic understanding of a modern operating system. You will be able to read major parts of source code for Linux and generally understand what they do. You will even be able to write simple kernel modules from scratch, or modify existing complex ones.
Other recommendations which would greatly help you in this class:
If you do not fulfill the class prerequisites, you may not take this class without instructor permission.
Unfortunately, the university registration system does not always validate prerequisites or enforce registrations based on degree programs or department affiliations. Furthermore, we have limited resources available for this class: seating, teaching staff, and laboratory facilities. Therefore, at my discretion, I will collect information about each student who wants to take this class and correlate it with university records. Then I will decide who can take the class. Note that this is independent of whether you are already registered for the class or not. Priority will be given to CS graduate students.
In either case, I will endeavor to allow everyone who has the proper background to take this class, including undergraduate students and non-CS majors.
Finally, the lab resources of this class are limited and thus reserved only for registered students. No auditors are allowed in this class.
You can get a copy of the following book from Amazon, or read it online from within the Stony Brook campus, through the Safari online books:
Daniel P. Bovet & Marco Cesati
Understanding the Linux Kernel (3rd edition)
O'Reilly & Associates, Novemeber 2005.
ISBN: 0596005652
I expect to be covering some portion of the material in this book, and I will expect that people will read the relevant parts of them. I will not cover every chapter in detail or in order. I will supplement the book with online material, research papers, and other resources as needed.
The book is inexpensive and is available from the university book stores as well as Amazon and your neighborhood book store.
Other standard references typically used in operating system courses are:
Uresh Vahalia
Unix Internals: The New Frontiers
Prentice Hall, 1996.
Abraham Silberschatz, Peter Galvin
Operating System Concepts (fifth edition)
Addison-Wesley, 1998.
Andrew S. Tanenbaum
Modern Operating Systems
Prentice Hall, 1992.
Brian Keringhan and Dennis Ritchie
The C Programming Language (2nd ed., ANSI version)
Prentice-Hall Software Series, June 1988.
ISBN: 0131103628
Brian Keringhan and Rob Pike
The UNIX Programming Environment
Prentice-Hall Software Series, March 1984.
ISBN: 013937681X
Christian Benvenuti
Understanding Linux Network Internals
O'Reilly Media; 1 edition (December 1, 2005)
ISBN: 0596002556
If your previous exposure to operating systems principles is weak, you might wish to refer to these books.
Besides the course text, during the semester we may study some research papers from industry and academia. We will also read parts of the source code of the Linux operating system. These references will be made available via the course home page, at the following URL:
http://www.cs.sunysb.edu/~cse506/
The homework in this course will consist of three types of activities:
Reading from the textbook, assigned papers, and Linux source code. You obviously won't be graded on this part of the homework, but the exams will contain questions to try to determine whether you have done the reading and integrated the reading material into your own understanding of operating systems. Note also that you are resposible for reading all of the posts on the class mailing list. The list will be an invaluable informational resource for you throughout the class (that's why you must subscribe to it).
Programming Exercises in which you will use operating system features, make modifications to a real operating system (Linux) to add new functionality, to change the behavior of the existing system in some way, or to instrument the system to make performance measurements.
Class Project which will span the latter part of the semester. You can consider it a "large homework assignment."
Reading will take place on an ongoing basis throughout the semester. Programming assignments will be given regularly, with each assignment due three to four weeks after it is issued. There are 2-4 programming assignments, with the last assignment often being a larger project conducted in a team. I feel that actual programming experience is extremely important in the systems area, and so I have assigned a fairly high weight to the programming portion of the grade (see Grading below) to help motivate you. You must work on the programming assignments alone, unless otherwise specified.
For homework 1 you must work alone. For homework 2 you may work with one other student (i.e., a partner). For the class project you may work in a team of at most four students total. Larger partnerships will not be permitted.
You must turn the homeworks in on the day they are due and on the time they are due as listed in the course calendar. Since the homeworks will include programming exercises, students are urged to plan ahead to avoid congestion of the computer facilities at the last minute. If your code is incomplete or is not working by the due date, turn in whatever you have. Any homeworks that are submitted after the due date might or might not be graded, at the convenience of the course staff; if we grade them, we may elect to deduct a number of points for lateness, at our discretion. (Our typical policy is to deduct 2 points for every hour that the assignment is late, rounded up.) Late homeworks that are not graded will be held until the end of the semester, in which case I will have a look at them to decide whether you will be receiving a fair final grade. Generally speaking, if your homework assignment is not graded due to late submission, at my discretion you will receive either a zero for that assignment or you will receive a score equal to the average grade you received on all your homeworks that were graded. If some sort of emergency prevents you from submitting your homework on time, supplying me with suitable documentation might influence the choice I make, but please do not ask me to tell you that it is ``OK'' to submit your homework late. It is never ``OK'' to submit your homework late, but you will benefit more from submitting a late homework than if you submit nothing at all.
For the programming assignments, you will work alone. For the project, you may work with a partner. If you work alone, you submit your own work. If you work with a partner, you will submit your assignments jointly with your partner. Whether or not you work with a partner, you may discuss the programming assignments with anyone you like, but you may not share code with anyone other than your partner. The code you and your partner submit must be your own work, and only your own work. Any evidence that source code has been copied, shared, or transmitted in any way between non-partners (this includes using source code written by others in previous semesters, or by persons outside of the class or USB!) will be regarded as evidence of academic dishonesty. (BTW, there are some wonderful tools out there such as MOSS to compare N programing assignments and correlate those that have a shared code basis, even if the code had been changed significantly!)
Note: while I encourage you to seek out information on the Web, if you do use any Internet/Web sources in your assignments (including books and any other media format), then you must cite and acknowledge those sources properly. Not doing so constitutes academic plagiarism, and will not be tolerated.
I am very serious about not tolerating academic dishonesty. In a graduate class, when I am able to establish that academic dishonesty has occurred, I generally assign the student in question a grade of "F" for the course and forward the particulars to the Graduate Program Director (GPD) for inclusion in the student's folder; the GPD may decide to forward the student's case to the CS Department Graduate Grievance and Appeals Committee (G-GAC). If the student is a repeat offender, I ask that the Graduate Program Director initiate proceedings to dismiss the student from the degree program. For more information, see the Graduate Academic Dishonesty departmental procedures. Besides, we're here to learn. Do you want to get a good job and impress your peers with your programming skills, or get fired by your boss for failing to get the job (or worse, get sued for copying someone else's work).
For more information, see the Academic Judiciary Web site.
Generally speaking, to get at least a B+ in this class, your overall numeric grade in this class must be above 75% of the total possible number of points (not counting extra credit). Note that this does not mean that everyone who gets less than 75% will automatically get a grade less than B+.
PhD students taking this course as part of qualifier exams, take note. Historically, less than 20% of students who took this course got an A- grade or better. Pleas for an A- or better at the end of the semester will not be accepted.
To pass this course, you have to get at least 50% of the total numeric cumulative grade, not counting extra credit. Note that if you get less than 50%, it does not mean an automatic failing grade, but the grade will not be a good one either.
Attendance and participation in classes, in particular, will be factors that can offset borderline grades. This includes conversations with the instructor and TA over email, using the class mailing list, and so on. I also often take into account evidence of improvement over the course of a semester. However, I will not entertain end-of-term pleas to get a certain grade.
So that you can get an idea of how you are doing as the term progresses, I will report rough percentile information when I hand back each assignment. Final percentile scores will not be computed until after all grade changes and corrections have been taken into account at the end of the term.
The exams are closed book and include a mix of multiple-choice and programming questions. There is no negative grading or penalty if picking the wrong choice in a multiple-choice question.
Grading of Programming Assignments: To help you understand how your programming assignments are graded, we will post a detailed grading criteria for each assignment shortly after the assignment is handed out. This will help you focus your efforts based on what we plan to test and grade, as well as ensure equitable grading.
Re-grading: after each grade is given out, you will have a chance to discuss it with the grader and the instructor. You must first discuss your grade with the grader, within the first 48 hours after the grade has been handed back. It's highly recommended that you take some time to review your entire grade before discussing it with the grader. After discussing your grade with the grader, if you wish, you may discuss it with the instructor during office hours or by appointment.
Extra credit: In some instances I may assign extra questions or problems, designated as "extra credit." These will be optional additional points given to students based on extra credit work performed. Any extra credit points accrued by any student will be used as follows. The final course grade will be assigned as a letter grade which excludes all extra credit points. Then I will apply a subjective method to determine how much value to assign to extra credit points. Extra credit points can only be used to raise your final course letter grade. In other words, you are not obligated to do any of the extra credit work, and you can still get an A in this course.
Working alone on the HW2/HW3: Some of you may choose to work alone on assignments in which I permit teams; others may work in teams. To be fair to the people who work alone, I often will expect more substantial work accomplished when working in pairs. In addition, when assigning final course grades, I will often apply a subjective method to account for people who worked alone.
If you have a physical, psychological, medical or learning disability that may impact on your ability to carry out assigned course work, I would urge that you contact the staff in the Disabled Student Services office (DSS), Room 133 Humanities, 632-6748/TDD. DSS will review your concerns and determine, with you, what accommodations are necessary and appropriate. All information and documentation of disability is confidential.
The list of subjects covered may be adjusted based on the level of preparation of the students in the class. If nearly everybody has some prior OS course, then we can pursue more advanced topics at a more rapid rate. If not, then we have to go slower and do more basic things.
The list of topics I expect to cover in class (not in this order) are as follows: