Catalog description: System programming with emphasis on processes, memory management, multithreaded programming, synchronization and deadlocks, interprocess communication, parallel and distributed computing, networking, files systems, security, signals, and virtualization containers.
Longer Description: This class is a programming-focused class, exploring how programs interact with the operating system and use system and related services. As far as programming level, you can consider it as sitting between CSC 261 (hardware and assembly language) and CSC 130/230 (higher-level programming without hard connection to the underlying system). The class will use C for programming in a Linux environment, interacting with the system through Linux system calls, the standard C library, and support libraries such as pthreads. The class is heavy on specifics and concrete details, and light on theory/generality which will be covered in a later class (CSC 462 -- Principles of Operating Systems).
For the safety of everyone, this class will be offered as a remote/online class in Spring 2021 due to the ongoing COVID pandemic. All class and individual meetings will use Zoom for videoconferencing – links and more information are available in Canvas. Classes are at the scheduled time, and students are expected to attend at that time. There will be real-time group exercises, using Zoom breakout rooms, which students are required to participate in. A Linux virtual machine image (configured for use with Virtualbox) will be provided to students so that there is a uniform system environment for all students to use. Students must have a computer that is capable of hosting this virtual environment -- any modern system with at least 8GB of RAM should be fine. In addition, class activities will include group work (through Zoom breakout rooms) so students must have camera/audio capabilities for collaboration during class and be able to share their virtual machine screen for group programming exercises. During in-class activities, students will be expected to share their screen with the entire class and explain their solution to an in-class programming activity.