Systems Programming
UB Catalog information for CSE 410
This information is advisory only. The authoritative course description and requirements for a given semester are defined by the course syllabus.
Overview
This course is a special topics preview of the upcoming CSE 220 Systems Programming course. It will cover low-level systems programming in userspace at the userspace/kernel boundary. Students will learn about the C programming language, system calls, memory management, threads, processes, and concurrency.
Offerings
Fall 2018, Spring 2025Current Offering: Fall 2018
Lecture | MWF 09:00-09:50, Norton 214 |
---|---|
Recitation | W 13:00-13:50, Bell 340 |
Office Hours |
M 13:00-15:00 W 11:00-12:00 |
TA Office Hours |
MW 10:00-11:00 (David) TR 14:00-15:00 (Peter) |
Syllabus
Lectures
Lecture | Date |
Introduction (pdf) | 2018-08-27 |
C and POSIX (pdf) | 2018-08-29 |
C and POSIX continued | 2018-08-31 |
C and POSIX continued | 2018-09-05 |
C and POSIX continued | 2018-09-07 |
C and POSIX concluded | 2018-09-10 |
Memory Representation (pdf) | 2018-09-12 |
Memory Representation continued | 2018-09-14 |
Memory Representation continued | 2018-09-17 |
Memory Representation continued | 2018-09-19 |
Process Anatomy (pdf) | 2018-09-21 |
Process Environment (pdf) | 2018-09-24 |
Process Environment continued | 2018-09-26 |
Dynamic Allocator Project (pdf) | 2018-09-28 |
Dynamic Allocator Project continued | 2018-10-01 |
Input and Output (pdf) | 2018-10-03 |
Input and Output | 2018-10-05 |
Pipes and Redirection (pdf) | 2018-10-07 |
Virtual Memory (pdf) | 2018-10-10 |
Virtual Memory continued | 2018-10-12 |
Virtual Memory continued | 2018-10-15 |
Functions and Automatic Variables (pdf) | 2018-10-17 |
Midterm Exam | 2018-10-19 |
Functions and Automatic Variables continued | 2018-10-22 |
The UNIX Shell (pdf) | 2018-10-24 |
Midterm Exam review and discussion | 2018-10-26 |
The UNIX Shell continued | 2018-10-29 |
The UNIX Shell continued | 2018-10-31 |
Approaching a Large Project | 2018-11-02 |
POSIX Signals (pdf) | 2018-11-05 |
POSIX Signals continued | 2018-11-07 |
Concurrency (pdf) | 2018-11-09 |
Races and Synchronization (pdf) | 2018-11-12 |
Races and Synchronization continued | 2018-11-14 |
Races and Synchronization continued | 2018-11-16 |
POSIX Threads and Synchronization (pdf) | 2018-11-19 |
Thanksgiving break | 2018-11-21 |
Thanksgiving break | 2018-11-23 |
POSIX Threads and Synchronization continued | 2018-11-26 |
Memory and Concurrency (pdf) | 2018-11-28 |
Memory and Concurrency continued | 2018-11-30 |
Memory and Concurrency continued | 2018-12-03 |
Effective Systems Programming (pdf) | 2018-12-05 |
Recitations
Recitation | Week |
Introduction to Git (pdf) | 2018-08-29 |
Introduction to Make (pdf) | 2018-09-05 |
Arrays and Pointers (pdf) | 2018-09-12 |
Introduction to gdb (pdf) | 2018-09-19 |
Midterm review session (pdf) | 2018-10-17 |
Assignments
Assignment | Due |
PA0: Pointer Practice — Linked lists | 2018-09-21 23:59:00 |
PA1: Dynamic Allocator | 2018-10-12 23:59:00 (extended) |
Prerequisites
Students are expected to have a solid grasp of simple data structures (such as lists and arrays) and some programming experience. (CSE 250 or equivalent experience.)
Text
The text for this course is Computer Systems: A Programmer’s Perspective, Third Edition, by Randal Bryant and David O’Hallaron.
I recommend the book The C Programming Lanuage, Second Edition, by Brian W. Kernighan and Dennis M. Ritchie. This is not a required text for the course, but it is the sort of text that you will put on your shelf and consult for the rest of your career.
Policies
The ultimate authority for course policies is the course syllabus. However, my general academic integrity policy can be found here and my list of policies is here
Topics
The topics to be covered in this course include:
- The C programming language
- Compiler and linker invocation and their roles in program development
- Version control, build, and other systems
- Representation of in-memory data structures
- Memory management
- Process creation and management
- Threads
- Synchronization primitives and concurrency
- The kernel/userspace boundary and the system call interface
Course Structure
The primary deliverables for this course are weekly labs and several larger projects. Labs will consist of short exercises intended to deepen student understanding of course material (and perhaps cover background material for course projects), and will be evaluated in-lab by teaching assistants. Course projects will be C language implementations of concepts discussed in class. Projects and labs will make up at least 50% of the final course grade, with the remainder being quizzes, and exams.
There are no graded homeworks for this course. Written homework assignments may be given to help students understand the material, and any material covered in homeworks may appear on exams or quizzes, but such assignments will not be directly evaluated.
Programming Assignments
All projects for this course must be implemented in C and compile and run correctly on the course-provided virtual machine image. Students will be expected to use version control and appropriate build tools (such as make) to manage their projects.