Course CSE320
Title System Fundamentals II
Credits 3
Course Coordinator

Erez Zadok


This course introduces C 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. In this course, operating systems concepts are considered from the point of view of the application programmer, and the focus is on APIs for interacting with an operating system. A companion course, CSE 306, considers operating systems from the point of view of the OS kernel implementer.  

Bulletin Link

Prerequisite Prerequisite: C or higher: CSE 220 and CSE major.
Course Outcomes
  • Develop an understanding of the layers of software that lie between an application program, the C language, and the underlying hardware and how they inter-operate.
  • Develop an ability to program with operating system APIs.
  • Develop an ability to write and analyze multi-threaded programs.

Bryant and O'Hallaron, Computer Systems: A Programmer's Perspective, third edition, Pearson, 2016

Major Topics Covered in Course
  • C Programming
  • Memory Hierarchy, Caches, Virtual Memory
  • Operating System Processes and POSIX abstractions
  • Operating System Scheduling and I/O
  • Basic Networking and Socket Programming
  • Multi-threading and Parallel Programming


  • Dynamic Memory *Allocator*
  • Shell Environment Implementation
  • Client/Server Networking Implementation
  • Thread-based Programming
Course Webpage