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.
OfferingsSpring 2019, Fall 2019, Spring 2020, Fall 2020, Spring 2021, Fall 2021, Spring 2022, Fall 2022, Spring 2023, Fall 2023
Current Offering: Fall 2020
A: MWF 13:50-14:40, YouTube Live (see Piazza);
B: MWF 16:10-17:00, YouTube Live (see Piazza)
|Lab||A1-A8, B1-B5, B7-B9: WThF Check HUB, Zoom (see Piazza)|
M 10:00-11:00, Zoom
Th 14:00-16:00, Zoom
|TA Office Hours||(See Piazza)|
|Introduction to CSE 220 and C (pdf)||2020-08-31|
|Variables, Strings, and Loops (pdf)||2020-09-02|
|Conditionals and Control Flow (pdf)||2020-09-04|
|Memory and Pointers (pdf)||2020-09-07|
|Programming Practices (pdf)||2020-09-09|
|Programming Practices (continued)||2020-09-11|
|A Tour of Computer Systems (pdf)||2020-09-14|
|Memory Allocation (pdf)||2020-09-16|
|Integers and Integer Representation (pdf)||2020-09-18|
|Integers and Integer Representation continued||2020-09-21|
|Alignment, Padding, and Packing (pdf)||2020-09-23|
|Alignment, Padding, and Packing continued||2020-09-25|
|Floating Point Numbers (pdf)||2020-09-28|
|Floating Point Numbers continued||2020-09-30|
|Bitwise Operations (pdf)||2020-10-02|
|Process Anatomy (pdf)||2020-10-05|
|Process Anatomy continued||2020-10-07|
|Process Layout completed, FP examples||2020-10-09|
|Midterm Review (pdf)||2020-10-12|
|The Compiler and Toolchain (pdf)||2020-10-16|
|Compiler Optimization (pdf)||2020-10-19|
|Compiler Optimization continued||2020-10-21|
|Dynamic Memory Allocation (pdf)||2020-10-26|
|Virtual Memory (pdf)||2020-10-28|
|Virtual Memory continued||2020-10-30|
|Caching and Locality (pdf)||2020-11-02|
|Caching and Locality||2020-11-04|
|Code Review: PA3||2020-11-06|
|Processes, Threads, and Concurrency (pdf)||2020-11-09|
|Races and Synchronization (pdf)||2020-11-13|
|Processes, Threads, and Concurrency continued||2020-11-13|
|Races and Synchronization continued||2020-11-16|
|POSIX Threads and Synchronization (pdf)||2020-11-18|
|POSIX Threads and Synchronization continued||2020-11-20|
|Concurrency Live Coding||2020-11-23|
|The Kernel and User Mode (pdf)||2020-11-30|
|Input and Output (pdf)||2020-12-02|
|Memory and Concurrency (pdf)||2020-12-04|
|Memory and Concurrency continued||2020-12-07|
|Big Concepts (in Systems Programming)||2020-12-09|
|Final Review (pdf)||2020-12-11|
|Lab 01: Introduction to Git (pdf)||2020-08-31|
|Lab 02: Introduction to Make (pdf)||2020-09-06|
|Lab 03: Testing||2020-09-13|
|Lab 04: Introduction to GDB (pdf)||2020-09-20|
|Lab 05: Singly Linked List||2020-09-28|
|Lab 06: Pointer Math||2020-10-05|
|Lab 07: Untabify||2020-10-19|
|Lab 08: Bit Strings||2020-10-26|
|Lab 09: Dynamic Allocation Help||2020-11-02|
|Lab 10: Wordblocks||2020-11-09|
|Implementing Mutexes with Compare-and-Swap||2020-11-30|
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 I recommend that you consider buying a copy to keep for your career.
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
- 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. Work hard, ask questions, and get help when you need it.
This course will be conducted entirely online. There is no requirement for students in this course to appear on campus for any reason. (You may be required by other courses you are taking, however!) Details are provided in the syllabus, with links to course content on the course Piazza instance. You will be added to the Piazza instance by course staff, which may take up to a day after your registration status changes. Please be patient.
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.
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.