CS-537: Introduction to Operating Systems

University of Wisconsin, Madison
Department of Computer Sciences
Fall 2008

Basic Information

Section 1: Timetable entry ( Other deadlines , More timetable stuff )
Lecture: T and Th @ 9:30am-10:45am
Location: 1325 Computer Sciences
Discuss: Th @ 3:30pm and T @ 3:30pm (optional)
Location: 2317 Engineering

Professor Remzi Arpaci-Dusseau
Office Hours: T and Th @ 10:45am-11:45am (after class) and by appointment

Eric Aderhold (login: aderhold), W @ 9:30-11:30am in 5388 CS
Jin Guoliang (login: aliang), T and Th @ 4:30-5:30pm in 5388 CS
Vandhana Selvaprakash (login: vandhana) M @ 4-6pm in 5364 CS


Grade Distributions - Discussion Videos - Notes from lecture

Class News

1/7: Solutions to the final available here.
Older: Click here for older news.


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, system security, and a few other hot topics.

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 (not C++, and definitely not Java) 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! (i.e., stop complaining).

Mailing Lists

Important announcements will be sent to the class mailing list (compsci537-1-f08@lists.wisc.edu) 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; hence, sign up and start getting the emails!


For learning about operating systems, We recommend coming to class and following the class notes (which will be made available below).

You should buy these two books. They are awesome and useful. The first is about C programming, written by the guys who invented it. Awesome. The second is about programming in the Unix environment, and is the absolute bible. Buy both and thank me later.

Also useful is Expert C Programming by Peter Van der Linden; I really like this book a lot, but can't make you buy too many, can I?

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

It would also be useful to figure out how to use the debugger (gdb), makefiles (with a program called, well, make), and a few other tools. See if you can find some documentation on these; of course, we'll be talking about them in class too.

Finally, some of you have asked about an official OS text book. Unfortunately, I have yet to locate one I really like. However, if you like to read and want a different perspective on operating systems than that provided in the class, any of the following books would be a reasonable choice: (1) (2) (3) (4) (5) . Perhaps even more interesting but perhaps more from a historical perspective, although a bit specific/detailed: (1) and (2) .

The more you read, the better off you will be (this is true in life too).


09/02 Intro 09/04 Processes
09/09 Scheduling 09/11 Case Study: MLFQ
09/16 Mem Mgmt ( notes ) 09/18 Segmentation ( notes )
09/23 Paging/TLBs (notes: 1 2 3 ) 09/25 Virtual Memory
09/30 cont. 10/02 cont.
10/07 I/O and Disks 10/09 Files and File Systems
10/14 Case Study: FFS 10/16 Journaling
10/21 Threads 10/23 Locks
10/28 No class! 10/30 Locks(2)
11/04 Semaphores 11/06 Monitors
11/11 Deadlock 11/13 Distributed Systems NFS
11/18 AFS 11/20 RAID
11/25 LFS 11/27 Thanksgiving
12/02 Virtual Machines 12/04 Google
12/09 No class! 12/11 Wrap-up


As part of the course, you will complete a number of programming assignments. You may perform these projects on PCs running the Linux operating system.

New Unix users and novice Unix users new to the CSL Unix facilities are encouraged to attend an orientation session as early in the semester as possible. You may also purchase a copy of CS 1000 (An Introductory Manual to the Unix Operating System and the Computer Sciences Department's Instructional Computing Environment) at the DoIT Tech Store (first floor of the Computer Sciences and Statistics Building).

The projects are a fundamental part of this course. Although the first assignment will be relatively easy, the remaining projects each require a significant amount of time, so do not procrastinate! It is likely things 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, well before they are due. 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 and not Java. 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. C is actually quite similar to Java, as those who invented Java were C experts.

For the projects, you will 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 and how well you are able to answer our questions about the program; we will only briefly examine your code to ensure that you followed the specifications of the assignment.


There will be some exams to test your knowledge. The exams will be closed book, and will cover material from class and the projects.

  • Midterm: Monday 10/20 at 7:15pm in 1240 CS.
  • Final: Wednesday 12/17 at 10:05am in 1295 GRAINGER


Projects are worth 50% your total grade, and the exams are worth the other 50%.

Other Stuff

If you have questions or comments or just are up late, send mail; we may even reply.