Real-Time Concurrent Systems

Over the winter semester of my third year I took SYSC 3303: Real-Time Concurrent Systems. The course taught elements used in operating system design & implementation along with important concepts within the realm of concurrency. Task communication and synchronization methods were the main focus along with scheduling. A lot of information was covered over the semester, mainly being the communication and synchronization methods such as; Inter-Process Communication over a network with threaded/pre-threaded servers and clients, shared variables, semaphores, mutexes, monitors, condition variables, and message queues. Relating to scheduling we studied several schedulability tests along with different scheduling algorithms such as; priority-based, earliest deadline first, and cyclic executives. The problem of unbounded priority inversion was also discussed along with the solutions of priority inheritance and priority ceiling protocols.

These concepts were exercised mostly in the C programming language, with some practice in Java also. We used a patch to the Linux kernel called Xenomai which added real-time facilities to the operating system. During the semester we had certain small assignments in which we practiced the implementation of above concepts, accompanied by a group term project.

Term Project

The term project was a real-time concurrent (and distributed) pong game, with which I did the first iteration of development by myself. It is simply the pong game written in Java using the MVC architecture. In the later iterations we ported the model code to C while the view and controller portions remained in Java. All components remained separate, sending messages to each other by IPC (sockets).