Annotated Ada Reference ManualLegal Information
Contents   Index   References   Search   Previous   Next 

D.13 The Ravenscar Profile

1/3
{AI95-00249-01} {AI05-0246-1} {AI05-0299-1} [This subclause defines the Ravenscar profile.
Paragraphs 2 and 3 were moved to 13.12, “Pragma Restrictions and Pragma Profile”. 

Legality Rules

4/3
{AI95-00249-01} {AI05-0246-1} The profile_identifier Ravenscar is a usage profile (see 13.12). For usage profile Ravenscar, there shall be no profile_pragma_argument_associations.

Static Semantics

5/3
{AI95-00249-01} {AI05-0246-1} The usage profile Ravenscar is equivalent to the following set of pragmas:
6/4
{AI95-00249-01} {AI95-00297-01} {AI95-00394-01} {AI05-0171-1} {AI05-0246-1} {AI12-0055-1} {AI12-0073-1} pragma Task_Dispatching_Policy (FIFO_Within_Priorities);
pragma Locking_Policy (Ceiling_Locking);
pragma Detect_Blocking;
pragma Restrictions (
              No_Abort_Statements,
              No_Dynamic_Attachment,
              No_Dynamic_CPU_Assignment,
              No_Dynamic_Priorities,
              No_Implicit_Heap_Allocations,
              No_Local_Protected_Objects,
              No_Local_Timing_Events,
              No_Protected_Type_Allocators,
              No_Relative_Delay,
              No_Requeue_Statements,
              No_Select_Statements,
              No_Specific_Termination_Handlers,
              No_Task_Allocators,
              No_Task_Hierarchy,
              No_Task_Termination,
              Simple_Barriers,
              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);
6.a/3
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.

Implementation Requirements

8/4
This paragraph was deleted.{AI05-0171-1} {AI05-0229-1} {AI12-0055-1}

Implementation Advice

9/3
{AI05-0171-1} On a multiprocessor system, an implementation should support a fully partitioned approach. Each processor should have separate and disjoint ready queues.
9.a.1/3
Implementation Advice: On a multiprocessor system, each processor should have a separate and disjoint ready queue.
NOTES
10/3
42  {AI95-00249-01} {AI05-0246-1} 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.
11/4
43  {AI12-0055-1} 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.
12/4
44  {AI12-0055-1} 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

12.a/3
{AI95-00249-01} {AI05-0246-1} The Ravenscar profile is new; it was moved here by Ada 2012. 

Wording Changes from Ada 2005

12.b/3
{AI05-0171-1} How Ravenscar behaves on a multiprocessor system is now defined. 

Incompatibilities With Ada 2012

12.c/4
{AI05-0073-1} 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.
12.d/4
{AI05-0055-1} 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. 

Contents   Index   References   Search   Previous   Next 
Ada-Europe Ada 2005 and 2012 Editions sponsored in part by Ada-Europe