Systems Programming
NOTE: Note that the National CTC was funded by an NSF ATE grant. As such, curriculum is intended for use solely by educators of North American secondary and post-secondary institutions. To access the content, visit the CTC's public "Curriculum" legacy drive.
Description: This course maintains a focus on systems programming using Linux, both from the standpoint of learning about how computer system software works and learning/improving students’ programming skills in K&R C and Bash (Bourne-again shell). Students will gain an understanding of the operational issues involved in writing systems programs in Linux through the manipulation, implementation, and synchronization of system processes, system I/O, threads, signals, interprocess communication, and virtual memory. Students are expected to have an intermediate knowledge of Linux and C (or C++).
No textbook
Prerequsite: CSCE 2100 (Computing Foundations)
Module Title | Learning Outcomes | Assignment |
---|---|---|
Module 1: Systems Programming Overview | 1. Identify some major historical advances with regards to Unix, C, and Linux. 2. Identify two major categories of software. 3. Identify the role of the operating system and its three major components. 4. Understand the roles of system calls, the C library, and the C compiler in systems programming. 5. Identify the steps in the compilation process. | Overview Quiz |
Module 2: Linux Overview | 1. Identify the Linux command structure. 2. Identify several resources for help on Linux systems. 3. Identify some of the common commands on Linux systems. 4. Identify the three standard Linux files available on every shell or subshell. 5. Identify the three permission groups and three permission types for files and directories. 6. Understand and manipulate file and directory permissions on a Linux system. 7. Identify several available editors on a Linux system and be able to use at least one of them. 8. Understand and use input and output redirection as well as pipes on a Linux system. | Linux Overview Quiz Lab 01 – Linux Overview |
Module 3: Review of C | 1. Identify some of the many constructs used in C programming that include: • Variable Names • Data Types • Variable Declaration and Initialization • Constants • Arrays • C-Strings • Relational and Logical Operators • The if-else if-else Branching Statement • The for Loop Statement • The while Loop Statement • The do-while Loop Statement • The switch Branching Statement • The printf and scanf Functions • Programmer-Defined Functions • File Input/Output | Review of C Quiz Assignment 01 – ASCII Bits and Bytes |
Module 4: Parsing | 1. Identify how parsing command-line arguments works in C. 2. Implement a C program that parses command-line arguments. 3. Execute a shell command from within a C program. | Parsing Quiz Lab 02 – Parsing Command-Line Arguments Assignment 02 – Parsing Command-Line Arguments |
Module 5: Regular Expressions | 1. Identify what is a regular expression and how it can be used for pattern matching. 2. Identify globbing as a file expansion utility for shells. 3. Identify and be able to use three common programs and utilities that use regular expressions: grep, sed, and awk. | Regular Expressions Quiz Lab 03 – Regular Expressions with sed and gawk |
Module 6: Bash | 1. Identify what is a shell and how it is initialized. 2. Identify some of the many constructs used in shell scripting in bash that include: • Subshells • Environment Variables • Local Variables • User Input • Quoting Mechanisms • Relational, Logical, and File Operators • The if Statement • The case Statement • The for Loop • The while Loop • Shell Functions • Signal Handling | Bash Quiz Lab 04 – Writing Bash Scripts Assignment 03 – Writing Bash Shell Scripts |
Module 7: Processes Part 1 | 1. Identify what is a process and be able to describe the various process states. 2. Identify the importance of the process context, including the components of the process control block (PCB). 3. Identify the steps in a context switch and why it is needed. 4. Identify four metrics used to measure system performance and how they are needed in scheduling algorithms. 5. Identify and be able to describe five different CPU scheduling algorithms. | Processes Part 1 Quiz Assignment 04 – Process Schedulers |
Module 8: Processes Part 2 | 1. Identify and be able to use the family of system calls used for process execution. 2. Identify and be able to use the system call used for process creation. 3. Identify and be able to use two of the system calls used in process synchronization. 4. Identify and be able to use the system call for process termination. 5. Understand the difference between a zombie and orphan process. | Processes Part 2 Quiz Lab 05 – Parent and Child Processes |
Module 9: Threads | 1. Identify the importance and benefits of using threads. 2. Identify and be able to use POSIX threads (pthreads). 3. Identify and be able to use three synchronization primitives that support concurrent threads without unwanted effects. | Threads Quiz Lab 06 – Implementing Mutex Locks Assignment 05 – Threads, Mutexes, and Condition Variables |
Module 10: Interprocess Communication Part 1 | 1. Identify the two types of pipes used as an interprocess communication mechanism. 2. Understand and be able to use pipes for pipelining commands together or redirection. | Interprocess Communication Part 1 Quiz Assignment 06 – Implementing Command-Line Pipes |
Module 11: Interprocess Communication Part 2 | 1. Identify the two domains and three types of sockets. 2. Understand and be able to implement stream and datagram sockets on the Unix and Internet domains. 3. Identify and understand the importance of host and network byte order. 4. Identify the addressing requirements of Internet sockets. 5. Identify and be able to implement a solution to socket issues concerning blocking system calls. | Interprocess Communication Part 2 Quiz Lab 07 – Implementing Sockets Assignment 07 – Using Linux Sockets |
Module 12 Virtual Memory | 1. Understand the motivation for virtual memory. 2. Identify the general steps required to implement demand paging. 3. Identify and be able to calculate effective access time in evaluating performance of demand paging implementations. 4. Identify the importance of page replacement algorithms in reducing the number of page faults. 5. Evaluate the performance of four-page replacement algorithms using reference strings. | Virtual Memory Quiz Assignment 08 – Implementing Page Replacement Algorithms |
Please remember this curriculum is copyrighted material and is intended for public education use only.