CSE320 - System Fundamentals II

2017 Fall 2017 Spring 2016 Fall 2016 Spring 2015 Fall

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