Il profilo Ravenscar (Ravenscar profile) è un sottoinsieme delle funzionalità del linguaggio Ada progettato per sistemi critici, che fornisce garanzie hard real-time per i programmi implementati conformemente ad esso. Fu definito in un rapporto tecnico seguente la definizione dello standard Ada 95, e divenne parte dello standard Ada 2012. Prende il nome dal villaggio inglese di Ravenscar, sede dell'ottavo International Real-Time Ada Workshop (IRTAW 8).
Caratteristiche
Un'applicazione conforme al profilo Ravenscar impiega la direttiva pragma Profile (Ravenscar); che è equivalente al seguente insieme di direttive: pragma Task_Dispatching_Policy (FIFO_Within_Priorities); -- Scheduler FIFO con preemption basata su priorità pragma Locking_Policy (Ceiling_Locking); -- Usa il protocollo priority ceiling, per prevenire l'inversione delle priorità pragma Detect_Blocking; -- Garantisce che un'operazione potenzialmente bloccante sia rilevata e generi un'eccezione pragma Restrictions ( No_Abort_Statements, -- Proibisce l'uso del costrutto `abort` No_Dynamic_Attachment, -- Proibisce l'uso del package Ada.Interrupts No_Dynamic_Priorities, -- Proibisce lettura e scrittura di priorità a runtime (package Ada.Priorities e attributo Priority) No_Implicit_Heap_Allocations, -- Proibisce l'uso di costrutti che allocano memoria sullo heap implicitamente No_Local_Protected_Objects, -- Oggetti protetti possono essere dichiarati solo a livello di libreria No_Local_Timing_Events, -- Oggetti di tipo Ada.Real_Time.Timing_Events possono essere dichiarati solo a livello di libreria No_Protected_Type_Allocators, -- Proibisce l'uso di allocatori di oggetti di tipo protetto o contenenti membri di tipo protetto No_Relative_Delay, -- Proibisce l'uso del costrutto `delay` in forma relativa (e.g. `delay X;`) No_Requeue_Statements, -- Proibisce l'uso del costrutto `requeue` No_Select_Statements, -- Proibisce l'uso del costrutto `select` No_Specific_Termination_Handlers, -- Proibisce l'uso di Task_Termination.Set_Specific_Handler e di Task_Termination.Specific_Handler No_Task_Allocators, -- Proibisce la generazione di allocatori per oggetti di tipo task o che hanno membri di tipo task No_Task_Hierarchy, -- Tutti i task discendono direttamente dall'environment task No_Task_Termination, -- Tutti i task devono continuare la propria esecuzione indefinitamente e non possono terminare Simple_Barriers, -- La guardia dell'`entry` in un oggetto protetto deve essere un valore statico o un membro dell'oggetto Max_Entry_Queue_Length => 1, -- Non consente di avere contemporaneamente più di una chiamata nella coda di un `entry` Max_Protected_Entries => 1, -- Un tipo protetto non può avere più di un `entry` Max_Task_Entries => 0, -- Un task non può avere alcun `entry` -- Proibisce l'uso dei seguenti package No_Dependence => Ada.Asynchronous_Task_Control, No_Dependence => Ada.Calendar, No_Dependence => Ada.Execution_Time.Group_Budget, No_Dependence => Ada.Execution_Time.Timers, No_Dependence => Ada.Task_Attributes);
Note
Bibliografia
Categoria:Ada