D.7 Tasking Restrictions
This clause defines restrictions that can be used with a pragma Restrictions (see 13.12) to facilitate the construction of highly efficient tasking run-time systems.
Static Semantics
The following restriction_identifiers are language defined:
- No_Task_Hierarchy
- All (nonenvironment) tasks depend directly on the environment task of the partition.
- No_Nested_Finalization
- Objects with controlled, protected, or task parts and access types that designate such objects, shall be declared only at library level.
- No_Abort_Statements
- There are no abort_statements, and there are no calls on Task_Identification.Abort_Task.
- No_Terminate_Alternatives
- There are no selective_accepts with terminate_alternatives.
- No_Task_Allocators
- There are no allocators for task types or types containing task subcomponents.
- No_Implicit_Heap_Allocations
- There are no operations that implicitly require heap storage allocation to be performed by the implementation. The operations that implicitly require heap storage allocation are implementation defined.
- No_Dynamic_Priorities
- There are no semantic dependences on the package Dynamic_Priorities.
- No_Asynchronous_Control
- There are no semantic dependences on the package Asynchronous_Task_Control.
The following restriction_parameter_identifiers are language defined:
- Max_Select_Alternatives
- Specifies the maximum number of alternatives in a selective_accept.
- Max_Task_Entries
- Specifies the maximum number of entries per task. The bounds of every entry family of a task unit shall be static, or shall be defined by a discriminant of a subtype whose corresponding bound is static. A value of zero indicates that no rendezvous are possible.
- Max_Protected_Entries
- Specifies the maximum number of entries per protected type. The bounds of every entry family of a protected unit shall be static, or shall be defined by a discriminant of a subtype whose corresponding bound is static.
Dynamic Semantics
This paragraph was deleted.
The following restriction_parameter_identifiers are language defined:
- Max_Storage_At_Blocking
- Specifies the maximum portion (in storage elements) of a task's Storage_Size that can be retained by a blocked task. If an implementation chooses to detect a violation of this restriction, Storage_Error should be raised; otherwise, the behavior is implementation defined.
- Max_Asynchronous_Select_Nesting
- Specifies the maximum dynamic nesting level of asynchronous_selects. A value of zero prevents the use of any asynchronous_select and, if a program contains an asynchronous_select, it is illegal. If an implementation chooses to detect a violation of this restriction for values other than zero, Storage_Error should be raised; otherwise, the behavior is implementation defined.
- Max_Tasks
- Specifies the maximum number of task creations that may be executed over the lifetime of a partition, not counting the creation of the environment task. A value of zero prevents any task creation and, if a program contains a task creation, it is illegal. If an implementation chooses to detect a violation of this restriction, Storage_Error should be raised; otherwise, the behavior is implementation defined.
It is implementation defined whether the use of pragma Restrictions results in a reduction in executable program size, storage requirements, or execution time. If possible, the implementation should provide quantitative descriptions of such effects for each restriction.
Implementation Advice
When feasible, the implementation should take advantage of the specified restrictions to produce a more efficient implementation.
Notes
29 The above Storage_Checks can be suppressed with pragma Suppress.
Copyright © 1992,1993,1994,1995 Intermetrics, Inc.
Copyright © 2000 The MITRE Corporation, Inc.
Ada Reference Manual