Profilo Ravenscar

sottoinsieme hard real-time del linguaggio Ada

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).[1]

Caratteristiche modifica

Un'applicazione conforme al profilo Ravenscar impiega la direttiva

pragma Profile (Ravenscar);

che è equivalente al seguente insieme di direttive:[1]

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 modifica

  1. ^ a b John Barnes, The Ravenscar profile, su adaic.org.

Bibliografia modifica

  Portale Informatica: accedi alle voci di Wikipedia che trattano di Informatica