Perfil de Ravenscar

De Wikipedia, la enciclopedia libre

El perfil de Ravenscar es un subconjunto del lenguaje de programación Ada especialmente pensado para los sistemas de tiempo real. Impone ciertas restricciones a la parte concurrente del lenguaje para poder realizar análisis temporales y permitir una implementación eficiente del núcleo de ejecución.

Historia[editar]

El perfil fue definido en el 8º IRTAW, celebrado en 1997 en una pequeña localidad del condado de Yorkshire (Reino Unido) llamada Ravenscar. Este es el motivo por el cual el perfil fue bautizado con este nombre, aunque más tarde se creó el siguiente acrónimo: Reliable Ada Verifiable Executive Needed for Scheduling Critical Applications in Real-Time.

En las dos siguientes reuniones del IRTAW fue refinado. Actualmente está siendo estandarizado y ampliado por la ISO, y formará parte de la siguiente revisión de Ada, denominada Ada 2005.

Objetivos del perfil[editar]

Los objetivos de este perfil son dos:

  • Conseguir un modelo de ejecución concurrente determinista, de tal forma que sea apto para sistemas de tiempo real estrictos.
  • Permitir una implementación pequeña y eficiente, y que no obligue a introducir mucha sobrecarga para que las tareas puedan responder a plazos muy cortos.

Restricciones del perfil[editar]

Una aplicación realizada en Ada puede hacer uso de este perfil utilizando la siguiente directiva del compilador:

pragma Profile (Ravenscar);

Que es equivalente a escribir las siguientes directivas de configuración:

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_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_Budget,
                No_Dependence => Ada.Execution_Time.Timers,
                No_Dependence => Ada.Task_Attributes);


Véase también[editar]

Referencias[editar]