CS361 - Computer Systems
Name |
Due 11 am on |
Setup, and Analyzing Dynamic Memory Usage |
Tue, Sept 3 |
A High-Performance Malloc |
Tue, Sept 10 |
A Garbage Collector for C |
Tue, Sept 17 |
L337 H4XX0r 5KilLs |
Tue, Sept 24 |
Midterm 1 |
Oct 4, in class |
Roll-your-own Command Line Shell |
Tue, Oct 8 |
Roll-your-own Debugger |
Tue, Oct 22 |
A Basic Web Proxy |
Tue, Oct 29 |
Midterm 2 |
Nov 8, in class |
Concurrent Elevator Controller |
Tue, Nov 12 |
Solving Concurrency Problems with Semaphores |
Tue, Nov 26 |
Concurrent Program Performance |
Fri, Dec 6 |
Final |
Thu Dec 12, 10.30 am-12:30 pm |
Homeworks are due Tuesdays at 11 am.
Lecture Notes and Recordings
Memory Management
Lecture 1 |
Introduction, and a bit about dynamic memory allocation. |
Lecture 2 |
Amazon EC2, Subversion, and starting on malloc. |
Lecture 3 |
hw1, malloc boundary tags and free lists |
Lecture 4 |
hw1 solution, malloc performance enhancements, and start of virtual memory |
Lecture 5 |
virtual memory, several major benefits and a few drawbacks |
Lecture 6 |
mmap by example, intro to garbage collection |
From Source Code to Running Process
Lecture 7 |
preprocessor, compiler, assembler, linker |
Lecture 8 |
.a and .so libraries, position independent code |
Lecture 9 |
dynamic linking with the GOT and PLT |
Lecture 10 |
class expectations, hw3 solution, and hw4 intro |
Lecture 11 |
process abstraction, interrupts, system calls |
Lecture 12 |
signals, and some experiments with the same |
Lecture 13 |
midterm prep, hw5 demo, fork() |
Lecture 14 |
hw5 essentials - fork(), execve(), pipe(), dup2() |
Lecture 15 |
process I/O - low-level and buffered |
Lecture 16 |
understanding file systems and the VFS |
Network Programming
Lecture 17 |
introduction to the Internet |
Lecture 18 |
Internet structure discussion, basic socket programming example |
Lecture 19 |
Start of server programming |
Lecture 20 |
More on nc/telnet, server programming + start of select |
Lecture 21 |
event-driven programming with select() example |
Lecture 22 |
multiple clients with select(), and email |
Lecture 23 |
socket programming with UDP vs TCP |
Concurrency
Lecture 24 |
multiple clients with fork(), and beginning of concurrency |
Lecture 25 |
race conditions |
Lecture 26 |
mutual exclusion |
Lecture 27 |
deadlock, semaphores |
Lecture 28 |
barriers and other synch primitives using semaphores |
Lecture 29 |
reusable barrier, producer consumer, readers-writers start |
Lecture 30 |
midterm 2 discussion |
Lecture 31 |
hw9 discussion, hw8 solution, and finishing readers-writers |
Lecture 32 |
condition variables |
Lecture 33 |
user space implementation of locks using Linux futexes & atomic operations |
Lecture 34 |
user space implementation of locks, part 2 |
Lecture 35 |
user space implementation of locks, code example |
Lecture 36 |
futex wrap-up, beginning of lockless datastructures |
Lecture 37 |
instruction reordering by optimizer and CPU, compiler/memory barriers |
Lecture 38 |
dangers of mutual exclusion, continuation of lockless datastructures |
Topic revision: r6 - 2013-09-10 - 16:35:57 - Main.jakob