CS 636 Operating Systems

Course Website:
Canvas Course Site:

Lecture: Tue and Thu 4:35pm-6:20pm, LS 307

Midterm: TBA
Final: Tuesday, December 15th 2015 5:30pm-7:30pm LS 307


Instructor: Greg Benson
Phone: 415.422.5066
Office: Harney 533
Office Hours: TBA

Course Objectives and Topics

In this course we will investigate the design and implementation of reliable distributed systems, including distributed storage systems and scalable data processing engines. Examples of such systems include the Google File System, Amazon's Dynamo, Cassandra, Google MapReduce, Hadoop, and Spark.  Many of these systems are the foundations for what is called Cloud Computing. While we will look at programming some of these systems our main goal will be to understand how such systems are built and look for opportunities to improve the state of the art. This is a seminar style course in which we will read many academic research papers that describe and evaluation different scalable system designs. In addition, you will work on projects related building scalable systems and applications.  Your final project will be a group project in which you implement a version of Spark. You will design and implement a version of the Spark architecture, demonstrate it's functionality, measure performance, and report your results in a final presentation and paper.

This is a demanding class and probably unlike some of the other graduate courses you have taken at USF. I expect you have taken a rigorous undergraduate operating systems course and that you are comfortable with programming Python. Initially, reading the technical papers will be time consuming, but you will get better as you gain more experience. Projects will including implementing MapReduce, Leader Election, and Spark.

Learning Outcomes

On completion of this course the student should be able to accomplish the following:
  • Understand the fundamental need for scalable systems.
  • Understand the restrictions found in the underlying hardware and software using for building scalable systems.
  • Explain the current state of the art in building scalable systems.
  • Design and develop scalable storage and computation systems.
  • Read and evaluate operating systems research papers.
  • Communicate effectively in a technical group discussion.
  • Carry out a systems research experiment and write up a technical report that summarizes the results.


As mentioned above, you should have taken an undergraduate operating systems course that required you to build and understand the major components of an operating systems kernel.
  • CS 326 Operating Systems or equivalent
  • Useful classes: assembly, data structures and algorithms, and networks
  • Experience with C, Java, and Python
  • Experience with using UNIX/Linux via the shell

Course Materials

There are no required textbooks for this course. I will make available research papers for you to read and we will be using online documentation.  There are many references Python and some good online resources.



 Paper evaluations
 Participation 10%
 Midterm 10%
 Final 20%
 Projects 50%


All assignments will be worth 100 points. Grading will be done on an absolute scale:

 Min A-
 Min B-
 Min C-
 Min D-

If you score 90% or higher will be guaranteed an A-.

For each evaluation and each class discussion you will be given a Check-, Check, or Check+. These are equivalent to:

 Check 80
 Check- 70
 N/A 0

In some cases I may assign an in-between grade or a Check--- for very poor performance.

Due Dates and Attendance

Assignments must be turned in on time to receive credit. Except in the most extreme situations, late assignments will not be accepted. If you cannot complete an assignment by the due date, hand in whatever you have done in order to receive partial credit.

Because 10% of your grade comes from class participation, class attendance is required.

Cheating and Plagiarism

All students are expected to know and adhere to the University of San Francisco's Academic Honor Code. Go to for details.

You must never represent another person’s work as your own.

Copying answers or code from other students or sources during a quiz, exam, or for a project or homework assignment is a violation of the university’s honor code. This includes copying code or other material from the web, and having anyone other than yourself complete your assignments. It also includes working too closely with another student. Collaboration or discussion that results in the same or very similar code indicates that you have not placed enough independent work into your solution and is a violation of the honor code.

Flagrant or repeat violations of the honor code will result in an F in the course, a report to the University Academic Integrity Committee, and a report to the Dean. 

Examples of honor code violations include but are not limited to:
  • Giving your code to another student.
  • Submitting code written by anyone other than yourself as your own.
  • Copying text from the web.
  • Discussing implementation details of a solution with another student.
  • Discussing code-specific details of a solution with another student.

Email, Course Mailing List, and Website

When you email the instructor or the mailing list, be sure to email from an account to which we can directly reply.

Clarifications, changes, etc. regarding the class and assignments will be posted to the class mailing list. Also check the class website frequently.