Computer Science
>
>

CS 110: Principles of Computer Systems

Summer 2021

Stanford University

Requiring familiarity with C/C++ and Unix/Linux, delves into computer systems principles. Students will engage with a blend of C and C++ to interface with system resources and manage complex projects. The course covers a broad range of topics including filesystems, multiprocessing, synchronization, networking, and MapReduce.

Course Page

Overview

No data.

Prerequisites

Formally, the prerequisite for the course is CS 107. Less formally, you need to be familiar with the C and C++ programming languages, Unix/Linux, make, Makefiles, gcc/g++, valgrind, gdb, and have some experience with basic computer architecture (x86 as it’s taught in CS107, or exposure to some other architecture with the confidence and ability to pick up x86 as I reference it). If you have not taken CS 107, please email me at the beginning of the quarter to let me know.

We’ll be coding in a mixture of C and C++ throughout the quarter. We rely on C, because the libraries needed to interface with system resources are written in C. We rely on C++, because the projects become large enough that I prefer to go with a more mature language that supports encapsulation and generic programming better than C does. You should understand pointers, dynamic memory allocation (malloc/realloc/free), and C strings perfectly. You should understand C++ classes, methods, references, templates, and C++'s newand delete operators. There are many C++ features you’re not expected to know, but you should have enough programming maturity to pick those features up and search the web for reference materials as needed.

The CS 107 course websiteis still up and may be a good reference. If you have not taken CS 107 and find yourself struggling, get help as soon as possible! This class moves quickly, and you will not want to fall behind. Email me and I may be able to point you to helpful resources.

Learning objectives

No data.

Textbooks and other notes

Readings are optional this quarter. I will post notes and slides with most lectures as reference material. However, if you would like additional readings to prepare for lecture or to reinforce concepts, I will list associated readings from the following textbooks:

  • Computer Systems: A Programmer’s Perspective by Bryant and O’Hallaron, either the 2nd or 3rd edition. Both CS107 and CS110 teach from a subset of the B&O textbook, the Stanford Bookstore carries a custom reader with just the chapters we need. Additionally, the Stanford library should have scans of this book available online in a week or two, although these are not yet available at time of writing.
  • Principles of Computer System Design: An Introduction by Jerome H. Saltzer and M. Frans Kaashoek. The textbook should be available through the Stanford library reserves or Science Direct, and because it’s free, I assume most of you would just prefer to go with the free online version. Again, you’re welcome to purchase a hardcopy if you’d like. It’s available for purchase on Amazon.

Other courses in Computer Systems

CS 110: Principles of Computer Systems

Winter 2022

Stanford University

CSE 351 The HW/SW Interface

Autumn 2022

University of Washington

CS 107e Computer Systems from the Ground Up

Winter 2023

Stanford University

CS 107A: Problem-solving Lab for CS 107

Autumn 2022

Stanford University

ELE/COS 475 Computer Architecture

Fall 2019

Princeton University

Courseware availability

Lecture slides and notes available at Lectures

No videos available

Assignments available at Assignements

Labs and solutions available at Labs

Handouts and Resources available at Handouts and Resources

Covered concepts