Updated on 15 Sep 2014 permalink
On May 5th I started taking the Real-time Programming course offered at the University of Waterloo. It’s a course that’s been offered on many different hardware variations (Intel 486 and ARMv4), and covers many different aspects of real-time systems. The course has a number of cumulative assignments, where students are tasked with building a micro-kernel and a pseudo operating-system to run trains around a track.
What is ‘real-time’?
Wikipedia categorizes real-time programs by the usefulness of an answer after the deadline to compute it:
- Hard: not having an answer by a deadline is deemed system failure
- Soft: not having an answer degrades the quality of the service
An example of a hard real-time system would be a cardiac pacemaker which must compute the time at which to deliver electric shocks to the heart, or if it should be delivering a shock at all. In contrast, soft real-time would be something like audio or video decoding. This analogy encapsulates the idea of the hard/soft real-time distinction being context dependent.
Rumors about the course
In the Real-Time Programming course you get to play with trains all day. In all seriousness, Real-Time is considered the hardest computer science course at the University, with Graphics and Compilers coming in second and third respectively. Students are typically heard disucussing the amount of time they spend in the lab, during the very short amount of time they spend outside of the lab. Students have a tendency to spend all of their time in the lab working on the course work - it becomes as time consuming as a full time job.
The assignments start off easy enough. The first forcing students to get to know both the hardware being used in the course and each other. It’s a semi-social event so that students get to know potential group partners for later assignments. Once the groups are chosen, and the second assignment starts, the more interesting parts of the course begin.
While taking real-time you write a micro-kernel, various applications that implement a clock, serial IO (using UART), and maybe even a micro-shell. This is the first two thirds (2/3) of the course. The last third of the course is spent measuring the acceleration and speed profiles of the trains, and implementing software to move and route the trains around in the track without running into each other. And should you have any extra time, you get to implement a project of your choosing - as long as it runs on top of the trains application you’ve written.
If there are only two things to say about the course, they are:
- It is a wonderful learning experience.
- All Aboard The Crazy Train!
And good luck to anyone else that’s planning on taking the course.
- Discord Webrtc Logging
- Public Key Change
- A Journal Of History
- Collapsing Contexts
- Cryptography And Backdoors
- Online Personas
- Life On The Internet
- Real Time
- Erlang And Reltool
- Memoization And Meemo
- UW Course Search
- OS 161 Retrospective
- Totp Authentication
- This Site