Details
- Time & location
-
Lectures: Tu, Th 11:30 - 12:50, E7 4053
Tutorials: M 16:00 - 17:20, E7 4053
Labs: W, Th, F 8:30 - 11:20, E2 3339
Lectures will be in-person and regular attendance is expected. All make-up lecture slots (May 24, Jun 14, Jul 5, and Jul 26; 13:00 - 14:20; E7 4053) will be used unless indicated otherwise by the course instructor. Tutorial sessions are held only if there is a prior announcement by instructors. Lectures and tutorials will be paused during the midterm week.
- Teaching team
-
Lab instructor
Maran Ma
Grad TA
Sheikh Abrar Tahmid
Grad TA
Elly Khodaei
Grad TA
Olha Vakulenko
- 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, and file systems.
- Prereq
-
ECE 250; Level at least 2B 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++.
- Antireq
- 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 (50%)
There are three equally weighted programming assignments, for a total of 10%. Assignment grading is on a 0-1-2 basis: 0 if not attempted or does not work at all, 1 if there are some issues, and 2 if everything works as expected.
There are five lab projects, and the grading policies are specified in the lab manual (available on LEARN).
- Course objectives
-
Students who complete the lecture component of the course successfully 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, dining philosophers, as well as deadlock and starvation.
Students who complete labs successfully 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, files, and network operations.
- Use inter-process communication 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 Jeff Zarnett and Wojciech Golab.