This course will introduce programming and essential concepts of operating systems, compilers, concurrency, and performance analysis, focused around several cross-cutting examples, such as memory management, error handling and threaded programming.
Topics covered include:
- C programming
- Dynamic Memory Allocation
- System Stack: Interrupts, Exceptions & Signals
- POSIX Abstractions
- Concurrent Programming: Threads, Semaphores, Shared resources
- Memory Hierarchy: Caches and Virtual Memory
Programming Assignments cover the following topics:
- Virtual Machine course environment, basic git usage, and assignment submission
- Command-line tools and redirection
- Introduction to Makefiles
- Basic C programming, with an emphasis on pointers (argv/argc, File I/O, malloc/free, structs)
- C Debugging Tools: gdb, valigrind, preprocessor directives
- Dynamic Memory allocation
- Unit testing concepts and usage (Criterion)
- POSIX functions
- Processes vs Threads
- Semaphores, race conditions, deadlock
Past Projects include:
- String Ciphers
- MIPS disassembler
- Dynamic Memory Allocator - Explicit allocator, Segregated Free List
- Bash-like Shell
- Client/Server Chat
- Concurrent Data Structures: hashmap, queue, arraylist w/ iterator
- Thread-based “Map-Reduce” data processing