The purpose of this course is to familiarize you with the environment that modern computer programs exist in. Through a large and varied set of practical assignments, you will gain experience with the many steps along the path from source code to running program, memory management and virtual memory, process creation, communication and control, as well as a healthy dose of concurrent programming. While the class combines theory and practice, there will be a focus on how and why design decisions were made during the development of modern operating systems, as well as extensive hands-on programming experience. Plan to spend 10 +/- 5 hours per week on homework programming, depending on your current proficiency.

By the end of this course, you will have a good understanding of the main elements that work together to form modern computing environments. You will have acquired some familiarity with standard diagnostic tools, debuggers, dynamic memory allocation, concurrent programming, and file I/O both with physical files and network sockets.


The main conceptual prerequisites for this class are CS 211 (the C part), CS 261 (machine organization), and CS 251 (data structures). A solid understanding of the theory of how things are stored in the computer, as well as the theory of how a processor executes instructions, as well as a basic understanding of programming (and specifically programming in C) are the tools you’ll need to succeed in this class.

Peer Instruction

This course will be taught using Peer Instruction, a teaching model which places stronger emphasis on classroom discussion and student interaction.


Grades are curved based on an aggregate course score. There are separate curves for graduate and undergraduate students. This means that the course score cut-offs for an A, B, C etc. are not defined ahead of time: these will be set after the end of the course.

The course grade weighting is:

Task % of total grade
Reading Quizzes 7.5
Class Participation 7.5*
Homeworks 45
Midterms 20
Final 20


Reading quizzes will be given at the beginning of each class period using iClickers. Everyone will have their lowest three quiz scores dropped.


Participation is an incredibly important facet of this course. The baseline Class Participation grade will be based off of participating in classroom discussion questions. Your class participation grade can grow to a maximum of 10 through exceptional participation. The expected score in this category is 5: additional points are a bonus reserved for substantial contributions, entirely at the instructor’s discretion. Exceptional participation includes early reports of errors in assignments, helpful discussion on Piazza, contribution of helpful code to the common good of the class (e.g. test cases and/or testing scripts) and thoughtful discussions during lecture.


We will be using the book below as our main textbook. This is the same textbook as used in CS261, and it covers the majority of the topics discussed in this class.

Computer Systems, a programmer’s perspective

Randal E. Bryant and David R. O’Hallaron

The C Programming Language by Kernigan and Ritchie (colloquially referred to as K&R) is a suggested reference to help you with your C.


Homeworks will consist of approximately six programming projects with duration between one and two weeks. Homeworks will center around investigating or creating C programs. Be sure to consult the online handout, the TAs, or the professor if you have any questions.


You have two late days that will be automatically applied if your lab is late. If you have no late days, your lab loses 50% of its value per day. No work will be accepted more than 2 days late.

Extra credit will not be awarded for early turnins. Starting the assignments on time leads to completing the assignments on time and will lead to the grade you want. The assignments later in class are harder than the early ones; I suggest that you use late days only when you ABSOLUTELY POSITIVELY NEED TO.

The use of late days is automatic; if you have problems pushing and then accidentally push too late, that will count as a late day, so make sure to submit things earlier rather than later.


Consulting with your classmates on assignments is encouraged, except where noted. However, turn-ins are individual, and copying code from your classmates is considered plagiarism. For example, give the question “how did you do X?”, a great response would be “I used function Y, with W as the second argument. I tried Z first, but it doesn’t work”. An inappropriate response would be “here is my code, look for yourself”.

To avoid suspicion of plagiarism, you must specify your sources together with all turned-in materials. List classmates you discussed your homework with and webpages from which you got inspiration or copied (short) code snippets. All students are expected to understand and be able to explain their turned-in materials. Plagiarism and cheating, as in copying the work of others, paying others to do your work, etc, is obviously prohibited, is grounds for failing the course, and will be reported.