Links to sections on this page:
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.
- 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.
- 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.)
Syllabus / Topics Covered
The following schedule and topics are tentative and are subject to change
- 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
- Thread Safety
- Wk 4-5: Basic Operating Systems Concepts (OSID Ch 3)
- Context Switching
- I/O Architecture
- Dynamic Storage Allocation
- Linking and Loading
- Wk 5-6: Operating-System Design (OSID Ch 4)
- A Simple System
- Virtual Machines
- Wk 7-8: Process Management (OSID Ch 5)
- Threads Implementations
- 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
- NFS Version 4
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 encouraged to work on them.
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.
All kernel programming assignments are extremely difficult.
You can do these assignments in teams of two or three 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.
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.
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 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 specifically
noted, every multiple choice questions has 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.
The third type is to ask you to give the best answer
for a word 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.)
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).
Can you tell why the first answers above are better than
the second answers?
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).
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.
- "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 credit.
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.
The grading breakdown is as follows:
The above percentages will be used to calculate a numeric score.
|| (extra credit)
Two methods will be used to calculate your final letter grade:
Your class letter grade will be the
higher grade based on (1) or (2).
||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
||Use the following fixed scale
(to encourage cooperation and friendly association amongst students):
|90% or higher
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!)
- 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 illness or family emergency (in accordance with USC
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
For a project assignment,
if you submit within the next 24 hours, you will receive 80% 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, 6 hours, 40 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. This goes all the way to the next assignment
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 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"
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.
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.
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.
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
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).
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.
During an exam regrade appointment, please do not spend time telling the
TA what you were thinking when you were writing down your answers. There is
really no need to talk to the TA unless you cannot figure out his/her hand-writing.
Please keep in mind that we can only grade based on what you wrote on the exam
paper. To be fair to all, we must assume that you wrote what you meant
and meant what you wrote. Since we have a large class, most likely, every
student will get a maximum of one regrade appointment. So, please use your time
wisely during a regrade session.
My office hours are held two hours each week. Please feel free to come to chat
with me to clarify lecture material and get hints about programming assignments.
You do not need an appointment to see me during office hours.
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.
There are two ways to get extra credit in this class.
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).
- Post good, 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
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 TA is considered
- If you post something good, it's your responsibility to verify that it
has been posted to the Google Group
- You will not get credit for anything posted to a Google Group for
the section you are not registered in.
- 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.
The figure below summarize the early submission extra credit schemes.
- 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
you get an extra 5%, i.e., your actual score will be 1.05 times your
graded assignment score.
Please note that due to my fairness policy,
I cannot offer any
individual extra credit work.
Implicit Student Agreement
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.
- 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.
- 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). But the rule the instructor must follow is that whatever
he offers you, he must offer to the entire class.
Auditing "unofficially" is not permitted for this class.
Most class related announcements will be sent through the
class Google Group.
Therefore, you are required to be a member of this 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)? Correct me if I'm wrong...
(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
Although this is not related to e-mails, it's a type of
question I get often. Please do not ask this types of
- 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.
A link to the
USC Spring 2014 academic calendar
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!)
- 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)
- 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
- Online Judge
online portal for IT interview
Just for fun:
- Ubuntu Linux
- cygwin (BSD system with X11R6 on Windows XP)
- Some Often-used UNIX Commands
- Unix commands (more complete, from University of Utah)
- UNIX Shell Programming (Chapter 2 of this book gives a good introduction to UNIX)
UNIXhelp for Users from the University of Edinburgh
UNIX Tutorial for Beginners from the University of Surrey
Introduction to the Unix Shell from the Canisius College
Introduction to C Shell Programming from the Canisius College
(compiling, linking, additional libraries, include files) from USC ITSWeb
Understanding C by learning assembly
- UNIX Documentation
(concepts, commands, X-Windows) from USC ITSWeb
- Editors on most UNIX systems
- Beej's Quick Guide to GDB
- Richard Stallman's gdb Tutorial
- General information on operating systems, productivity applications,
Internet connectivity, e-mail and web publishing at USC, can be found
at the ITS software site. You
can click on your operating system and download useful software from there.
For example, for the Windows platform, you can find things like
X-Win32, FileZilla, and PuTTY there.