Dr. Back's Lectures§

L-P1
Course Introduction
D-P1
MiniDemo: System Calls
MP4 (7:53)
L-P1
Processes, Part I
MP4 (34:35)
Ch. 8
D-P2
MiniDemo: Dual-Mode Operation
MP4 (4:25)
L-P2
Processes, Part II
MP4 (22:59)
Ch. 8
L-U1
Lecture on Unicode
L-P3
Processes, Part III
MP4 (27:54)
Ch. 8
D-P4
Demo: Fork (Part 1)
MP4 (13:35)
D-P5
MiniDemo: Using fork in Python's multiprocessing module
MP4 (5:58)
D-P6
Demo: Fork and Wait (Part 2)
MP4 (14:57)
D-P7
Demo: Fork and Exec (Part 3)
MP4 (14:25)
L-P4
Unix File Descriptors
MP4 (21:16)
Ch. 10
L-P5
Unix Pipes
MP4 (7:36)
D-P8
Demo: Low-level IO, read()/write(), buffering, and stdio quirks
MP4 (13:44)
D-P9
MiniDemo: How to end standard input when connected to a terminal
MP4 (6:15)
D-P10
MiniDemo: dup2() for I/O redirection
MP4 (4:02)
D-P11
Demo: Using Unix pipes()
MP4 (21:00)
L-P6
Unix Signals
MP4 (28:59)
Ch. 8.5
D-P12
Demo: Async-signal Safety
MP4 (14:37)
L-P7
Job Control Shells
MP4 (21:09)
Ch. 8.4
D-P13
MiniDemo: How to catch a segmentation fault
MP4 (3:54)
D-P14
Demo: how to use cush and how the tests work
MP4 (18:51)
D-L1
MiniDemo: how the gcc compiler driver works
MP4 (8:10)
L-UB1
Undefined Behavior in C/C++/Rust
L-L1
Linking and Loading, Part 1
MP4 (50:02)
Ch. 7, 7.1-7.9
D-L2
MiniDemo: exploring the virtual address space
MP4 (8:52)
L-L2
Linking and Loading, Part 2
MP4 (37:48)
Ch. 7.6
D-L3
MiniDemo: static inline vs extern inline
MP4 (7:21)
L-L3
Linking and Loading, Part 3
MP4 (24:25)
Ch. 7.6 - 7.14
D-L4
Demo: How to build and use static libraries
MP4 (10:05)
D-L5
Demo: How dynamically linked executables are loaded
MP4 (5:43)
D-L6
Demo: How to build shared objects, role of GOT
MP4 (16:02)
Ch. 7.12
D-L7
Demo: How to use LD_PRELOAD to interpose at runtime
MP4 (8:10)
Ch. 7.13.3
D-L8
Demo: Effect of Bad Practices on symbol resolution
MP4 (6:01)
Ch. 7.6
L-MT1
Introduction to Multithreading
MP4 (41:48)
Ch. 12
L-MT2
Basic Locking
MP4 (36:51)
L-MT3
Semaphores
MP4 (35:27)
L-MT4
Condition Variables
MP4 (41:24)
L-MT5
Deadlocks
MP4 (36:04)
L-MT6
Thread-Local Variables
MP4 (9:04)
L-MT7
Atomicity Violations
MP4 (7:09)
L-MT8
Performance Consideration for Multi-Threaded Programs
MP4 (33:31)
D-MT1
Demo: Debugging Deadlocks with gdb
MP4 (11:44)
D-MT2
Demo: Debugging with watch points
MP4 (13:13)
L-MT9
C11 Atomics
MP4 (47:39)
L-MEM1
Dynamic Memory Management (malloc/free)
MP4 (1:03:19)
L-MEM2
Automatic Memory Management, Intro
MP4 (20:38)
L-MEM3
Automatic Memory Management, Performance
MP4 (44:48)
L-MEM4
Automatic Memory Management MiniLecture: Reference Counting
MP4 (13:01)
L-MEM5
Virtual Memory: Principles and Mechanisms
MP4 (51:18)
D-MEM2
Virtual Memory MiniLecture: Using mmap()
MP4 (11:24)
L-NW1
Introduction to Networking, Part I
MP4 (40:42)
D-NW1
Demo: traceroute
MP4 (8:53)
L-NW2
Introduction to Networking, Part II
MP4 (19:11)
L-NW3
Introduction to Networking, Part III
MP4 (20:23)
L-NW4
TCP/IP and Socket Programming, Part I
MP4 (30:23)
L-NW5
TCP/IP and Socket Programming, Part II
MP4 (23:10)
L-NW6
TCP/IP and Socket Programming, Part III
MP4 (10:33)
D-NW2
UDP Demultiplexing
MP4 (5:39)
D-NW3
TCP Demultiplexing
MP4 (4:16)
L-NW7
HTTP, Part I
MP4 (33:40)
L-NW8
HTTP, Part II
MP4 (30:39)
D-NW4
p4 login.html minidemo
MP4 (2:52)
D-NW5
React demo
MP4 (13:39)
L-NW9
Implementing High-Concurrency Servers
MP4 (42:19)
L-VIRT1
Clouds, VMs, and Containers (Dr. Williams)
L-VIRT2
Virtualization (older slide set by Dr. Back)

Lecture slides will usually be posted before each lecture and may be updated after each lecture.

Note: where provided, the Youtube versions are mixed at an audio level that is too quiet; Use the MP4 versions of each file instead, bumping the audio by 12dB.

The code for the examples shown in the demos can be found here.