This course will cover the key concepts in modern operating systems. Specifc topics include:
Note that this document can be found on the Web at http://www.cs.uga.edu/~dkl/473/Fall99/syllabus.html
Office: GSRC 219D, 542-9269
CS 473/673 email: csx730@pollux
I am a faculty member in the Computer Science Department at the University of Georgia. My main area of research is parallel and distributed computing.
Office hours are for you. Please do not hesitate to come to my office. Office hours will usually be very busy right before an assignment is due; if you start the assignments early and come to my office well before they are due, you have a better chance of avoiding the rush. Due to my busy schedule, I cannot accept drop-ins outside of office hours.
I will also be available by appointment; please send me email to set one up. Please note that I will not be able to accept all requests for appointments, especially around program due dates. If you do wish to see me outside of office hours, you need to make an appointment. I am more likely to accept appointments on Tuesdays and Thursdays --- Mondays and Fridays are my research days.
Finally, please keep in mind that office hours are not a substitute for missed lectures.
There is one additional rule with regard to office hours: I will not help any student or team that is not using some kind of debugger.
Office Hours: Monday, 2-3:30, GSRC 307
There are students trying to add this course, so if you do not have the prerequesites, I will be forced to drop you from the course.
The required textbook for the course is Modern Operating Systems by Tanenbaum. You will be expected to read any assigned material. We will not be able to cover all assigned reading in lecture. Please note, however, that you are responsible for any assigned material. Specifically, exam questions covering reading material are fair game.
Attendance at lectures is optional. You are, however, responsible for all material covered in lectures. We will often be discussing material different from the textbook. I feel that the lectures are the course; I will do my best to make them interesting. I believe that you won't just be able to read the notes and succeed.
You should come to lecture prepared. Ideally this means you have read the assigned material in advance. I am aware that this will not always be possible -- at least review the previous lecture.
"Lecture" is really a misnomer. Ideally, we will have a discussion as opposed to me just lecturing. Please do not hesitate to ask questions; you might think your question is dumb, but more likely, many people are wondering about the same thing.
Grades will be assigned on the usual A-F basis. Grading will be absolute; there will be no "curve". Achieving a 90% will guarantee an "A", 80% a "B", and so on. However, when the final grades are given, it could be the case, for example, that an 85% gets an "A". Do not confuse this with a curve, however. If everyone does A work (as I hope), everyone will get an A. If everyone does C work, everyone will get a C. So that you know your grade at all times, four fictitious students will be given grades for each assignment and exam. These students will be named "Min A", "Min B", etc., indicating the minimum score for each grade. Graduate students will be graded on a different scale than undergraduate students.
There will be at least four homework assignments, seven programming assignments, a midterm, and a final. Their approximate weights will be as follows:
Please note that these are tentative. Relative weights of assignments can change upon the whim of the instructor. Also, you will not pass the course with a grade of C or better unless you get a C or better on one of the exams.
The class schedule will be updated quite often; you should reload this page often. Please note that due dates can change up on the whim of the instructor.
It's a good idea to read the assigned material before lectures. You can find the material that will be covered in each lecture on the Class Schedule page.
Written assignments will cover the material in the book and in lecture. These assignments are to be done individually. You may not discuss the assignments with any other classmates.
Over the course of the quarter, graduate students will be assigned literature papers covering current operating systems innovations. For each paper, I expect the graduate student to read the paper and write a summary. In addition, I may ask you a few questions about the paper. In the summary you should indicate two good points of the paper and one bad point. These will count as part of the homework assignments for the graduate students.
The programming assignments will each be involved with the implementation of operating system features. We will use the Nachos instructional operating system, which was designed and implemented at the University of California, Berkeley. Nachos is a skeletal operating system (that works). It includes kernel threads, linear paging, a single-threaded file system, and interrupt handlers; it is coded in C++. It includes a MIPS simulator that will run user programs and invoke the Nachos kernel when necessary. Over the course of the quarter, you will add semaphores and condition variables to the kernel, implement several system calls, implement virtual memory, and implement a multi-threaded file system.
You will work individually on the project. Note that in prior years I have conducted the projects in teams. This is no longer the case.
Part of each assignment will be understanding the Nachos code that is already there. This is not necessarily a simple task. To assist you, I will keep a home page with Nachos information; see the link above. Look at that page to see how to get a copy of Nachos. Also, Thomas Narten of Duke University has written a Nachos roadmap which may be of use to you.
Please note that each assignment in this class builds on the previous ones. This means that it is vital that you correctly implement each assignment. You will not be excused from assignment N just because you did not get assignment N-1 to work correctly. Further, it is likely that some of the test cases will be exactly the same from project to project.
Your projects will be tested by the TA or me. Test cases are generally pass (full credit) or fail (no credit). This means that if you fail every test case, you will get a zero on the assignment (it is possible that a few points will be given for programming style, etc., but your score will be poor nonetheless). You are responsible for testing your programs to ensure their correctness. Note that just getting the program to compile is not enough; similarly, just getting the program to pass a few test cases is not enough. You are welcome to share test cases; this is often the best way to ensure that your program works.
It is sometimes the case that one small bug caused a disproportionally large number of test cases to fail. In such a case, you may be eligible to correct your mistake and get some of the points back. See me if you believe you have such a case.
Graduate students will have harder programming assignments than undergrads.
All assignments are due at the start of class. Over the course of the semester, each person will receive 3 late days. These can be used in any combination on the programming assignments and should allow you to schedule around deadlines in other classes you are taking. Note that a weekend counts just as regular days do; in other words, if an assignment is due Friday and is turned in Monday, it is 3 days late. Late days cannot be used on the written assignments; furthermore, I will not accept any homeworks that are more than 3 days late..When you have no late days left, you will lose 10% per day, without exception. If an assignment is more than 3 days late, you will receive a zero on the assignment. Late days cannot be used after classes have ended. Please note: if your assignment is even one second late, it's late, without exception.
Please start early on programming assignments. I will warn everyone of this several times, but surely people will ignore these warnings (computer scientists, by nature, are procrastinators). However, the fact remains that in the real world, there is a penalty for lateness, unless you happen to be working for Microsoft. One suggestion: if you think that you can do a program in 3 days and you have 2 weeks to do it, do it during the first three days.
If you are sick and have appropriate documentation, always let me know as soon as you get sick. It will be to your disadvantage to tell me after the fact that you were sick; you may not be excused from the regular due date.
Please keep in mind that social events (e.g., fraternity/sorority parties, football games, all-night Quake contests) are not acceptable excuses for late work and will be immediately rejected. If you have a conflict that is school sponsored (and academic to some extent), I will consider but not necessarily grant a request for an extension.
Note that scheduled downtimes are not an excuse for late work.
There will be one midterm and a final. The exams will be open book and open notes; however, you may not bring in any other books besides the course text. The exams will not be simple regurgitation of the material covered in class; rather, they will be designed to see if you understand the material.
Without prior arrangement, any missed exam will result in a grade of zero.
Cheating will not be tolerated in this class. You are allowed, and in fact encouraged, to discuss the programming assignments with other students. However, these must be general discussions. For example, discussing the need for locking address spaces is perfectly fine; however, telling one exactly how that is done is not. If you have any doubts about what you are doing, ask me. I hand over all cheating cases directly to the Academic Honesty department. Their punishment, if you are found guilty, carries with it a minimum of a failing grade in the course and a transcript notation. This means that if I catch you cheating, you're not just going to get away with an F on that assignment; the punishment is much stricter than that. So, simply put, don't cheat.
Note that copying materials from the Web is a violation of academic honesty. There are many other schools that use Nachos; copying any kind of solution from their Web sites is forbidden. Furthermore, accepting code written by students in previous offerings of this class will be considered gross violations of the academic honesty policy. I keep all ex-students' Nachos code. If I catch you copying code, I will do my best to make sure you get the harshest penalty possible, including expulsion from the university.
Please note that unfamiliarity with the rules and regulations of the academic honesty environment at the University of Georgia will not be grounds for leniency. In other words, if you come from a background where collaborative work is the norm, you must realize immediately that it is not allowed in this class, unless cleared by me first.
You may drop the class during the first three days without an annotation ending up on your transcript. Thereafter until the drop day, you may drop the class with an annotation. An incomplete will only be considered in a case where there is a documented medical evidence and you are making satisfactory progress in the course. If you have a medical emergency and are not making satisfactory progress after the drop date, you may be offered a late withdrawal; this is up to the instructor.
First, you are responsible for reading and understanding this entire syllabus. I will hold you to the rules set forth within this document. Second, any computer science programming course involves a significant amount of work. This class will have more work than most computer science courses. If you do not feel you have the time to spend, you may want to think about taking a different course. Ask previous students about the workload in this class. I expect you to treat this class professionally.
I will be using the Web as much as possible for this course. Handouts will be rare. All lecture notes will be on the Web. In addition, I will create a mail alias for the course, which will allow me to "post" information in a place where everyone will surely see it.
Class announcements, such as due date and assignment changes, will be made by email notification and/or on the Web. You are therefore responsible for checking these two places. If you make an error because you did not check the Web and your email, I will hold you fully responsible.
You must sign the statement below and return this document to me. Failure to return this document by Thursday, August 26 will result in your forced withdrawal from the class.
By signing at the bottom of this document I state that I have read the entire syllabus and agree to abide by its terms.
Signed: