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:
- Design and develop system-level and multi-threaded programs in C.
- Utilize a command-line interface and describe its role in an operating system.
- Summarize components of the operating system stack and how they inter-operate.
- 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