Ada Reference Manual (Ada 2022) — Legal Information

# D.2.2 Task Dispatching Pragmas

0.1/3
This subclause allows a single task dispatching policy to be defined for all priorities, or the range of priorities to be split into subranges that are assigned individual dispatching policies.

#### Syntax

1
The form of a pragma Task_Dispatching_Policy is as follows:
2
pragma Task_Dispatching_Policy(policy_identifier);
2.1/2
The form of a pragma Priority_Specific_Dispatching is as follows:
2.2/2
pragma Priority_Specific_Dispatching (
policy_identifier, first_priority_expression, last_priority_expression);

#### Name Resolution Rules

2.3/2
The expected type for first_priority_expression and last_priority_expression is Integer.

#### Legality Rules

3/2
The policy_identifier used in a pragma Task_Dispatching_Policy shall be the name of a task dispatching policy.
3.1/2
The policy_identifier used in a pragma Priority_Specific_Dispatching shall be the name of a task dispatching policy.
3.2/2
Both first_priority_expression and last_priority_expression shall be static expressions in the range of System.Any_Priority; last_priority_expression shall have a value greater than or equal to first_priority_expression.

#### Static Semantics

3.3/2
Pragma Task_Dispatching_Policy specifies the single task dispatching policy.
3.4/2
Pragma Priority_Specific_Dispatching specifies the task dispatching policy for the specified range of priorities. Tasks with base priorities within the range of priorities specified in a Priority_Specific_Dispatching pragma have their active priorities determined according to the specified dispatching policy. Tasks with active priorities within the range of priorities specified in a Priority_Specific_Dispatching pragma are dispatched according to the specified dispatching policy.
3.5/3
If a partition contains one or more Priority_Specific_Dispatching pragmas, the dispatching policy for priorities not covered by any Priority_Specific_Dispatching pragmas is FIFO_Within_Priorities.

#### Post-Compilation Rules

4/2
A Task_Dispatching_Policy pragma is a configuration pragma. A Priority_Specific_Dispatching pragma is a configuration pragma.
4.1/2
The priority ranges specified in more than one Priority_Specific_Dispatching pragma within the same partition shall not be overlapping.
4.2/2
If a partition contains one or more Priority_Specific_Dispatching pragmas it shall not contain a Task_Dispatching_Policy pragma.
5/2
This paragraph was deleted.

#### Dynamic Semantics

6/2
A task dispatching policy specifies the details of task dispatching that are not covered by the basic task dispatching model. These rules govern when tasks are inserted into and deleted from the ready queues. A single task dispatching policy is specified by a Task_Dispatching_Policy pragma. Pragma Priority_Specific_Dispatching assigns distinct dispatching policies to subranges of System.Any_Priority.
6.1/2
If neither pragma applies to any of the program units comprising a partition, the task dispatching policy for that partition is unspecified.
6.2/3
If a partition contains one or more Priority_Specific_Dispatching pragmas, a task dispatching point occurs for the currently running task of a processor whenever there is a nonempty ready queue for that processor with a higher priority than the priority of the running task.
6.3/2
A task that has its base priority changed may move from one dispatching policy to another. It is immediately subject to the new dispatching policy.
Paragraphs 7 through 13 were moved to D.2.3.

#### Implementation Requirements

13.1/2
An implementation shall allow, for a single partition, both the locking policy (see D.3) to be specified as Ceiling_Locking and also one or more Priority_Specific_Dispatching pragmas to be given.

#### Documentation Requirements

Paragraphs 14 through 16 were moved to D.2.3.

#### Implementation Permissions

17/5
Implementations are allowed to define other task dispatching policies, but are not required to support specifying more than one task dispatching policy per partition.
18/5
An implementation is not required to support pragma Priority_Specific_Dispatching if it is infeasible to support it in the target environment.
Paragraphs 19 through 21 were deleted.

Ada 2005 and 2012 Editions sponsored in part by Ada-Europe