ECE 252: Systems Programming and Concurrency

👥 Enrolled Students: 206/190 📈
⭐ TA Rating: ★★★★☆ (4.5/5)

Course Description

View on UWFlow

This course covers processes and threads (pthreads), system calls, concurrency (semaphore, mutex, monitors, and barrier synchronization), user-level memory management, performance and correctness of concurrent systems, deadlock detection and recovery, and file systems.

Prerequisites & Antirequisites

  • Prerequisites: ECE 250; Level at least 2B in Computer or Electrical Engineering.
  • Antirequisites: CS 343, CS 350, ECE 254, SE 350

Resources

  • Course Resources: GitHub
  • Main Textbook: W. Richard Stevens and Stephen A. Rago, Advanced Programming in the UNIX Environment
  • Optional Reference: Michael Kerrisk, The Linux Programming Interface

Evaluation

Component Weight
Assignments 10%
Lab Projects 40%
Final Exam 50%

Course Objectives

Lecture Component — Students will be able to:
  • Invoke system calls to access resources like files, IPC mechanisms, and the network.
  • Analyze, design, implement, and debug concurrent C programs using concurrency control constructs.
  • Apply standard concurrency scenarios such as producer-consumer, readers-writers, and dining philosophers.
Lab Component — Students will be able to:
  • Interact with the Linux OS through the CLI and the C language API.
  • Read documentation and interact with available libraries for multi-threading, file handling, and network operations.
  • Use inter-process communication mechanisms such as shared memory.
  • Identify, analyze, and solve concurrency and synchronization problems.

Lab Instructors

Dr. Mojtaba Aajami, Ph.D. Lab Instructor mojtaba.aajami@uwaterloo.ca
Maran Ma Lab Instructor maran.ma@uwaterloo.ca

Acknowledgment

Lecture materials provided by Prof. Jeff Zarnett.