Computing That Serves

CS 324

Course Offerings

Section # Semester Instructor Website Description
1 Fall 2018 Quinn Snell
2 Fall 2018 Quinn Snell
1 Winter 2018 Casey Deccio
2 Winter 2018 Casey Deccio
1 Fall 2017 Quinn Snell
2 Fall 2017 Quinn Snell
1 Fall 2006 Eric Mercer
2 Fall 2006 Eric Mercer
1 Fall 2005 Eric Mercer
2 Fall 2005 Eric Mercer

Short Summary: 

Systems Programming




Systems Programming

Systems programming principles and concepts, including Linux systems programming, multiprocessing, concurrency, exceptional control flow, caching, sockets, protocols, and non-blocking I/O.


CS 324 Objectives and Topics


Linux System Programming


  • Students will demonstrate mastery of Linux system programming.
  • Students will be able to use Linux systems calls that are defined in C from within a C++ program to control processes and threads and to use shared memory synchronization, polling, file I/O, and sockets.
  • Students will be comfortable using the Linux command line and development environment to compile programs with Makefiles and for navigation, job control, I/O redirection, utility commands and manual pages.
  • Students will gain experience with advanced C topics (memory management, pointer manipulation, strings, etc.)


Multi-processing, Concurrency, and Exceptional Flow Control


  • Students will demonstrate mastery of multiprocessing, concurrency mechanisms, and exceptional flow control.
  • Students will write concurrent programs that provide efficiency gains from multiprocessing and demonstrate proficiency in threads, processes, mutual exclusion primitives, deadlock avoidance, signal handling and exceptional flow control.
  • Students will understand how the operating system implements processes, threads, concurrency mechanisms, including how the operating system provides scheduling.
  • Students will understand signal handling, exceptional flow control and virtualization.



Virtual Memory


  • Students will demonstrate how virtual memory works and how it can affect program performance


Internet Programming


  • Students will demonstrate a mastery of Internet programming, including using sockets, protocols, and non-blocking I/O.
  • Students use the BSD socket API to implement client-server programs using non-blocking I/O and polling to scalably multiplex large numbers of sockets.
  • Students use effective testing techniques for networked programs, including stress testing, load testing, and fuzz testing.
  • Students understand the role of TCP, IP, HTTP, DNS, and TLS as they relate to Internet services.