#Example Markdown - 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.
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)
- 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
- Forking, Part 1: Introduction
- Forking, Part 2: Fork, Exec, Wait
- Process Control, Part 1: Wait macros, using signals
- Memory, Part 1: Heap Memory Introduction
- Memory, Part 2: Implementing a Memory Allocator
- Memory, Part 3: Smashing the Stack Example
- Pthreads, Part 1: Introduction
- Pthreads, Part 2: Usage in Practice
- Synchronization, Part 1: Mutex Locks
- Synchronization, Part 2: Counting Semaphores
- Synchronization, Part 3: Working with Mutexes And Semaphores
- Synchronization, Part 4: The Critical Section Problem
- Synchronization, Part 5: Condition Variables
- 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)
- 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
- 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
- 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
- File System, Part 1: Introduction
- File System, Part 2: Files are inodes (everything else is just data...)
- File System, Part 3: Permissions
- 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