Systems Programming

This information is advisory only. The authoritative course description and requirements for a given semester are defined in the course syllabus.

Overview

This course is a required course in the 2018 and later curriculum. It covers low-level systems programming in userspace at the userspace/kernel boundary. Students will learn about the C programming language, system calls, memory management, threads, and concurrency.

You can find advice for succeeding in CSE 220 here. This is likely to be one of the more difficult courses you take in your career at UB, both due to the content of the course and to the position it has in the curriculum. We understand this, and are here to support your learning. Work hard, ask questions, and get help when you need it.

Offerings

Spring 2025 Fall 2024

This Offering: Fall 2024

Lecture
A (17605):MWF13:00–13:50,(Ethan Blanton)
B (17607):MWF08:00–08:50,(Carl Alphonce)
C (21541):MWF09:00–09:50,(Carl Alphonce)
D (23590):MWF15:00–15:50,(Eric Mikida)
LabCheck HUB
Office Hours
M 10:15–11:45, Davis 343(Carl Alphonce)
Tu 09:15–10:45, Davis 343(Carl Alphonce)
Tu 15:30–16:50, Capen 208(Eric Mikida)
W 11:00–12:50, Capen 208(Eric Mikida)
W 15:00–15:50, Davis 334(Ethan Blanton)
SA Office Hours(See Piazza)

Syllabus

The course syllabus is here.

Lectures

LectureDate
Introduction to CSE 220 and C (pdf)2024-08-26
Variables, Strings, and Loops (pdf)2024-08-28
Conditionals and Control Flow (pdf)2024-09-06
A Tour of Computer Systems (pdf)2024-09-11
Memory and Pointers (pdf)2024-09-16
Structures and Allocation (pdf)2024-09-20
Alignment, Padding, and Packing (pdf)2024-09-27
Process Anatomy (pdf)2024-10-02
Integers and Integer Representation (pdf)2024-10-16
Bitwise Operations (pdf)2024-10-23
Dynamic Memory Allocation (pdf)2024-10-25
Virtual Memory (pdf)2024-10-30
Processes, Threads, and Concurrency (pdf)2024-11-04
Races and Synchronization (pdf)2024-11-08
POSIX Threads and Synchronization (pdf)2024-11-13
The Kernel and User Mode (pdf)2024-11-20
Input and Output (pdf)2024-11-22
Caching and Locality (pdf)2024-12-02

Prerequisites

Students are expected to have a solid grasp of simple data structures (such as lists and arrays) and some programming experience. (CSE 116 or equivalent experience.)

Text

There are three required texts for this course:

Students will also be required to use TopHat for lecture interaction, which will be used for direct evaluation in the form of lecture quizzes, as well as attendance tracking.

There is one optional text for this course:

The listed textbooks are truly excellent, and we recommend that you consider buying a copy to keep for your career.

Unfortunately CS:APP is quite expensive (more expensive than we would expect, given the number of copies that must be sold per year!). We have made it optional for this reason. The least expensive legitimate method we are aware of for purchasing this book is RedShelf. There is a Second International Edition PDF floating around the Internet that students often pirate; be warned that it has many errors and is different from the required Third Edition text. If you are purchasing a used textbook online, try to make sure you are getting the US Edition, as the International Edition has more errors.

Policies

The ultimate authority for course policies is the course syllabus.

This course additionally adopts Ethan’s general academic integrity policy.

Topics

The topics covered in this course include:

Course Structure

This course will be conducted in-person. Students are expected to attend lectures and labs unless they have a University-approved reason to miss. Attendance will be taken. Students must not attend if they have reason to believe that they may have a communicable infection or illness, with or without noticeable symptoms.

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. Course projects will be C language implementations of concepts discussed in class. Projects and labs will make up about half of the final course grade, with the remainder being quizzes and exams.

There is one midterm and one (cumulative) final for this course. These written exams cover theoretical and fundamental materials beyond the specific implementation details required for the programming assignments and labs. There will be a small number of practical lab exams, for which students are expected to solve a lab-size programming exercise in lab in a proctored exam environment. In-lecture activities and short quizzes will cover lecture content, lab procedures, course policies, and other important material.

There are no other graded homeworks for this course.

Programming Assignments

All projects for this course must be implemented in C and compile and run correctly on the course-provided time-sharing system. Students will be expected to use version control and appropriate build tools (such as make) to manage their projects.