teaching

Teaching Assistant (TA)- ECE 252: Systems Programming and Concurrency (Fall 2024), University of Waterloo.


Course Description

This course covers the following topics:

  • 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
  • File systems

Prerequisites:
ECE 250; Level at least 2B in Computer Engineering or Electrical Engineering

This course requires substantial programming skill. The basics of the C language will be reviewed briefly, and should be familiar to anyone who has already used C++.

Antirequisites:
CS 343, CS 350, ECE 254, SE 350

Readings

Main Textbook
  • W. Richard Stevens and Stephen A. Rago: Advanced Programming in the UNIX Environment, 3rd edition, Addison-Wesley, 2013. ISBN: 978-0-321-63773-4.
Optional Reference
  • Michael Kerrisk: The Linux Programming Interface, No Starch Press, 2010. ISBN: 978-1-59327-220-3.

Evaluation

Coursework will include the following components:

  • Assignments (10%)
  • Lab projects (40%)
  • Final exam (50%)
Assignments

There are three equally weighted programming assignments, for a total of 10%. Assignment grading is based on the following scale:

  • 0: Not attempted or does not work at all
  • 1: There are some issues
  • 2: Everything works as expected
Lab Projects

There are five lab projects. The grading policies are specified in the lab manual (available on LEARN).

Course Objectives

Students who successfully complete the lecture component will be able to:

  • Invoke (apply) system calls, from the view of an application programmer, to access resources like files, inter-process communication mechanisms, and the network.
  • Analyze, design, implement, and debug concurrent C programs using concurrency control constructs (such as a mutex or semaphore).
  • Apply standard concurrency scenarios such as producer-consumer, readers-writers, and dining philosophers, as well as deadlock and starvation.

Students who successfully complete the lab component will be able to:

  • Interact with the Linux operating system through the command-line interface and the C language API.
  • Read the documentation of, understand, and interact with available libraries, such as those 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.

Acknowledgment

Lecture materials, assignments, and portions of this course outline were provided by Prof. Jeff Zarnett.