skip to main content

CS 241 - System Programming

Fall 2020

System ProgrammingCS241ADA59531OD01700 - 1820 W    
System ProgrammingCS241ADB51471OD01830 - 1950 W    
System ProgrammingCS241ADC51472OD00930 - 1050 R    
System ProgrammingCS241ADD51473OD01100 - 1220 R    
System ProgrammingCS241ADE51474OD01230 - 1350 R    
System ProgrammingCS241ADF51475OD01400 - 1520 R    
System ProgrammingCS241ADH66270OD01530 - 1650 R    
System ProgrammingCS241ADJ66271OD01700 - 1820 R    
System ProgrammingCS241ADK66272OD01830 - 1950 R    
System ProgrammingCS241ADL66273OD00930 - 1050 F    
System ProgrammingCS241ADM51476OD01100 - 1220 F    
System ProgrammingCS241ADN46648OD01230 - 1350 F    
System ProgrammingCS241AL266268OLC4 - F    Lawrence Angrave

Official Description

Basics of system programming, including POSIX processes, process control, inter-process communication, synchronization, signals, simple memory management, file I/O and directories, shell programming, socket network programming, RPC programming in distributed systems, basic security mechanisms, and standard tools for systems programming such as debugging tools. Course Information: Credit is not given for both CS 241 and ECE 391. Prerequisite: CS 225 and CS 233. Class Schedule Information: Students must register for one lecture and one discussion section.


The CS241 textbook is comprised of opensource and free course notes, available here as a a single pdf and on the course website in html format.

Learning Goals

Interact with a POSIX operating system in C via system calls to create system applications (2), (6)
Implement and evaluate a dynamic memory allocator (2), (6)
Analyze and implement a virtual memory subsystem (2), (6)
Create system applications that manipulate processes and threads (1), (2), (6)
Evaluate how OS schedules processes and threads (6)
Communicate and synchronize between threads and processes to create robust system applications (1), (2), (6)
Use synchronization to identify and fix potential deadlock and race conditions in concurrent programs (2), (6)
Manipulate filesystem structures (inodes etc.) (2), (6)
Design and create client and server programs to communicate across networks (1), (2), (6)
Understands and uses system security mechanisms to build secure programs (1), (2), (6)
Can analyze how a specific security error (e.g. buffer overflow, file access control, page access control) impacts the Confidentiality, Integrity and/or Availability of data or service. (1)
Can identify multiple development practices (e.g. design reviews, code reviews, testing) as important practices to build secure programs. (6)
Can briefly describe well-known security case studies (e.g. network protocol implementation errors, CPU side channel attacks) and how they comprise the Confidentiality, Integrity and/or Availability of data or service. (6)

Topic List

Basic internal structure and purpose of operating systems
Input-output, file, and directory structures
Memory allocation and deallocation
Virtual memory
Interaction with the operating system kernel via system calls
Multi-process programming and inter-process communication
Multi-thread programming and inter-thread communication
Synchronization primitives including semaphores and mutexes
Deadlock causes and avoidance
Multi-core scheduling algorithms
Network programming with TCP/IP
Security elementary principles and practices (programming practices, protocols and well-known case studies)

Assessment and Revisions

Revisions in last 6 years Approximately when revision was done Reason for revision Data or documentation available?
Standardized class content and teaching material (slides) Fall 2008 - present Students were frustrated by content that changed from semster to semster. informal discussions
Standardized class content and teaching material (programming assignments) Fall 2008 - present Students were frustrated by new programming assignments that were not well-vetted. informal discussions
Adpted programming assignments to reflect real-world problems (including memory management, map-reduce, web servers) Fall 2008 - present Students wanted to understand how systems programming is tied to the real world.
Introduced the use of undergraduate lab assistants to help on programming assignments Spring 2011 Students needed more help during the work on their projects. informal discussions
Introduced mini programming assignments into discussion sections to help prepapre students for programming assignments Fall 2011 - present Students needed more help on how to start their projects. informal discussions
Moved lectures on memory to the beginning of the semester Spring 2012 The sudents needed a better understanding of memory for their programming projects. informal discussions
Introduced a programming contest for one of the projects Fall 2010 Get the students excited. informal discussions
Introduced an extra independent study project for interested students Fall 2010 Allow students to get involved in more complex projects or with on-going research projects. informal discussions

Required, Elective, or Selected Elective


Last updated

5/10/2019by Lawrence Angrave