Course Overview


Welcome to your first course in operating systems! This course will introduce you to an exciting range of materials from the broad field of operating systems, including basic operating system structure, process and thread synchronization and concurrency, file systems and storage servers, memory management techniques, process scheduling and resource management, virtualization, security, and even distributed systems (a little).

This course assumes familiarity with basic computer organization (e.g., processors, memory, and I/O devices as covered in cs354) and data structures (e.g., stacks and hash tables). You will need to be able to program in C to perform the assignments in the course. If you don't have much experience in this language, don't worry (too much), we will spend some time covering background, but of course, learning on your own is important and valuable (in this class and in real life). For those of you who are new to C (e.g., you just know Java), realize this is an opportunity to broaden your skill set, and take it seriously. Being a good programmer is not sufficient to make you a good computer scientist, but it is necessary.


For learning about operating systems, we recommend coming to class and paying attention. Then, some time after class, read the assigned reading. This way you can make sure you are understanding what is going on as we plow through the material.

For an OS text book, we provide you with a free one we have developed here at Wisconsin. Here you can find the free OS book. It pretty much covers what we talk about in class, and more! All yours for the amazing price of free. That said, if you want a printed copy, you can buy one, no problem; visit the free OS book web page for details on how to pay for a free OS book!

For help with projects, you should probably buy the following two books. They are awesome and useful. The first is about C programming, written by the people who invented it. This is a recommended book for the course.

The second is about programming in the Unix environment, and is the absolute bible. It is particularly important if you'd like to become a Unix expert. But, you can absolutely get by without it.

Also useful: Expert C Programming by Peter Van der Linden. I really like this book a lot (though it is a bit dated). There is also a free resource on learning to program in C by Zed Shaw. It is called Learning C the Hard Way. For those of you looking for some exercises on getting up to speed with C, this is a fine way of doing so (though Shaw comes off as a bit extreme, sometimes).

You might also read this short, free, and incomplete introduction to the C programming environment, available for your viewing convenience off of the book home page here.

Other textbooks worth taking a look at: (1) (2) (3) (4) (5) . Also: (1) (2) . Read these too if you'd like to learn more about operating systems. The more you read (and understand), the better off you will be (this is true in life too).

Mailing Lists

Important announcements will be sent to the class mailing list as well as posted to the web page, so please read your mail frequently (particularly around project time)! You are responsible for the material sent to that list. Note that the class list is automatically generated based on who is enrolled in the class.


There will be a few homeworks handed out during the semester. All of these will strictly be optional - you don't have to turn them in. However, as exams will certainly contain some material that is quite similar to the homeworks, it is probably in your best interest to do some of these homeworks to see if you are really understanding what is going on in the class.


As part of the course, you will complete a number of programming assignments. Project are worth 50% of your grade. You should perform these projects on PCs running the Linux operating system (new Unix users to CSL Unix facilities should attend an orientation; minimally, read the instructional facilities overview.

The projects are a fundamental part of this course. Most projects require a significant amount of time; do not procrastinate! It is likely they will take longer than you expect. Do not wait until the day before the assignment is due to start. These assignments should be started pretty much when they are handed out. All information necessary to complete the assignments will be available from the class web page.

As stated above, all of the assignments will be in C. We assume that you have enough programming background that learning the basics of a new language (if it is indeed new to you) will not be difficult.

For the projects, you will primarily be graded on how well your implementation works. We will test your program on a suite of input sets. Your grade will be based on how many of the tests your application passes; we will only briefly examine your code to ensure that you followed the specifications of the assignment.

Also, don't cheat (duh). We will run software that checks for similarities between projects (both those that we submitted this semester and in previous semesters).


There will be some exams to test your knowledge. Exams are worth 50% of your final grade. The exams will be closed book, and will cover material from class and the projects.

  • Midterm 1: Wednesday 10/05 7:15-9:15
  • Midterm 2: Wednesday 11/09 7:15-9:15
  • Final Exam: Saturday 12/17 at 10:05 am

If you have an academic conflict during one of the 537 midterm exams you must officially let us know using the following procedure.

Form for midterm conflicts

Fill out the form specified above if you have an academic conflict with one of the 537 evening exams and you want to take an alternate exam. (Fill out this form even if you've earlier communicated with me in person or by email about a conflict.)

Of course, if you are able to resolve the conflict with the other class and take the 537 exam at the regular time, we will be very happy.

A bunch of official rules:

Once your conflict has been verified, you will receive an email confirmation that you will be taking an alternate exam at a time that does not conflict with your academic schedule.

So that we may schedule your alternate exam, you MUST email a copy of your course grid and the course syllabus showing your other exam conflict to 537-help.

You must fill out this form and provide us with this information no later than 2 weeks (14 days) before the relevant 537 exam.

We'll let you know of your alternate exam day/time no later than 5 days before the relevant 537 exam.