Computer Science
>
>

CSE 333 Systems Programming

Summer 2022

University of Washington

This course provides an understanding of systems in computing, focusing on operating systems, networking, and C/C++ languages. Students learn about low-level data representation, memory management, system interactions, and efficient programming workflows. It delves into C++ idioms, network protocols, and concurrency. Prior knowledge of C programming and Linux tools is required.

Course Page

Overview

Systems Programming is the exploration of the composition and interface of systems in computing looking through the lens of operating systems, networking, and C/C++ languages. Through peeling levels of abstraction, students will view practices of low-level data representation (e.g. C, C++); explicit memory management; interacting with operating-system services; and cache-aware programming.

Prerequisites

  • CSE351 (The Hardware/Software Interface): CSE 351 provides students with rudimentary knowledge of C programming; the ability to write, run, and debug programs; familiarity with Linux and the use of Linux compilation, editing, and debugging tools; a solid mental model of the relationship between high-level code (C) and assembly-level compiled code.
  • CSE 143 (Intro Programming II): CSE 143 is not a direct prerequisite (CSE 351 prerequisite), but some of its topics are beneficial to review for CSE 333. This includes classes, inheritance, good style practices, and simple data structures such as linked lists, trees, hash tables, and queues. Further knowledge of Java and these data structures is not required, but could be helpful!

Learning objectives

Course Learning objectives are the goals that are set out for you to accomplish in this course:

  • Understand system theory of how a system interacts with its environment and controlling its input and output (feedback loops, input and output, deterioration, computation)
  • Unravel layers of abstraction found within systems
  • Describe multiple systems throughout the computing space (e.g. HTTP, Operating Systems, Threading, and Makefiles)
  • Interpret and build an efficient workflow for programming in larger sized code bases
  • Debug substantial C/C++ programs using debugging tools (GDB and Valgrind)

Textbooks and other notes

Textbooks

There are no strictly required texts for this course. Most people will find it useful to have both a C and a C++ reference; suggestions are given below. The C++ Primer is strongly recommended as C++ is a big, complex language and it is hard to understand how it all fits together from just Google and Stack Overflow snippets and folklore.

Strongly Recommended:

C++ Primer (5th Edition), Lippman, Lajoie & Moo. ISBN 0-321-71411-3.

Suggested:

Proposed Topic List

  • C Programming and idioms (Memory Management, cstdio, error handling, and structs)
  • System Management Tools (Makefiles, Header Guards, GDB, and Valgrind)
  • System Interfacing with Operating Systems (POSIX)
  • C++ Programming and idioms (namespaces, templates, STL, smart pointers)
  • C++ Classes and Inheritance (Classes, operator overloading, OOP)
  • Network Programming and Protocols (POSIX, HTTP)
  • Concurrency (pthreads)

Other courses in Operating Systems

CS240 Advanced Topics in Operating Systems

Winter 2023

Stanford University

CS 140: Operating Systems

Spring 2020

Stanford University

CS 111 Operating Systems Principles

Autumn 2022

Stanford University

CS 140E: embedded operating systems

Winter 2023

Stanford University

Courseware availability

Lecture slides available at Schedule

No videos available

Homework available at Schedule

C/C++, Debug, Git, Linux resources available

Covered concepts