ECE 252: Systems Programming and Concurrency
👥 Enrolled Students: 206/190 📈
⭐ TA Rating: ★★★★☆ (4.5/5)
Course Description
View on UWFlowThis 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.
- 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 |