ICS 53/53L - Principles in System Design

2019 Winter 2019 Spring 2019 Fall 2020 Spring 2020 Fall 2021 Spring 2021 Fall 2022 Winter 2023 Winter 2023 Spring 2024 Winter 2024 Spring 2024 Fall 2025 Winter

This course will introduce students to the basic principles of system software: operating systems, compilers, and networking. The following topics are explored through theoretical and practical programming experiences: process and memory management, concurrency and synchronization, network communication, programming for performance, etc.

Course Learning Objectives:

  1. Design and develop system-level and multi-threaded programs in C.
  2. Utilize a command-line interface and describe its role in an operating system.
  3. Summarize components of the operating system stack and how they inter-operate.
  4. Analyze performance and consider the influence of system components on application performance.

Topics covered include:

  • Processes & Threads
  • Signals & I/O
  • POSIX System Calls
  • Client & Server Networking
  • Cache & Virtual Memory

Past Course Projects include:

  • Command-line tools: C code stats, csv/tsv editors, custom word count (wc), custom grep, “tree” file and directory statistics
  • Pointers & Dynamic Memory: MIPS disassembler, Reverse Polish Notation Calculator, Ciphers, keyword highlighters, library catalog search, gitlog/bash statistics
  • Shell with background processes, signal handling, piping & redirection
  • Dynamic Memory Allocator
  • Multi-threaded Servers: Ebay-like Auctions, Chat rooms, Polls, Course Registration, Charity Donations