Contents Index Search Related Documents Previous Next
D.2.4 Non-Preemptive Dispatching
1/2
This clause defines a non-preemptive task dispatching
policy.
Static Semantics
2/2
The policy_identifier
Non_Preemptive_FIFO_Within_Priorities is a task dispatching policy.
Legality Rules
3/2
Non_Preemptive_FIFO_Within_Priorities shall
not be specified as the
policy_identifier
of
pragma Priority_Specific_Dispatching
(see
D.2.2).
Dynamic Semantics
4/2
When Non_Preemptive_FIFO_Within_Priorities is
in effect, modifications to the ready queues occur only as follows:
5/2
- When a blocked task becomes ready,
it is added at the tail of the ready queue for its active priority.
6/2
- When the active priority of a ready
task that is not running changes, or the setting of its base priority
takes effect, the task is removed from the ready queue for its old active
priority and is added at the tail of the ready queue for its new active
priority.
7/2
- When the setting of the base priority
of a running task takes effect, the task is added to the tail of the
ready queue for its active priority.
8/2
- When a task executes a delay_statement
that does not result in blocking, it is added to the tail of the ready
queue for its active priority. This is a task dispatching point (see
D.2.1).
Implementation Requirements
9/2
An implementation shall allow specifying both
the task dispatching policy as Non_Preemptive_FIFO_Within_Priorities
and the locking policy (see
D.3) as Ceiling_Locking
for a single partition.
Implementation Permissions
10/2
Since implementations are allowed to round
all ceiling priorities in subrange System.Priority to System.Priority'Last
(see
D.3), an implementation may allow a task
to execute within a protected object without raising its active priority
provided the protected object does not contain pragma Interrupt_Priority,
Interrupt_Handler, or Attach_Handler.
Contents Index Search Related Documents Previous Next Legal