This article by veteran real-time trainer David Kalinsky provides an introduction to real-time operating system (RTOS) kernel services. The paper is of particular interest to developers new to real-time concepts and vocabulary. Kalinsky begins by offering a comparison of RTOSs and general-purpose operating systems. He then covers real-time kernel services including task scheduling; fixed-time task switching; intertask communication and synchronization; determinism and high-speed message passing; and, dynamic memory allocation.
Good article, didn’t think there was all that much involved in real time OS’s
It doesn’t talk about the “interesting” problems such as: what do you do if you have a low priority task which locks a ressource that a higher priority task want..
It’s main purpose is advertising for their lecture series.
It’s main purpose is to advertise for their lecture series.
Anyway, the low-priority blocking high-priority problem can be solved using priority inheritance protocol, priority ceiling or the stack resource policy. You may check out the papers by Lui Sha or T.P. Baker.
Lacking on the juicy stuff, but gives a good run down on what makes one OS real-time and another not. Of course, some parts of an OS can be real-time and some parts not (AmigaOS scheduling/messaging vs AmigaOS memory management as an example – up to v3.9 anyway). And embedded systems aren’t all real-time. But still a good overview.
It doesn’t talk about the “interesting” problems such as: what do you do if you have a low priority task which locks a ressource that a higher priority task want..
That is the priority inversion problem. An interesting read about a real world situation of this is the PathFinder problem explained in
http://research.microsoft.com/~mbj/Mars_Pathfinder/Mars_Pathfinder….
and in more detail here:
http://research.microsoft.com/~mbj/Mars_Pathfinder/Authoritative_Ac…
Cheers
Stelios
finally, something other than some “I installed linux” article!
A bit short, but good.
The big question I have is: it’s clear that deterministic systems have some advanatages (such as auto levelling of tasks, task prioritization, process intercommnunication), so why aren’t their hybrid systems, that sometimes act deterministically, sometimes non-deterministically, depending upon system load, etc.?
Or is that something like BSD?
There’s a lot of interesting research solutions to the
priority inversion problem. However, the support for these
in commertical (and free) RTOS:es are both sparse and
not very well advertized/documented. Does anybody have a table over RTOS:es and the semaphor protocols supported?
Priority inheritance is not bullet-proof (it can actually
*cause* priority inversion when you’ve got more than one
semaphore). PCP and Highest Locker Protocol are both elegant
in theory but not very transparent for the coder and the one
that reads the code. Every single semaphore must be known
and all processes must be investigated for which semaphores
that are used. That is not obvious… malloc() for instance,
there’s one. How may more (closed source) library and system calls conceal semaphore usage? Not easy to find out.
So, what do people do, in practice? Not even NASA seems to
get it right? (Apart from *not using* semaphores, like message passing, that is).
Any list over RTOS’es ? The only ones I know about are VxWorks and QNX.. (Well, and RTLinux perhaps)