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%

Staff

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

Prof. Amit Levy
Instructor

Dr. Alan Kaplan
Co-Instructor

Danny Chen
Preceptor

Ashwini Raina
Preceptor

Mary Hogan
Preceptor

David Hao Liu
Preceptor

Will Sweeny
Undergraduate
Course Assistant

Lectures

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.

DATE TOPIC SLIDES BACKGROUND
READING
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 Slides
9/23 Introduction to Operating Systems Slides Rethink the Sync
9/25 Introduction to Naming Slides
9/30 File Systems Pt. 1 Slides Notes Case Study: UNIX file system layering and naming
10/2 File Systems Pt. 2 Slides Git Internals - Plumbing and Porcelain
10/7 Naming in Networking (Prof. Rexford) Slides (pptx)
10/9 Introduction to Caching Slides
10/14 CPU Cache Slides
10/16 Linux Page Cache Slides
10/21 Caching: NFS and the Web (Prof. Freedman) Slides
10/23 Written Exam Review Slides
FALL BREAK
11/4 Introduction to Resource Management Slides
11/6 Network Layers (Prof. Rexford) Slides
11/11 Wireless Networking (Prof. Jamieson) Slides
11/13 Congestion Control (Prof. Freedman) Slides
11/18 Introduction to Virtualization Slides
11/20 Consistency Models (Prof. Lloyd) Slides
11/25 Virtual Machines Slides
THANKSGIVING
12/2 Introduction to Access Control Slides
12/4 ACLs & Capabilities Slides
12/9 Mandatory Access Control & IFC Slides
12/11 Written Exam

Precepts

DATE TOPIC MATERIALS
9/12 Let's Get Go-ing
9/19 Socket Programming Beej's Guide
9/26 What is HTTP? HTTP: The Definitive Guide
10/3 Performance Testing/Tuning
10/10 Cache Eviction
10/17 SQL
SQLite
DB Browser for SQLite
Go driver: sqlite3i
10/24 Reflection The Laws of Reflection
FALL BREAK
11/7 Reflection - Part 2
Exam Review
11/14 Concurrency Go in Action: Concurrency
11/21 Concurrency - Part 2
THANKSGIVING
12/5 Final Project and Exam Review
12/12 NO PRECEPT Addtional Office Hours

Programming Assignments and Problem Sets

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

All problem sets (PSETS) must be done individually.

All programming assignments must be done in groups of two partners.

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

Regrades: If you feel we have made a mistake while grading your work, email your preceptor with a short note describing the potential mistake. You must do this within two weeks of the work being returned.

Late days: You may use up to seven (7) late days for programming assignments. The late days are assigned retroactively to give you the best possible overall grade on your programming assignments. Programming assignments are in general due at 11:00pm. Your score for one programming assignment is the commit with the highest graded score and valid submission time. You do not need to declare the use of late days for each individual assignment. At the end of the semester, we will find the best allocation of late days across all your programming assignments, such that all your submissions sums to the highest score.

You may not use late days for problem sets and the Dean's Date project

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.

DATE DUE TOPIC MATERIALS
9/12 Assignment 0:
Configure Virtual Environment
9/24 @ 23:00 Assignment 1:
Socket Programming
Group
Instructions
10/3 @ 23:00 Problem Set 1 - Systems
Individual
10/8 @ 23:00 Assignment 2:
HTTP Routing Framework
Group
10/15 @ 23:00 Problem Set 2 - Naming
Individual
10/22 @ 23:00 Assignment 3:
In-Memory Cache
Group
11/19 @ 23:00 Assignment 4:
Object Relational Mapper (ORM)
Group
11/26 @ 23:00 Problem Set 3 - Resource Management
Individual
12/3 @ 23:00 Assignment 5:
Database Connection Pool
Group
12/13 @ 23:00 Assignment 6:
Access Control Lists
Group
1/14 @ 17:00 Final Project:
System Analysis
Group

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. Note the summer refers to Groups - when you are working on an individual assignment, your group consists of one - yourself.

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

Calendar

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