Version 1.2 of ai05s/ai05-0171-1.txt
!standard D.13.1(4/2) 10-02-18 AI05-0171-1/02
!class Amendment 09-10-22
!status work item 09-10-22
!status received 09-10-22
!subject Ravenscar Profile for Multiprocessor Systems
The Ravenscar Profile, originally designed for single processors, has
proven remarkably useful for modelling verifiable real-time
single-processor systems. It can be extended to support
multi-processor systems using a fully partitioned approach. The
implementation of this scheme is simple, and it can be used to develop
applications amenable to schedulability analysis.
The Ravenscar Profile defines a deterministic and analysable tasking
model for single processors which can be supported with a run-time
system of reduced size and complexity. For multi-processor systems,
the Ravenscar Profile could be extended using a fully partitioned
approach, with each task allocated statically to a concrete processor.
This scheme could be supported by a streamlined run-time system, and
applications built following this approach can apply timing analysis
techniques on each processor separately.
We propose to allow the implementation of the Ravenscar Profile on
multi-processor systems following a fully partitioned approach.
The first part of the proposal is a general package that will
be used by Ravenscar.
Add a new clause:
D.16 Multiprocessor Implementation
This clause allows implementations on multiprocessor platforms to
The form of a pragma CPU is as follows:
pragma CPU (expression);
Name Resolution Rules
The expected type for the expression is Integer.
A CPU pragma is allowed only immediately within a task_definition, or the
declarative_part of a subprogram_body. At most one such pragma shall appear
within a given construct.
For a CPU pragma that appears in the declarative_part of a subprogram_body,
the expression shall be static, and its value shall be in the range of
The following language-defined library package exists
package System.Multiprocessors is
type CPU_Range is range 0 .. <implementation-defined>
subtype CPU is CPU_Range range 1 .. CPU_Range'last;
function Number_Of_CPUs return CPU;
A CPU pragma has no effect if it occurs in the declarative part of the
subprogram_body of a subprogram other then the main subprogram.
The CPU value determines the processor on which the task will
activate and execute. A task without a pragma will execute on the same
processor as its activating task. It is implementation defined where the
environment task executes.
A call of Number_Of_CPUs returns the number of processors available
to the program.
Add to D.13.1(4/2) a new restriction:
No_Dependence => System.Multiprocessors.Dispatching_Policies;
Add after D.13.1(4/2):
On a multi-processor system, an implementation should support a fully
partitioned approach, with each task allocated statically to a
concrete processor and no task migration. Each processor should have
separate and disjoint ready queues. A task should only be on the ready
queues of one processor, and the processor to which a task belongs
should 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.
Although there are many dispatching approaches that make use of
task migration this significantly complicates the run-time
and adds overheads. For Ravenscar and its focus on static properties
it is in keeping to disallow migration. The scheduling problem for
partitioned allocation is a combination of bin packing followed
by single processor dispatching. These are known techniques and
do not add complications to the Ravenscar model.
** TBD **
Add an ACATS C-Test of this package.
Questions? Ask the ACAA Technical Agent