Course Information

Be sure to read all of this page!


Description

The purpose of this course is to explore the many problems and concepts involved in designing an operating system. We will begin with a simple question: "What is an operating system?" When we discover that the answer is a moving target, we will begin to discover what kinds of problems must be solved to present a user or programmer with a simple, virtual machine that may actually be running on top of disparate hardware.

More specifically, there are a number of topics that are important for any system, from an operating system to a database system to a web server. We will address these problems, and discover that some have good solutions, some have good but impractical solutions, and some have no good solution at all. The most critical topics will likely be the following, given roughly in the order that will we cover them:

We are not likely to delve far into the last three topics, if we get to them at all. However, if we do get to address them, you will get a sense of what kinds of issues are addressed in advanced operating systems courses. The other topics, however, are still the subject of debate and research, and should keep us occupied for many moons.


Class times and materials

We will meet three times per week for a 50 minutes each. The meetings are at MWF at 2 pm, and will be in Seeley Mudd 207. Note that at some point in the semester, we will be begin to use some of this class time as lab time, where time will be spent on the assignments, described below.

The text for this course is Operating System Concepts, Sixth Edition, by Silberschatz and Galvin. The book is available at the Jeffery Amherst College Store.

There is also a web site for the book that provides some other information and useful links.


Assignments

At heart, this will be a project class. Specifically, you will be implementing a basic operating system kernel on top of a virtual machine provided to you. This virtual machine won't be all that interesting -- simple computations will likely be all that we do with it. However, that should be enough for us to build an operating system and run some programs.

There will be three projets, each one building on the next. These projects will be done in teams (probably two people, perhaps three to a team). Each project requires some substantial design, programming, and debugging, so you should expect to spend significant time working on them. Initially, you will be given a very simple kernel that can boot and then support a single process running in a single address space. Then, with each project, you will make your kernel support:

  1. Multiple processes in a single address space
  2. Processes in independant, paged, virtual address spaces
  3. Processes that can access a filesystem

While the topics covered by the project address only the core services provided by a common operating system, they are still the most important and, in some cases, least well understood services. It is in doing these projects that we are likely to learn the most about the algorithmic and resource management processes that any system must handle.

Warning: These projects will be programmed in C++. We will spend a little time in class, when needed, talking about the language. There will be handouts on details that you need to know, compiler use, and debugger use. I am always happy to answer questions that arise from language-based confusion. However, we will not be spending substantial time on the language itself. I largely expect that you will pick up C++ as you use it. It is the language most like Java that compiles directly to a native executable format, and is mnost similar to the C in which most real kernels are now written.


Exams

There will be a three hour final exam for this course. Because the projects are so substantial, and because I want them to receive your full attention, there will be no mid-term exams. The final exam will cover material that is covered in lectures but not in projects.

The time and place for the exam will be annouced when it has been scheduled for the final exam period.


Grading

Your grade for this course will be calculated based on a forumla that will closely resemble the following one:

It is critical to ask questions and be involved in the details of this class. As you will find in doing the projects, the concepts don't sound too difficult until you get into the details of the solutions.


Attendance

You are responsible for the material presented in every lecture. I strongly recommend that you attend every lecture. If you miss a lecture, it is your responsibility to obtain the material that you missed.


Late submission

A project not submitted by its deadline will receive a failing grade.

If you need an extension, you must submit a written request for that extension at least 72 hours before the deadline. Exceptions will be made on a case by case basis for illness and emergencies.

These projects are involved, and you should plan to leave as much time for debugging as you needed to program the first version of your solution. Projects build substantially on one another, so it is important that your solution to a project be sufficient so that you may move on the next one.


Scott F. Kaplan
Last modified: Sat Aug 25 10:48:49 EDT 2001