#Example Markdown - angrave/SystemProgramming GitHub Wiki
Welcome to Angrave's crowd-sourced System Programming wiki-book! This wiki was actively built and maintained 2014-2018 by students and faculty from the University of Illinois. It was a crowd-source authoring experiment by Lawrence Angrave from CS @ Illinois and represents Angrave's CS241 (now CS341) "Intro to System Programming" course content from that time. This wiki will always be available to everyone to learn more about system programming. Please let me know (angrave @ illinois) if you find it helpful!
University of Illinois students should use the CS341-specific coursebook -
http://cs341.cs.illinois.edu/coursebook/index.html
- Informal Glossary
- Programming Tricks, Part 1
- System Programming Short Stories and Songs
- Systems Programming Bugs in Industry
- C Programming, Part 1: Introduction
- C Programming, Part 2: Text Input And Output
- C Programming, Part 3: Common Gotchas
- C Programming, Part 4: Strings and Structs
- C Programming, Part 5: Debugging
- C Programming, Review Questions
- Kernel, Shells, Terminals Oh My!
- Processes, Part 1: Introduction
- Forking, Part 1: Introduction
- Forking, Part 2: Fork, Exec, Wait
- Process Control, Part 1: Wait macros, using signals
- Processes Review Questions
- Memory, Part 1: Heap Memory Introduction
- Memory, Part 2: Implementing a Memory Allocator
- Memory, Part 3: Smashing the Stack Example
- Memory Review Questions
- Pthreads, Part 1: Introduction
- Pthreads, Part 2: Usage in Practice
- Pthreads, Part 3: Parallel Problems (Bonus)
- Pthread Review Questions
- 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: Synchronization Across Processes
- Synchronization Review Questions
- Deadlock, Part 1: Resource Allocation Graph
- Deadlock, Part 2: Deadlock Conditions
- Deadlock, Part 3: Dining Philosophers
- Deadlock Review Questions
- 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
- Scheduling, Part 1: Scheduling Processes
- Scheduling, Part 2: Scheduling Processes: Algorithms
- IPC Review Questions
- POSIX, Part 1: Error handling
- Networking, Part 1: Introduction
- Networking, Part 2: Using getaddrinfo
- Networking, Part 3: Building a simple TCP Client
- Networking, Part 4: Building a simple TCP Server
- Networking, Part 5: Shutting down ports, reusing ports and other tricks
- Networking, Part 6: Creating a UDP server
- Networking, Part 7: Nonblocking I O, select(), and epoll
- Networking, Part 8: Protocols (TCP Handshaking, HTTP latency, Heart Bleed)
- RPC, Part 1: Introduction to Remote Procedure Calls
- Networking Review Questions
- File System, Part 1: Introduction
- File System, Part 2: Files are inodes
- 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
- File System, Part 9: Disk blocks example
- File Systems Review Questions
- Process Control, Part 1: Wait macros, using signals
- Signals, Part 2: Pending Signals and Signal Masks
- Signals, Part 3: Raising signals
- Signals, Part 4: Sigaction
- Signals Review Questions
Warning these are good practice but not comprehensive.