Welcome to the homepage for COS 316, Principles of Computer System Design, Fall 2019.

Description. This course teaches students the design, implementation, and evaluation of computer systems, including operating systems, networking, and distributed systems.The course will teach students to evaluate the performance and study the design choices of existing systems. Students will also learn general systems concepts that support design goals of modularity, performance, and security. Students will apply materials learned in lectures and readings to design, build and evaluate new systems components.

Textbook. There is no required textbook in this course, because there is no one book that covers the right material in an up-to-date fashion. Some required articles/papers/blogs/etc. will be posted on-line. We also suggest the following textbook:

Principles of Computer System Design by M. Frans Kaashoek, Jerome H. Saltzer. Morgan Kaufmann. May 2009

An online version of the textbook is available at Association of Computing Machinery (ACM), which is available to all student members. Membership ($19) in ACM also provides access to a wide variety of other resources, such as textbooks and videos on the Go programming language and the Git distributed version control system.

Grading. Assignments - 50%; Final Project - 10%; Two Exams - 30%; Potential Problem Sets - 10%


Below you will find our contact information, but please consider posting your question on Piazza before contacting an individual staff member.

Prof. Amit Levy
Office Hours:
We 2:30-4:30
CS 307

Dr. Alan Kaplan
Office Hours:
Tu 1:00-3:00
221 Nassau St

Danny Chen
Office Hours:
Th 2:00-4:00
Friend 010

Ashwini Raina
Office Hours:
We 4:00-5:00
Th 4:20-5:20
Friend 010

Mary Hogan
Office Hours:
Mo 3:00-5:00
Friend 010

David Hao Liu
Office Hours:
Tu 4:00-6:00
Friend 010

Will Sweeny
Course Assistant


Lectures meet on Monday and Wednesday 1:30-2:20pm in CS 104. There are two in-class written exams: Wednesday October 23 and Wednesday December 11.

9/11 Introduction to Networking Slides The Rise of Worse is Better", Section 2
Worse is Better is Worse
9/16 Intro. to Distributed Systems Slides Chord: A Scalable Peer-to-Peer Lookup Protocol
for Internet Applications
9/18 Introduction to Security Posted Here Soon
9/23 Introduction to Operating Systems Posted Here Soon
9/25 Introduction to Naming Posted Here Soon
9/30 File Systems Pt. 1 Posted Here Soon
10/2 File Systems Pt. 2 Posted Here Soon
10/7 Naming in Networking (Prof. Rexford) Posted Here Soon
10/9 Introduction to Caching Posted Here Soon
10/14 CPU Memory Hierarchy Pt. 1 Posted Here Soon
10/16 CPU Memory Hierarchy Pt. 2 Posted Here Soon
10/21 DNS caching (Prof. Freedman) Posted Here Soon
10/23 Written Exam
11/4 Introduction to Resource Management Posted Here Soon
11/6 Network Layers (Prof. Rexford) Posted Here Soon
11/11 Wireless Networking (Prof. Jamieson) Posted Here Soon
11/13 SDNs (Prof. Freedman) Posted Here Soon
11/18 Introduction to Virtualization Posted Here Soon
11/20 Consistency Models (Prof. Lloyd) Posted Here Soon
11/25 Processes, VMs, TCP streams, Transactions Posted Here Soon
12/2 Introduction to Access Control Posted Here Soon
12/4 Discretionary Access Control & ACLs Posted Here Soon
12/9 Mandatory Access Control & IFC Posted Here Soon
12/11 Written Exam


9/12 Let's Get Go-ing Slides
9/19 Socket Programming Slides
Beej's Guide
9/26 What is HTTP? Posted Here Soon
10/3 Performance Testing/Tuning Posted Here Soon
10/10 LRU Eviction Posted Here Soon
10/17 FUSE Posted Here Soon
10/24 TBD Posted Here Soon
11/7 Reflection in Go Posted Here Soon
11/14 Using SQL in Go Posted Here Soon
11/14 Go Concurrency Primitives Posted Here Soon
12/5 TBD Posted Here Soon
12/12 TBD Posted Here Soon


Assignments will be published, submitted and testing using GitHub. You will need to create a GitHub account using your Princeton email address.

All assignments must be done in groups of two partners.

There is a final project, which is due on Dean's Date January 14, 2020.

Late assignment penalties will be waived only in the case of unforeseeable circumstances like medical emergencies, as documented by your Dean or Director of Studies and our approval.

9/12 Assignment 0:
Configure Virtual Environment
9/24 @ 23:00 Assignment 1:
Socket Programming

Collaboration Policy

This course permits many forms of collaboration, including help from course staff, classmates, and lab TAs. Googling is allowed, even encouraged, in this course. You may use any online resource as long as you cite the source (e.g., including the URL of source in the code). Here is a summary, where ✔ means YES and ❌ means NO. If you have any questions, please contact the course staff.

activity your group course staff COS 316 grads classmates other
discuss concepts with ...
acknowledge collaboration with ...
expose solutions to ...
view solutions from ...
plagiarize code from ...

Your solutions. The term solutions refers to any of the products created when completing an, such as source code (including comments) and documentation. It includes both finished and unfinished products, regardless of correctness or completeness.

Working Groups. All assignments require you to work in groups. Here are the rules regarding group work.

Why Work in Groups? There are several reasons for our decision to make you work in groups.

Plagiarism. As members of the University community, students are bound by the rules and procedures described in Rights, Rules, Responsibilities.

All the rules above continue to apply after assignments are graded and after the end of the semester.


This schedule may change. We will update this calendar with the latest information when we need to make scheduling changes. Though last-minute changes are rare, we encourage you to check this calendar again before going to office hours.

Calendar events are loading...