Course Overview


Welcome to your first course about 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 (if there is time). That's a lot of material! Amazingly, even after this course, you'll realize we've just scratched the surface -- there is just so much to know about the wonderful world of computer systems.

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 as covered in CS367). 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 (hopefully, not many of you), 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 and do the homeworks at the end of each chapter. This way you can make sure you are understanding what is going on as we plow through the material. And plow we will!

For an OS text book, we provide you with a free one we have developed here at Wisconsin. Here you can find the free operating systems book . The book pretty much covers what we talk about in class, and more! All yours for the amazing price of free. Of course, you can buy a printed one if you like, or even shell out 10 bucks to own a full DRM-free digital PDF.

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.

The second is about programming in the Unix environment. It is particularly important if you'd like to become a Unix expert. But this is more for your own good; you can definitely get by in class 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 are also many free resources on learning to program in C; use google, find them!

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).

Lectures and Discussions

Lectures are twice a week and will cover conceptual material critical to OS understanding. Attend! Discussions are small group, once a week, and will cover practical materials related to projects. Attend!

Mailing Lists

Important announcements will be made on Canvas and piazza.


We will do one simple homework per week, through Canvas. These are not worth too much (roughly 5% of your grade). They will just make sure you are keeping up with the material. There is a lot of material, so if you fall behind, it will be hard to catch up.


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 departmental PCs running the Linux operating system . New Unix users to CSL Unix facilities should attend an orientation (if they still have those) or just find and complete an online tutorial. We'll also cover some aspects of Unix/Linux in class and discussion.

The projects are a fundamental part of this course. Projects always require a significant amount of time because we grade them only on success -- if your project doesn't work, you won't get credit for trying (sorry!). 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.

As we said above, 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). Cheating hurts others and hurts yourself. Later in life, you won't be able to use other people's code to do your job; why do it now?


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

  • Midterm: Wed 10/19 at 7:25pm-9:25pm in Humanities 3650 and Humanities 2340
  • Final: Wed 12/21 at 5:50pm (Section 2) or Thursday 12/22 at 7:25pm (Section 1)