Systems Programming

UB Catalog information for CSE 220

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


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.


Spring 2019, Fall 2019, Spring 2020, Fall 2020, Spring 2021, Fall 2021, Spring 2022, Fall 2022, Spring 2023, Fall 2023

Current Offering: Spring 2023

Lecture A:    MWF 09:00-09:50, NSC 215 (Ethan Blanton);
B:    MWF 16:00-16:50, Davis 101 (Carl Alphonce)
Lab A1-A5, B1-B5:    Check HUB
Office Hours Mo 16:00-16:50, Davis 334 (Ethan Blanton)
Tu 10:00-11:00, Davis 343 (Carl Alphonce)
We 13:00-13:50, Davis 334 (Ethan Blanton)
We 14:00-15:30, Davis 343 (Carl Alphonce)
TA Office Hours (See Piazza)


The course syllabus is here.


Introduction to CSE 220 and C (pdf) 2023-01-30
Variables, Strings, and Loops (pdf) 2023-02-01
Conditionals and Control Flow (pdf) 2023-02-03
Memory and Pointers (pdf) 2023-02-08
A Tour of Computer Systems (pdf) 2023-02-13
Integers and Integer Representation (pdf) 2023-02-17
Memory Allocation (pdf) 2023-02-22
Alignment, Padding, and Packing (pdf) 2023-02-24
Bitwise Operations (pdf) 2023-03-03
Process Anatomy (pdf) 2023-03-06
Midterm Review (pdf) 2023-03-12
Programming Practices (pdf) 2023-03-17
The Compiler and Toolchain (pdf) 2023-03-27
Virtual Memory (pdf) 2023-03-29
Dynamic Memory Allocation (pdf) 2023-04-03
Caching and Locality (pdf) 2023-04-05
The Kernel and User Mode (pdf) 2023-04-10
Processes, Threads, and Concurrency (pdf) 2023-04-14
Races and Synchronization (pdf) 2023-04-19
POSIX Threads and Synchronization (pdf) 2023-04-24
Input and Output (pdf) 2023-05-01
Compiler Optimization (pdf) 2023-05-05


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.)


There are two texts for this course:

  • Computer Systems: A Programmer’s Perspective, Third Edition, by Randal Bryant and David O’Hallaron.

  • The C Programming Lanuage, Second Edition, by Brian W. Kernighan and Dennis M. Ritchie.

Both of these books 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!). The least expensive legitimate method we am 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.


The ultimate authority for course policies is the course syllabus.

This course additionally adopts Ethan’s general academic integrity policy, which can be found here. His complete list of policies is here.


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
  • The kernel/userspace boundary and the system call interface
  • Threads
  • Synchronization primitives 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.

Course Structure

This course will be conducted in-person, pending contradictory guidance from SUNY or the University at Buffalo. Students are expected to attend lectures and labs unless they have a University-approved reason to miss. Students must not attend if they are unwell or have reason to believe that they may have contracted COVID-19 or another communicable infection, 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. A variety of short quizzes will cover lecture content, lab procedures, course policies, and other important material.

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 time-sharing system. Students will be expected to use version control and appropriate build tools (such as make) to manage their projects.

Ethan Blanton
Assistant Professor of Teaching

Ethan Blanton is an Assistant Professor of Teaching in the Department of Computer Science and Engineering at the University of Buffalo.