Home - lyuanschool/SystemProgramming GitHub Wiki
Welcome to Angrave's crowd-sourced System Programming wiki-book! This wiki is being built by students and faculty from the University of Illinois and is a crowd-source authoring experiment by Lawrence Angrave from CS @ Illinois.
Rather than requiring an existing paper-based book this semester, we will build our own set of resources here.
Exam Practice Questions
Warning these are good practice but not comprehensive. The CS241 final assumes you fully understand and can apply all topics of the course. Questions will focus mostly but not entirely on topics that you have used in the lab and programming assignments.
- Exam Topics
- C Programming: Review Questions
- Multi-threaded Programming: Review Questions
- Synchronization Concepts: Review Questions
- Memory: Review Questions
- Pipe: Review Questions
- Filesystem: Review Questions
- Networking: Review Questions
- Signals: Review Questions (todo)
Week 1 - 2
- C Programming, Part 1: Introduction
- C Programming, Part 2: Text Input And Output
- Informal Glossary of basic terms
- #Piazza: When And How to Ask For Help
- C Programming, Part 3: Common Gotchas
Week 3
- Forking, Part 1: Introduction
- Forking, Part 2: Fork, Exec, Wait
- Process Control, Part 1: Wait macros, using signals
Week 4
- Memory, Part 1: Heap Memory Introduction
- Memory, Part 2: Implementing a Memory Allocator
- Memory, Part 3: Smashing the Stack Example
- Pthreads, Part 1: Introduction
Week 5
- Pthreads, Part 2: Usage in Practice
- Synchronization, Part 1: Mutex Locks
- Synchronization, Part 2: Counting Semaphores
Week 6
- Synchronization, Part 3: Working with Mutexes And Semaphores
- Synchronization, Part 4: The Critical Section Problem
- Synchronization, Part 5: Condition Variables
Week 7
- Synchronization, Part 6: Implementing a barrier
- Synchronization, Part 7: The Reader Writer Problem
- Synchronization, Part 8: Ring Buffer Example
- Synchronization, Part 9: The Reader Writer Problem (part 2)
Week 8
Week 9
- Todo Analysis of Dining Philosophers (for now see the discussion section handout) ** Breaking Circular Wait. Using a global mutex to break hold-and-wait ** Beware of starvation if all philosophers hold their left chopstick and try+release their right chopstick
- Virtual Memory, Part 1: Introduction to Virtual Memory
- Pipes, Part 1: Introduction to pipes
- Pipes, Part 2: Pipe programming secrets
- Files, Part 1: Working with files
Week 10
- POSIX, Part 1: Error handling
- Networking, Part 1: Introduction
- Networking, Part 2: Using getaddrinfo
- Networking, Part 3: Building a simple TCP Client
- Programming Tricks, Part 1
Week 11
- Networking, Part 4: Building a simple TCP Server
- Networking, Part 5: Reusing ports
- Scheduling, Part 1: Scheduling Processes
- Networking, Part 6: Creating a UDP server
- Nonblocking I O, select(), and epoll
Week 12
- File System, Part 1: Introduction
- File System, Part 2: Files are inodes (everything else is just data...)
- File System, Part 3: Permissions
Week 13
- File System, Part 4: Working with directories
- File System, Part 5: Virtual file systems
- File System, Part 6: Memory mapped files and Shared memory
- File System, Part 7: Scalable and Reliable Filesystems
- File System, Part 8: Removing preinstalled malware from an Android device
Week 14
- Signals, Part 2: Pending Signals and Signal Masks
- Signals, Part 3: Raising signals
- Signals, Part 4: Sigaction
- Nonblocking I O, select(), and epoll