Version 1.1.1.1 of ais/ai-00103.txt
!standard 13.11 (00) 98-04-01 AI95-00103/01
!class confirmation 95-10-12
!status work item 95-10-12
!status received 95-10-12
!priority Medium
!difficulty Medium
!subject Storage pools and access types designating task types
!summary 98-04-01
The specification of a user-defined storage pool for an access to task type
permits the user-defined allocation and deallocation of task objects,
not necessarily the implementation-defined tasking structures that support the
task object.
!question 95-10-12
If a user-defined storage pool is specified for an access-to-task type,
does this imply that the user's storage pool will be used for all data
structures associated with the task, such as TCB's and task stacks?
(No.)
!response 98-04-01
Many implementations choose to implement a task object as an access to the
implementation-defined data structures associated with the task (such
as a Task Control Block (TCB) and a Task Stack). In such an implementation,
a user-defined storage pool will control only the allocation of the task
objects (i.e. the access object), and will have no effect on the allocation
and deallocation of those other resources.
Note that in some such systems, it may be impossible to allow
user-defined allocation of TCBs via the storage pool mechanism, because
the TCBs are in a separate address space, or are allocated in a run-time
system table.
!appendix
!section 13.11(00)
!subject Storage pools and access types designating task types
!reference RM95-13.11
!reference RM95-9.1
!from Offer pazy 95-10-11
!reference as: 95-5328.a Offer Pazy 95-10-11>>
!discussion
The purpose of this comment is to request the ARG to provide a
clarification of a little-known aspect of the storage pools rules. Storage
pools are allowed for access types designating task types. Nothing is
really wrong with this rule and I don't think anything is actually broken
in the standard. However, originally storage pools were requested by the
real-time community as a way to override the heap management of the vendor.
TCBs and other task storage resources were always high on the list. A
naive reader of the LRM might conclude that assigning a storage pool to an
access type designating a task task will indeed cause the user-defined
Allocate to be called for the actual TCB, or the memory block (why else
would a user write a storage pool for such a type?) which is
likely not to be the case (*). Rather, only the task object will be
allocated from the US pool. Again semantically, all is clear and simple,
but for the sake of avoiding unpleasant surprises, I would recommend
making a note to this effect.
(*) S separate issue (in my opinion) is whether or not an implementation
can actually direct allocation requests for the TCB to the UD pools without
radically rewriting its TCB management component. Some may be able too,
but many approaches make this infeasible. I don't believe that the intent
was ever to require such support.
And one final comment: I have used "dirty words" like TCBs above, knowing
that semantically they don't mean anything. However, it is clear that
anyone who deals with replacing RTS components is aware of a similar
resource.
Offer Pazy
31 Robinwood Ave.
Boston, MA 02130
USA
(617)522-5988
pazy@world.std.com
****************************************************************
Questions? Ask the ACAA Technical Agent