D.13 The Ravenscar and Jorvik Profiles
This subclause defines the Ravenscar and Jorvik
profiles.
Legality Rules
Static Semantics
The usage profile Ravenscar
is equivalent to the following set of pragmas:
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);
The usage profile
Jorvik is equivalent to the following set of pragmas:
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_Local_Protected_Objects,
No_Local_Timing_Events,
No_Protected_Type_Allocators,
No_Requeue_Statements,
No_Select_Statements,
No_Specific_Termination_Handlers,
No_Task_Allocators,
No_Task_Hierarchy,
No_Task_Termination,
Pure_Barriers,
Max_Task_Entries => 0,
No_Dependence => Ada.Asynchronous_Task_Control,
No_Dependence => Ada.Execution_Time.Group_Budgets,
No_Dependence => Ada.Execution_Time.Timers,
No_Dependence => Ada.Task_Attributes,
No_Dependence => System.Multiprocessors.Dispatching_Domains);
Paragraph 7 and 8
were deleted.
Implementation Advice
On a multiprocessor system, an implementation should
support a fully partitioned approach if one of these profiles is specified.
Each processor should have separate and disjoint ready queues.
NOTE 1 For the Ravenscar profile,
the effect of the restriction Max_Entry_Queue_Length => 1 applies
only to protected entry queues due to the accompanying restriction Max_Task_Entries
=> 0. The restriction Max_Entry_Queue_Length is not applied by the
Jorvik profile.
NOTE 2 When the Ravenscar or Jorvik
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.
NOTE 3 It is not recommended to specify
the CPU of a task to be Not_A_Specific_CPU when the Ravenscar or Jorvik
profile is in effect. How a partition executes strongly depends on the
assignment of tasks to CPUs.
NOTE 4 Any unit that meets the requirements
of the Ravenscar profile also meets the requirements of the Jorvik profile.
Ada 2005 and 2012 Editions sponsored in part by Ada-Europe