D.13 The Ravenscar Profile
Max_Entry_Queue_Length => 1,
Max_Protected_Entries => 1,
Max_Task_Entries => 0,
No_Dependence => Ada.Asynchronous_Task_Control,
No_Dependence => Ada.Calendar,
No_Dependence => Ada.Execution_Time.Group_Budgets,
No_Dependence => Ada.Execution_Time.Timers,
No_Dependence => Ada.Synchronous_Barriers,
No_Dependence => Ada.Task_Attributes,
No_Dependence => System.Multiprocessors.Dispatching_Domains);
Discussion: The Ravenscar profile is
named for the location of the meeting that defined its initial version.
The name is now in widespread use, so we stick with existing practice,
rather than using a more descriptive name.
Paragraph 7 was deleted.
This paragraph was
A task shall only be on the ready queues of one
processor, and the processor to which a task belongs shall be defined
statically. Whenever a task running on a processor reaches a task dispatching
point, it goes back to the ready queues of the same processor. A task
with a CPU value of Not_A_Specific_CPU will execute on an implementation
defined processor. [A task without a CPU aspect will activate and execute
on the same processor as its activating task.]
Proof: The processor
of a task without a CPU aspect is defined in D.16.
On a multiprocessor system, an implementation should support a fully
partitioned approach. Each processor should have separate and disjoint
Implementation Advice: On a multiprocessor
system, each processor should have a separate and disjoint ready queue.
The effect of the Max_Entry_Queue_Length => 1 restriction applies
only to protected entry queues due to the accompanying restriction of
Max_Task_Entries => 0.
When the Ravenscar profile is in effect (via the
effect of the No_Dynamic_CPU_Assignment restriction), all of the tasks
in the partition will execute on a single CPU unless the programmer explicitly
uses aspect CPU to specify the CPU assignments for tasks. The use of
multiple CPUs requires care, as many guarantees of single CPU scheduling
no longer apply.
It is not recommended to specify the CPU of a task
to be Not_A_Specific_CPU when the Ravenscar profile is in effect. How
a partition executes strongly depends on the assignment of tasks to CPUs.
Extensions to Ada 95
Wording Changes from Ada 2005
How Ravenscar behaves on a multiprocessor system is now defined.
Incompatibilities With Ada 2012
Corrigendum: The Ravenscar
profile no longer allows the use of package Synchronous_Barriers, as
this package violates the fundamental Ravenscar requirement that each
waiting point can only block (and release) a single task. This is incompatible
with the published Ada 2012 standard, but it is unlikely that any existing
Ravenscar runtime ever usefully supported barriers.
Corrigendum:The Ravenscar profile (via the
effect of the new restriction No_Dynamic_CPU_Assignment) no longer allows
setting the CPU aspect of a task to a non-static value. While this was
allowed, an implementation would have had to come up with a creative
interpretation of the Ada 2012 requirement to define the association
of tasks to processors statically. As such, the new check is more likely
to catch bugs than break a working program.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe