Course Description - CSCI 402, Fall 2012, TuTh Section

Links to sections on this page:
  • Focus
  • Late Policy
  • Fairness
  • Textbooks
  • Note From A Doctor
  • Auditing
  • Syllabus / Topics Covered
  • Regrade Policy
  • E-mail
  • Homework Assignments
  • Office Hours
  • Academic Integrity Policy
  • Projects
  • Extra Credit
  • Academic Calendar
  • Exams
  • Implicit Student Agreement
  • Additional Resources
  • Grading
  • Student Responsibilities
    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 security. 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 will need to use Git for the programming assignments.

    • David Rusling, The Linux Kernel. (This is for your reading pleasure. We will not cover this book in our class.)
    Syllabus / Topics Covered
    The following schedule and topics are tentative and are subject to change without notice.
    • 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: Multithreaded Programming (OSID Ch 2)
      • Why Threads
      • Programming with Threads
      • Synchronization
      • Thread Safety
    • Wk 4-5: Basic Operating Systems Concepts (OSID Ch 3)
      • Context Switching
      • I/O Architecture
      • Dynamic Storage Allocation
      • Linking and Loading
      • Booting
    • Wk 5-6: Operating-System Design (OSID Ch 4)
      • A Simple System
      • Virtual Machines
      • Microkernels
    • Wk 7-8: Process Management (OSID Ch 5)
      • Threads Implementations
      • Interrupts
      • Scheduling
    • Wk 8-9: File Systems (OSID Ch 6)
      • The Basics of File Systems
      • Crash Resilency
      • Directories and Naming
      • Multiple Disks
      • Flash Memory
      • Case Studies
    • Wk 10-11: Memory Management (OSID Ch 7)
      • Memory Management in the Early Days
      • Hardware Support for Virtual Memory
      • OS Issues
    • Wk 11-12: Security (OSID Ch 8)
      • Security Goals
      • Security Architectures
    • Wk 13: Networking (OSID Ch 9)
      • Network Basics
      • Remote Procedure Call Protocols
    • Wk 14-15: Distributed File Systems (OSID Ch 10)
      • NFS Version 2
      • CIFS
      • DFS
      • NFS Version 4
    Homework Assignments
    At the end of very book chapters, there are exercises. Students should treat them as practice problems to get ready for exams.

    These exercises will not be collected or graded, but students are strongly encouraged to work on them.

    You will be expected to complete a sequence of several programming projects which develop various components of a real operating system: process management, device drivers, 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.

    All programming assignments will be done in teams of two or three students. Since the 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.

    Please see the projects specifications for details.

    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 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 two 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 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 in the following form: "In N words or less, what is the answer to the following question?"

    For this type of question, you can write as many words as you'd like, but I will only read the first N words of your answer! You don't need to count the number of words in your answer, you just need to make sure that the most important part of your answer appears in the first N words! (There is no need to write complete English sentenses when you answer exam questions. Just give me the important stuff!)

    The reason I'm doing this is that I don't want a brain dump of everything you know about a topic and tell me that the answer is there and that I have to look for it! I want you to tell me what part of your answer you think is important and you need to distinguish between answers of different quality and put the best answer up front.

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

    • "In 20 words or less, for our programming assignments, 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.

    • "In 20 words or less, 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 credit.
    Can you tell why the first answers above are better than the second answers?

    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 credit for it! You need to answer a specific question with a specific answer.

    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 were 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.

    The grading breakdown is as follows:
    Projects:   25%  
    Midterm Exam:   35%   [BC: updated 9/13/2012]
    Final Exam:   40%  
    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
    90% or higher A
    80-90% A-
    70-80% B+
    60-70% B
    50-60% B-
    40-50% C+
    30-40% C
    20-30% C-
    below 20% F
    Your class letter grade will be the higher grade based on (1) or (2).

    Pleaes 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!)

    • We will assign grades of C and below to individuals who do not perform satisfactorily (i.e., you should not assume a B- or even C if you perform unsatisfactorily.) However, we hope that everyone will perform well.

    • We will not assign incompletes unless it is for a documented medical reason (in accordance with USC policy).
    Late Policy
    All homeworks and project assignments must be turned in on time. Late submissions will receive severe penalties. Due to clock skews, electronic submissions of projects and homeworks assignments will be accepted within 15 minutes after the specified deadlines without penalties. If you submit within the next 24 hours, you will receive 80% of your grade. Although right after midnight, 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, 6 hours, and 41 minutes after the grace period, you will receive a score of zero (and your assignment will not be graded). The figure below summarize the deductions.

    If you are unable to complete a homework or a programming assignment due to illness or family emergency, please see the instructor as soon as possible to get an extension. A doctor's note is required as proof of illness or emergency. 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.

    Note From A Doctor
    Recently, there has been a change in the policy at the Student Health Center regarding giving a "note from the doctor" to 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.

    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.

    Regrading Policy
    All requests to change grading of homework, programming projects, or exams must be submitted in writing within one week of the time the initial grade was given. 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.
    Office Hours
    The instructor's office hours are held two hours each week.

    You are welcome to make an appointment to see the instructor outside of office hours.

    Extra Credits
    No extra credit assignments will be given for this class. So, there is no need to ask. Try your best from the beginning! Also, due to my fairness policy, I cannot offere any individual extra credit work.

    There are two ways to get extra credit in this class.

    1. [BC: updated 10/1/2012] Post good, useful, and insightful answers to the class Google Group in response to questions posted by other students regarding programming assignments.
      • The maximum number of extra credit points you can get is 5 points for each of the warmup projects (on a 100-point scale).
      • The maximum number of extra credit points you can get is 10 points for each of the kernel projects (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 TA will decide to award extra credit or not at his discretion and will keep track of scores. (Harrassing the TA is considered unprofessional behavior.)
      • If you post something good, it's your responsibility to verifythat 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.
    When calculating your extra credit points, we apply the early submission extra credit first (by multiplication) and the Google Group extra credit at the end (by addition).
    Implicit Student Agreement
    Unless otherwise specified, all work including programming assignments and exams must be that of the individual student. It is often productive to study with other students. However, if any portions of homeworks or 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/C++. No special assistance or consideration will be offered if your background is inadequate.

    Student Responsibilities
    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 several of the exams 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). But the rule the instructor must follow is that whatever he offers you, he must offer to the entire class.
    Auditing is not permitted for this class.
    Most class related announcements will be done through the class Google Group. Please see instructions on how to get on this group (you should do this as soon as possible).

    Please do not ask the following types of questions in your e-mail:

    • Here is my understanding of X. Am I right (or is this correct)?
      (You can do this for just about everything and in many different ways. I do not have the bandwidth to deal with too many questions like this. However, often times, you should be able to ask a slightly different question and get the same answer that you are looking for. This type of questions is completely appropriate for office hours.)

    • I don't understand X. Could you explain X to me?
      (It's your responsiblity to come to lectures and ask questions during lectures if there is something you do not understand. If you did attend lectures, then it is appropriate to ask this during office hours.)

    Although this is not related to e-mails, it's a type of question I get often. Please do not ask this types of question:

    • Here is what I am thinking of or doing... is it acceptable (or is this okay)?

      (What you are really asking is whether you will receive full credit or not. Wouldn't it be great if you can ask this during exams? It's not an appropriate question for assignments for the same reason it is not appropriate for exams. Although there is a difference between programming assignments and exams, but since you are asking about grading, it's inappropriate. If you asking if it's okay to take a shortcut. The answer is always, "No" or "At your own risk.")

    Academic Integrity Policy
    Please make sure you read the Academic Integrity Policy of this course.
    Academic Calendar
    A link to the USC Fall 2012 academic calendar is provided here for your convenience.
    Additional Resources
    (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!)


    • C Programming (by Steve Holmes at the University of Strathclyde in Glasgow, England) - includes notes on make, separate compilation, file I/O, etc.
    • Makefile tutorial (at Colby College)
    • Makefile tutorial (at Indiana University)
    • Steve's Software Trek (by Steve Karg) - includes some useful C/C++ source code for string manipulation, INI file manipulation, etc.
    • C Examples - lots and lots of sample C code for basic stuff.
    • C/C++ at USC from USC ITSWeb

    [Last updated Sat Sep 19 2020]    [Please see copyright regarding copying.]