Hi Niklas. Are you doing a lot of multicore stuff? I haven't had the pleasure yet, and that might be why we're missing each other. Multicore is certainly different. The systems I've worked on also used a minimal number of threads - usually haveing an additional thread meant we had a different interrupting device to manage.
I certainly appreciate your very well presented thoughts. "Highly granular" processing has been something of a deep assumption for a long time, and those are always good to challenge.
And it could be that I was simply corrupted by FPGA designers :)
Niklas Holsti wrote:
I should have left off "and waits".
Sure! I'm mainly thinking of how things are described in most academic literature in order to be as general as possible. Lots of ways to skin that cat.
Somewhat.
I think that is true. I'm not sure what to do about that, either :)
It has to get in, do a small task, then get out at each point in its state. "Circumspect" means "parsimonious" or "cheap" in this case - it must use the least CPU necessary to execute that state transition, and get back to a blocking call as quickly as it can.
Not universally; no. One realtime deadline may require many time quanta - a given thread may execute may times within a single deadline time period.
I think you are assuming a one-to-one map between *all* responses and that time quantum. So no. A single response may require multiple time quanta, still.
They varied. I don't know of a good working distinction between soft and hard realtime, so I can't speak to the last thing.
It's possible that what I mean lines up with that. Only a few had enforced time budgets. The reason I brought that up was that the failure modes were gentler - you got slow degradation of response rather than falling off the cliff.
That, of course, depends on what's desired of the system to start with...
That's the general idea. The overall idea is really to make a "loop" into a series (or cycle) of state transitions rather than use control constructs.
Ick. What I mean really doesn't hurt that bad :) These systems didn't use a large number of threads.
My use of the paradigm preceeds any of the object gurus, IMO. OO hadn't quite propagated to realtime in the '80s in a serious way. I have since used things like ObjecTime, Rose and Rhapsody, but we'd done things like this with nothing but a 'C' compiler on bare metal before.
Some of those things had hundreds of states ( which may be what you are saying is the horror of it ) but I did not see that as a curse. We were able to log events and state for testing and never had a defect that wasn't 100% reproducible because of it...
I, unfortunately, don't really know what that means.
If for any case, any of that is true, then yes :) There's no crime in using whatever works.
In summary, though, my statement stands:
I do not see how having the system timer tick swap out a running thread improves the reliability or determinacy of a system, nor how it makes the design of a system easier.
-- Les Cargill