> Each of the key entities in this subsystem has two tasks
> associated with it, one to manage access/update and the
> other to move it down its timeline. Since there can be 128
> of these entities that means 256 tasks, and with a
> bunch of "utility tasks" results in a process have 300-350 tasks.
> Our experience with tasking in this subsystem has been very positive, most
> of the tasks are dormant at any given time, resulting in
> very low CPU utilization.
> In addition, since each pair of tasks has no interaction
> with other pairs, the complexity is quite low. And, in fact, the
> abstraction of the problem domain closely matches tasking
> semantics and capabilities.
First, please submit a paper at this year's Tri-Ada giving the
tasking organization of your product and timing metrics and
a timing chart. This is great stuff.
Second, if you could produce a public version of your code
(by deleting almost everything except the tasking shells),
it would be great to use it as an exercise to convert it
to Ada-95 protected records. An actually used tasking structure,
especially one like this matches Dr. James' cascading matrix
of Secretary-Protected-Records which administer the active
Protected-Records on either side of them. I have been waiting
for exactly such an example as yours to program as a
cascading matrix of protected records.
Third, although you are in Ada-83, most Ada-95 compilers have
Ada-83 parser options, so this could be simulated in DOS.
Also, most Ada-83 compilation units compile unchanged in Ada-95.
It would also be interesting to know if a conversion from your
tasking structure to protected records could be done
incrementally. Perhaps one pair of tasks at a time converting
to a pair of protected records? It would depend on how many
inter-task connections there are. Is it 1-dimensional?