This is a senior-level undergraduate class in computer operating systems. We will cover the principles underlying the design of various subsystems of modern operating systems, ranging from process management and virtual memory to file systems and access control. Instruction in these principles will be augmented a series of projects in which students develop these subsystems within the context of an instructional operating system.

Recommended resources:

  • B. Kernighan and D. Ritchie, C Programming Language, 2nd Edition, Prentice Hall, 1988. (Since the C programming language is a proper subset of the C++ programming language, if you know C++, you pretty much know C already. However, things available in C++, such as strings and streams, are not be available in C. So, you need to know how to do things such as manipulating null-terminated array of characters and performing I/O in C.)

  • Scott Chacon, Pro Git (a free online book). You may want to use git when you do your programming assignments.

  • Joe Topjian, Unix for the Beginning Mage. (If you are not familiar with Unix, please read this tutorial as soon as possible.)

  • David Rusling, The Linux Kernel. (This is for your reading pleasure. We will not cover this book in our class.)
The following schedule and topics are tentative and are subject to change without notice (and it's based on a 15-week semester).
  • Wk 1-2: Introduction to Operating Systems (OSID Ch 1)
    • A Brief History of Operating Systems
    • A Simple OS
    • Beyond a Simple OS
  • Wk 3-4: Multithreaded Programming (OSID Ch 2)
    • Why Threads
    • Programming with Threads
    • Synchronization
    • Thread Safety
  • Wk 5-6: Basic Operating Systems Concepts (OSID Ch 3)
    • Context Switching
    • I/O Architecture
    • Dynamic Storage Allocation
    • Linking and Loading
    • Booting
  • Wk 7-8: Operating-System Design (OSID Ch 4)
    • A Simple System
  • Wk 8-9: Process Management (OSID Ch 5)
    • Threads Implementations
    • Interrupts
  • Wk 10-11: File Systems (OSID Ch 6)
    • The Basics of File Systems
    • Crash Resilency
    • Directories and Naming
    • Multiple Disks
    • Flash Memory
    • Case Studies
  • Wk 12-13: Memory Management (OSID Ch 7)
    • Memory Management in the Early Days
    • Hardware Support for Virtual Memory
    • OS Issues
  • Wk 14: Operating-System Design (OSID Ch 4)
    • Virtual Machines
    • Microkernels
  • Wk 15: Process Management (OSID Ch 5)
    • Scheduling
At the end of very book chapters, there are exercises. Students should treat them as additional resources. These exercises will not be collected, graded, or dicsussed, although students are encouraged to work on them if there is time.
You will be expected to complete a sequence of kernel programming assignments which develop various components of a real operating system: process management, file systems, and virtual memory.

All projects will require a fairly strong background in C programming, which you are expected to pick up on your own. There will be 1 to 2 warmup programming assignments at the beginning of the semester to make sure that you are up to speed with C and doing multi-threading in C.

There will be 3 kernel programming assignments and they are extremely difficult and can be very very time-consuming. You can do these assignments in teams of two to four students. Since the kernel programming assignments are interrelated, you must pick a team at the beginning of the semester and stick with the team till the end of the semester. If you'd prefer, you can do the kernel assignments by yourself (although this is only recommended for students who are good programmers and are good at debugging using a commandline debugger).

All programming assignments can only be graded on a 32-bit Ubuntu 16.04 system. You will receive no credit if your program cannot run on this platform.

For more information, please see the projects web page.

A midterm and a final examination will be given. The date of the midterm examination will be posted near the top of the class home page. The date of the final examination is firm and it is also listed near the top of the class home page. Any scheduling conflicts regarding the midterm exam date must be resolved with the instructor at least one week before the exam date.

Exam Locations

Unless otherwise specified, all exams will take place in the lecture class room of your respective section. If an exam is to take place in a room different from the lecture class room, information will be explicited provided in the corresponding item in the General Information section of the class web page.

Exam Questions

I often get questions such as (1) can I get a copy of an old exam and (2) what types of questions should I expect? The answer to question (1) is "no". I'm sorry, but I do not give out old exams. That's just my policy. The answer to question (2) is the following.

There are three types of exam questions that I usually ask. The first type is a calculation-type question. Pretty much anything that can be calculated/computed by running an algorithm can be asked in an exam. For example, I can ask you to compute a schedule using a particular scheduling algorithm. I can also ask you to calculate average waiting time for a particular scheduling policy. (Calculators will not be permitted during exams, but you can leave your answers as fractions for non-integer answers.) I may also ask you about what a data structure (e.g., tree, hash table, etc.) would look like after certain operations have been performed on it. Usually, for this type of questions, you must get the answer right and there is not much room for partial credits.

The second type is multiple-choice questions. Unless explicitly stated, every multiple choice questions has one or more correct answers. (Even if a question asks, "which statements are correct", it can have one or more correct answers.) Please check all the correct ones and don't check any of the incorrect ones. There is a penalty for selecting incorrect answers (you will lose 1 point for every such selection). Please note that an incorrect statement can never be a correct answer (unless the question asks you to select statements that are incorrect).

The scoring of multiple-choice questions is as follows. Multiple-choice questions are worth 2 points each and you are given 5 selections for each such question. It can have 1 to 4 correct answers. If a multiple-choice question has 1, 2, or 4 correct answers, for each correct answer that you have selected, the number of points you will get would equal 2 divided by the total number of correct answers. If it has 3 correct answers, you will get 1 point for selecting one of the correct answers and you will get 0.5 point each for selecting additional correct answers. Therefore, if you mark all the correct answers and don't mark any of the incorrect answers, you will get 2 points. But if you have selected incorrect answers, we will subtract 1 point for each such selected. In the end, if the total score for a problem is below zero, a score of zero will be assigned. Let's look at a concrete example. If a problem has 3 correct answers and you selected 2 correct ones and one incorrect one. You will get 1.5 points for the correct answers and -1 point for the incorrect answer. So, you will end up with 0.5 point. On the other hand, if you have only selected one of the correct answers and didn't select anything else, you will end up with 1 point.

The third type is to ask you to give the best answer for a given question. (If a question says, "In N words or less...", it's giving you a hint that the answer should be N words or less. You don't have to answer in N words or less. There is one exception though. If the question is of the fill-in-the-blanks type where N is small, then you must not use more than N words.)

For this type of question, you get credit for including the "best answer". You may get deductions for including "bad answers". What you need to demonstrate is that you can distinguish between answers of different quality and write down the best answer. (For these questions, there is no need to write complete English sentences when you answer exam questions. Just give me the important stuff!)

Let me give a couple of silly examples (with questions that's not in the scope of any exam).

  • "For programming assignments (well, this is not our policy, I'm just using this as an example), when is 'plagiarism' considered taking place? If your answer is "when you take someone else's work and claim it to be yours", then you will get full credit. If your answer is, "when you submit someone else's work", you probably will not get full credit (since you are allowed to use code given to you in another class that you have taken if you cite it properly).

  • "What is the fairness policy of this class?" If your answer is, "whatever the instructor offer to one student, he must offer it to the rest of the class," then you will get full credit. If your answer is, "the instructor must be fair to every student," you probably will not get much partial credit.
Can you tell why the first answers above are better than the second answers?

Weenix Questions

If a question does not mention "weenix" explicitly, you must not give a weenix-specific answer. Most weenix-related questions are mostly high-level questions, testing about your understanding of "weenix". Although I may ask you about the purpose and usage of a specific field inside a particular important kernel data structure.

Lecture Slides

If a lecture slide has a grey X in the lower left hand corner, I will not ask questions from that slide. If a lecture slide does NOT have the grey X, then it's possible that I will ask questions from that side (you need to figure out if it's LIKELY that I will ask questions from that slide or not; please do not ask me whether a particular slide is likely or not because I won't give you an answer for it).

Exam Grading

In order to be fair to the entire class, we can only grade based on what you put down on the exam paper. We must not take into consideration what's in your mind when you wrote your answers. We have to assume that you wrote what you meant and meant what you wrote.

In general, better answers may score more points. If you give very high level and generic answer that's generally true or basically just repeat the question, you probably will get very little partial credit for it! You need to answer a specific question with a specific answer. On the other hand, if the question called for a general answer and the answer you gave only applies to some specific examples, you probably will get very little partial credit for your answer. You must not give examples to answer general questions.

If I asked a question straight from the lecture slides, the best/correct answer is the one on the lecture slides. If you disagree with what's on the slides, you must complain when you are studying for the exam, i.e., before the exam. Once the exam starts, it's too late to complain that you don't like the answer on the lecture slides. In an exam, if you give an answer that's different from the lecture slides, you may receive partial credits, at the discretion the TA. Finally, I reserve the right to ask about things that I think you should know and not on lecture slides and not in the textbook.

Study for Exams

I often get questions about how to study for exams. Here's what I would say about my exams.

I mentioned on the exams lecture slides that our exams are mainly about "knowledge about course material" AND "critical thinking". I think a lot of students lost points in multiple choice questions because they were not careful about reading questions and answers. If you are not very careful in reading multiple choice answers and you select an incorrect answer, you would lost 1 point and these points do add up. Since all students in CS 402 are grad students, it's reasonable to ask everyone to "think critically". For every "wrong" answer in a multiple choice question, if you think carefully (based on your knowledge about the course material), you should be able to say, "Obviously, this is wrong because of this and that", i.e., you should be able to form an argument that clearly show that a particular answer is incorrect. So, you definitely need to know the course material well enough so you can form those arguments. You also need to read every question and every answer very carefully so you won't choose an incorrect answer.

One thing I would recommend is to form a study group to study for exams. You can form a study group with your kernel teammates or teammates from another team. You can come up with your own true/false question when you read lecture slides and ask other students to figure out whether your statement is true or false. If someone answered "false", he/she must give an explanation why the answer is false. If you get into the habit of identifying exactly why a particular statement is false, I think you will be able to do the same during exams.

The grading breakdown is as follows:
Class Participation:   4%  (extra credit)
Projects:   40%  
Midterm Exam:   25%  
Final Exam:   35%  
The above percentages will be used to calculate a numeric score.

Two methods will be used to calculate your final letter grade:

(1)    Use a modified curve (i.e., we won't necessarily assign an equal number of failing grades as passing grades) based on the numeric score calculated above
(2)    Use the following fixed scale (to encourage cooperation and friendly association amongst students):
Percentage Letter Grade
91% or higher A
82-91% A-
73-82% B+
64-73% B
55-64% B-
46-55% C+
37-46% C
28-37% C-
below 28% F
Your class letter grade will be the higher grade based on (1) or (2).

Please also note the following:

  • No other methods will be considered. (So, please do not ask the instructor to take how much you have improved since the beginning of the semester into account. You are expected to try your best from the beginning!)

  • According to the above guidelines, it should be clear that it is possible to get a grade of C or below for individuals who perform very poorly (i.e., you should not assume a B- or even C+ if you perform very poorly, according to the guidelines above.) However, we hope that everyone will perform well.

  • We will not assign incompletes unless you miss the final exam for documented illness or documented family emergency (in accordance with USC policy).
All project assignments must be turned in on time. Late submissions will receive severe penalties. Due to clock skews, electronic submissions of projects assignments will be accepted within 15 minutes after the specified deadlines without penalties. For a project assignment, if you submit within the next 24 hours, you will receive 90% of your grade. Although right after midnight of the submission deadline, you will lose 1% every 5 minutes. When the penalty reaches the day limit, it flattens out. For example, if your submission has a timestamp that is 32 minutes after the grace period, 7% will be deducted from your assignment after grading; if your submission has a timestamp that is 1 day, 7 hours, 30 minutes, and 1 second after the grace period, you will receive a score of zero (and your assignment will not be graded). The figure below summarize the deductions for warmup assignment 1, warmup assignment 2, and kernel assignment 3.

For kernel assignment 1 and kernel assignment 2, beyond one day late, you can still submit and receive a 50% deduction, if you inform the instructor before these assignments are graded. This goes all the way to the next assignment submission deadline. The idea here is that since kernel 2 depends on kernel 1, if your kernel 1 is not working, you may end up spending all your time to get it to work in the next couple of weeks and have no time to work on kernel 2. This way, you still get 50% of your kernel 1 score and will enable you to complete kernel 2 also at a 50% deduction. The figure below summarize the deductions for kernel assignment 1 and kernel assignment 2. (Please note that this policy does NOT apply to kernel assignment 3.)

If you are unable to complete a assignment due to illness or family emergency, please send e-mail to the instructor as soon as possible to get an extension. A documented official proof of illness or family emergency is required in order to get an extension (doctor's note is required as proof of illness). In general, when you get sick, it's best to see a doctor and get a note just in case you may need it later.

For kernel assignments, you can only get an extension if everyone in the team is sick. Please also understand that even if you have an approved extension, all your work must be submitted before any final exam starts (which is on the Wednesday of the final exam week). If you have a prolonged illness and cannot finish your assignment before that, your only option is to take a grade of INCOMPLETE and complete your missing assignments in the next semester. But please understand that, in this case, you are only eligible for a grade of INCOMPLETE if you cannot take the final exam due to illness. Once you have taken the final exam, this option is no longer available.

Recently, there has been a change in the policy at the Student Health Center regarding giving a "note from the doctor" for you to bring to a faculty member so that you can be execused from deadlines. Basically, they will not give you such a note any more. What they would give you is an Authorization for Disclosure of Medical Information form. With this form, you give them permissions to discuss your illness with me.

So, if you visit a doctor at the Student Health Center, please make sure you fill out one of these forms, check the "limited discussion with faculty" checkbox, get it stamped, signed, and dated by someone there (a clerk/receptionist would sign at the "witness" line), and bring it back to me. This would satisfy the "note from a doctor" requirement so that you can get an extension.

Alternatively, if you get a "Walkout Statement" from Student Health that has your name and the date of the visit, you can send a copy of that to me and that would also satisfy the "note from a doctor" requirement. If there is too much private information on the Walkout Statement, please feel free to black it out before you make a copy.

If you visit a doctor somewhere else, please either bring a "note from the doctor" or a similar authrozation letter so I can contact them. The minimum requirement is to bring a piece of paper from the doctor's office (showing that it's from the doctor's office) saying that you were there on that day. It doesn't have to say why you were at the doctor's office. But it has to show that you were there.

Assignment Regrades

All requests to change grading of programming assginments must be submitted in writing within one week of the time the initial grade was announced to you. Requests must be specific and explain why you feel your answer deserves additional credit. A request to re-grade an assignment can result in the entire assignment being re-evaluated and as a result the score of any part of the assignment be increased or lowered as appropriate.

If you have made multiple submissions and after you have received your grade and you noticed that what we graded wasn't the submission you wanted us to grade, you may ask us to to grade a different submission. In this case, we will deduct 20 points. By default, we will grade the last submission. What you should do is to go through the verification procedure and make sure that we are grading the submission you want us to grade. If you discover that the submission we are grading is not the one you want us to grade and if you tell us soon after grading starts, there would be no penalty.

Exam Regrades

Each TA is required to use one standard when grading all the exams in his/her section. Therefore, regrade for exams is not about arguing for points but about whether the TA has made a mistake in grading or not. If you think the TA has made a mistake, you should write down (on the cover page of the exam) which problem/subproblem needs to be regraded and why you think the TA has made a mistake. Plese limit the description of your rationale to be only one sentence long (e.g., "my answer is also correct", "I deserve more partial credit", etc.). There is no need to discuss your answer or your rationale with the TA since the TA is required to grade entirely based on what you wrote on the exam paper (and thus must ignore everything you said during a regrade session).

Please be familiar with the grading rules for multiple choice questions. The TA must stick to those rules when giving points for multiple choice questions.

After the regrade appointment is over, the TA will look over your answers in order to determine if a mistake was made (i.e., the actual regrade only happens after your regrade appointment). If a mistake was made, the TA will need the instructor's approval in order to return points to you. If I approve of a grade change, I will send you a private e-mail informing you that I have updated my grading records. Please understand that if your grade stays the same, I will not send you an e-mail. Therefore, if you don't get such an e-mail from me, it means that your grade did not change.

To be fair to all, we must assume that you wrote what you meant and meant what you wrote. Every student gets a maximum of one regrade appointment. So, please use your time wisely during a regrade session and not spending much time telling the TA what you were thinking when you were writing down your answers since the TA must grade based on what you wrote and not what you were thinking..

My office hours are held four hours a week in Fall and Spring semesters and two hours a week in a Summer session. Please feel free to come to chat with me to clarify lecture material and get hints about programming assignments. Please understand that neither I nor the teaching staff can help you to write your code or debug code for you. We also cannot read your code to help you to improve your code.

You do not need an appointment to see me during office hours. Please check the News section of the class home page to see if a particular office hour has been moved or canceled. If my office hour is not canceled, then I will be in my office during the time of the office hour.

When there are students waiting to ask questions, in order to give others a chance to ask questions, I can only talk to one student straight for 15 minutes. If you have more questions, please give others a chance and move to the back of the line.

Regarding lecture materials, please understand the purpose of office hours is to clarify lecture materials. I will not repeat lecture materials during office hours. If you miss a lecture, it's your responsibility to figure out how to make up for the missing lecture materials. Since lectures are recorded for the DEN section, you should review DEN lecture videos before you ask me to clarify lecture materials.

If you need to see me outside of office hours, it's best that you make an appointment (and reserve a timeslot) so I can make sure to be in my office when you visit. Making an appointment is not a big deal! Just send an e-mail to me and tell me when you are available to meet and go from there. Typically, same-day appointment may be very difficult to schedule.

There are three ways to get extra credit in this class.
  1. Post timely (i.e., within 24 hours of the original post), useful, and insightful answers to the class Google Group in response to questions posted by other students regarding kernel programming assignments.
    • The maximum number of extra credit points you can get is 10 points for each of the kernel assigments (on a 100-point scale).
    • You can lose extra points you have earned if you post something unprofessional to the class Google Group or exhibit poor netiquette. Please always be courteous and professional.
    • The instructor (or the TA) will decide to award extra credit or not at his discretion and will keep track of scores. (Harrassing the TAs or course producers is considered unprofessional behavior.)
    • You probably won't get extra credit points if you repeat exactly what others have already posted (so, you should always try to add something useful to what others have posted).
    • You probably won't get extra credit points if you respond to a post 24 hours beyond the time of the original post (unless you have something very insightful to add).
    • If you want to be considered for extra credit, you have to reply to an existing post (i.e., do not start a new thread).
    • You definitely won't get extra credit points if you respond to a post via private e-mail.
    • If you post something good, it's your responsibility to verify that it has been posted to the Google Group.

  2. To encourage you to do your programming assignments early, you will get extra credit if you turn in programming assignment 2 or 3 days early.
    • If your submission is more than 72 hours before the posted deadline, you get an extra 10%, i.e., your actual score will be 1.1 times your graded assignment score.
    • If your submission is between 48 and 72 hours before the posted deadline, you get an extra 5%, i.e., your actual score will be 1.05 times your graded assignment score.
    The figure below summarize the early submission extra credit schemes.

  3. Earn class participation extra credit.
When calculating your extra credit points for programming assignments, we apply the early submission extra credit first (by multiplication) and the Google Group extra credit at the end (by addition).

Please note that due to my fairness policy, I cannot offer any individual extra credit work.

Unless otherwise specified, programming assignments and exams must be that of the individual student (for group programming assignments, the work must be completely that of the group members). It is often productive to study with other students. However, if any portions of the programming assignments are found to be shared between two (or more) students, zero credit will be given to all students concerned and all students will be disciplined. This policy is in the interest of those students who do their own work, which hopefully applies to all of you in this class.

This policy also holds for programming assignments. In this class, we will use sophisticated automated program checkers to detect cheating. Be aware that the program checkers have demonstrated very good results and are widely used within the academic community. Any student caught cheating will be given zero credit and will be disciplined.

It is the students responsibility to submit their assignments electronically in time.

For students who satisfied the prerequisite at other universities or through work experience, this course assumes that you understand data structures, basic algorithms, and UNIX programming. You should be able to write large programs in C. No special assistance or consideration will be offered if your background is inadequate.

During the semester you are responsible for completing the assigned readings, programming assignments, and exams.

You must keep up with the assigned readings. If you come to class without having read the chapter for the corresponding lecture, you're unlikely to learn anything at all from the lecture. In particular:

  1. You are expected to read the relevant textbook chapter thoroughly. Not all details will be covered in class, and the exam may test material covered in the textbook but not discussed in class.
  2. I expect you to attend every class meeting. If you do happen to miss a session, you are responsible for finding out what material was covered and if any administrative announcements were made. Also, please be aware that all exams (in the summer session) are in-class, so you will be expected to at least attend those lectures.
The instructor must treat all students equally and cannot give special treatment to any particular student. Therefore, please do not ask special favors from the instructor because of your circumstances. This may seem unfair to you because you believe that your circumstances are special (understandably, everone does). Other than the exceptions setup at the beginning of the semester (mostly for "remote DEN" students), the rule the instructor must follow is that whatever he offers you, he must offer to the entire class.
Students who are registered with the Disability Services and Programs (DSP) must inform the instructor regarding the type of accommodations that have been approved by the university. Please send a copy of your Letter of Accommodation from DSP to the instructor by the end of the 3rd week of classes so that the instructor can make sure that the required accommodations will be satisfied.
Auditing "unofficially" is not permitted for this class.

If you are officially auditing this course (i.e., register for this course under the no-grade option), you will receive all the course materials as other students. But you will not be permitted to form or join a team with students who are taking this course for grades to do the kernel assignments.

E-mail is a serious communication tool. For this class, you should setup your e-mail server so that you do not drop any e-mail from me (i.e., from <>).

Pretty much all class related announcements will be sent through the class Google Group. Therefore, you are required to be a member of this Google Group. As messages are posted to the class Google Group, you will receive e-mail notifications and you should read all these class-related e-mails. Please see instructions on how to get on this group (you should do this as soon as possible).

You are strongly encouraged to send private e-mail messages to me if you have questions about programming assignments or lectures. If the answer is appropriate for the entire class, I would normally anonymize the reply and send the reply through the class Google Group and bcc a copy to you. So, please don't be shy to ask questions!

One type of question I often get over e-mail or see in the class Google Group is:

Here is my understanding of X. Am I right (or is this correct)? Correct me if I'm wrong...
Although this type of question is perfectly fine during office hours, this is really not a good way to ask questions over e-mail. If no one corrects you, you must not conclude that you were correct! If you see "X" defined or described in lecture slides or in the textbook, you should try to understand why it was stated that way. A better question to ask over e-mail would be to ask about why it was stated that way.

Another type of question I often get is the following:

I am thinking about not following the spec or grading guidelines and would like to do this instead. Is it acceptable (or is this okay)?
What you are really asking is whether you will receive full credit or not. Please just stick to the spec and the grading guidelines.

Some students have asked to do video conferencing or voice calling because e-mailing is too inefficient. Due to my fairness policy, if I offer video conferencing or voice calling to one student, I must offer the same to all students and that's just not feasible/scalable given the class sizes of CS 402. If you have questions, please feel free to e-mail me as soon as you have them in case it has to take several rounds of e-mailing to get your questions answered.

Please make sure you read the Academic Integrity Policy of this course.
The diversity of the participants in this course is a valuable source of ideas, problem solving strategies, and engineering creativity. I encourage and support the efforts of all of our students to contribute freely and enthusiastically. We are members of an academic community where it is our shared responsibility to cultivate a climate where all students and individuals are valued and where both they and their ideas are treated with respect, regardless of their differences, visible or invisible.
A link to the USC Spring 2020 academic calendar is provided here for your convenience.
A link to the USC Spring 2020 CS schedule of classes is provided here for your convenience.
(These resources below are provided for your information. Please note that the instructor has not read most of them. Please use these resources at your own risk!)

Programming (please understand that the information on these web sites may be incorrect):

Unix/Linux (although they are not the same things, they are quite similar): Just for fun (not all that related to our class):