PDF de programación - Planificación de tareas en Ada

Imágen de pdf Planificación de tareas en Ada

Planificación de tareas en Adagráfica de visualizaciones

Publicado el 15 de Octubre del 2018
602 visualizaciones desde el 15 de Octubre del 2018
154,9 KB
24 paginas
Creado hace 16a (06/11/2007)
ditdit

UPM

Planificación de tareas en

Ada

Juan Antonio de la Puente

DIT/UPM

Características generales

 Modelo básico

– planificación con prioridades dinámicas

» también EDF

– políticas de despacho para tareas con la misma prioridad

» FIFO, RR

– políticas de acceso a objetos protegidos

» ICPP / SRP

 Perfil de Ravenscar

– FPPS + ICPP
– modelo de tareas estático, ejecución previsible
– se puede analizar el comportamiento temporal

6/11/07

Planificación de tareas en Ada

1

6
0
0
2
-
5
0
0
2



t

e
n
e
u
P
a



l


e
d



i

o
n
o

t



n
A
n
a
u
J

©

Prioridades

 En el anexo de tiempo real se define un modelo de

planificación con prioridades y desalojo

 La prioridad de una tarea es de un subtipo definido en el

paquete System

subtype Any_Priority is Integer range intervalo;
subtype Priority is Any_Priority
range Any_Priority’First .. valor;
subtype Interrupt_Priority is Any_Priority
range Priority’Last + 1 .. Any_Priority’Last;

 Los valores mayores denotan prioridades más altas
 Debe haber al menos 30 valores de Priority

y 1 de Interrupt_Priority

6/11/07

Planificación de tareas en Ada

2

6
0
0
2
-
5
0
0
2



t

e
n
e
u
P
a



l


e
d



i

o
n
o

t



n
A
n
a
u
J

©

Prioridad básica

 La prioridad básica de una tarea es la prioridad con la que

se ejecuta inicialmente, si no se dice otra cosa

 Se especifica con un pragma Priority

task Controller is
pragma Priority (10);
end Controller;

6
0
0
2
-
5
0
0
2



t

e
n
e
u
P
a



l


e
d



i

o
n
o

t



n
A
n
a
u
J

©

task type Sensor (Task_Priority : System.Priority) is
pragma Priority (Task_Priority);
end Sensor;

 La prioridad básica de una tarea se puede cambiar con

Ada.Dynamic_Priorities.Set_Priority

6/11/07

Planificación de tareas en Ada

3

Prioridad activa

6
0
0
2
-
5
0
0
2



t

e
n
e
u
P
a



l


e
d



i

o
n
o

t



n
A
n
a
u
J

©

 Una tarea puede heredar una prioridad más alta que su

prioridad básica
– durante la activación hereda la prioridad del padre
– durante la ejecución de una operación protegida hereda el techo de

prioridad del objeto protegido

– durante la ejecución de una cita la tarea llamada hereda la prioridad

de la que llama

 La prioridad activa de una tarea es el máximo de su

prioridad básica y cualquier prioridad heredada
– esta es la prioridad que se usa para planificar el uso del procesador

6/11/07

Planificación de tareas en Ada

4

Modelo de planificación

 Hay una cola de tareas listas

(ready queue) para cada nivel de
prioridad
– es un modelo, no tiene por qué

realizarse exactamente así

6
0
0
2
-
5
0
0
2



t

e
n
e
u
P
a



l


e
d



i

o
n
o

t



n
A
n
a
u
J

©

 Cuando el procesador está libre se

despacha la primera tarea de la
cola de mayor prioridad que no
esté vacía

 Cuando se llega a un punto de
despacho la tarea que está en
ejecución se vuelve a poner en la
cola correspondiente a su prioridad
activa
– por ejemplo, si la tarea se

suspende

other

dispatching

events

running

suspend

ready





resume

suspended

6/11/07

Planificación de tareas en Ada

5

Políticas de planificación

 Definen cómo se hace la planificación en detalle

– cuáles son los puntos de despacho
– cómo se gestionan las colas

 El pragma

pragma Task_Dispatching_Policy (policy)

define la política de planificación para todo el sistema
– debe ser una de las siguientes

» FIFO_Within_Priorities
» Non_Preemptive_FIFO_Within_Priorities
» Round_Robin_Within_Priorities
» EDF_Across_Priorities

6/11/07

Planificación de tareas en Ada

6

6
0
0
2
-
5
0
0
2



t

e
n
e
u
P
a



l


e
d



i

o
n
o

t



n
A
n
a
u
J

©

Planificación con desalojo

 FIFO_within_priorities es una política de planificación con

prioridades fijas y desalojo (FPPS)

 Puntos de despacho

– reanudación de una tarea suspendida

» la tarea reanudada se pone al final de la cola correspondiente a su

prioridad activa

– ejecución de un delay que no da lugar a un retardo

» la tarea en ejecución se pone al final de la cola correspondiente a su

prioridad activa

– activación de una tarea con mayor prioridad

» la tarea en ejecución es desalojada y se pone al principio de la cola

correspondiente a su prioridad activa

6/11/07

Planificación de tareas en Ada

7

6
0
0
2
-
5
0
0
2



t

e
n
e
u
P
a



l


e
d



i

o
n
o

t



n
A
n
a
u
J

©

Planificación sin desalojo

 Non_Preemptive_FIFO_within_priorities es una política de

planificación con prioridades fijas y sin desalojo (FPNS)

 Puntos de despacho

– reanudación de una tarea suspendida

» la tarea reanudada se pone al final de la cola correspondiente a su

prioridad activa

– ejecución de un delay que no da lugar a un retardo

» la tarea en ejecución se pone al final de la cola correspondiente a su

prioridad activa

6/11/07

Planificación de tareas en Ada

8

6
0
0
2
-
5
0
0
2



t

e
n
e
u
P
a



l


e
d



i

o
n
o

t



n
A
n
a
u
J

©

Turno circular

 Round_Robin_Within_Priorities es una política de

planificación en la que se efectúa un turno circular (RR)
entre las tareas de la misma prioridad
 Como FIFO_within_priorities, excepto:

– cuando una tarea se pone al final de una cola se le asigna un
presupuesto de tiempo de ejecución igual a un cierto cuanto
» por ejemplo, cuando se reanuda después de estar suspendida

– cuando la tarea se ejecuta, su presupuesto disminuye según el

tiempo de ejecución que consume

– cuando una tarea se pone al principio de una cola mantiene el

presupuesto que le queda

» por ejemplo, cuando se la desaloja

– cuando una tarea ha consumido todo su presupuesto se pone al

final de la cola correspondiente a su nivel de prioridad (y se
despacha otra tarea)

» excepto si está en una operación protegida

6/11/07

Planificación de tareas en Ada

9

6
0
0
2
-
5
0
0
2



t

e
n
e
u
P
a



l


e
d



i

o
n
o

t



n
A
n
a
u
J

©

Ada.Dispatching.Round_Robin

with System;
with Ada.Real_Time;

package Ada.Dispatching.Round_Robin is

Default_Quantum : constant Ada.Real_Time.Time_Span
:= implementation-defined;

6
0
0
2
-
5
0
0
2



t

e
n
e
u
P
a



l


e
d



i

o
n
o

t



n
A
n
a
u
J

©

procedure Set_Quantum (Pri : in System.Priority;
Quantum : in Ada.Real_Time.Time_Span);
procedure Set_Quantum (Low, High : in System.Priority;
Quantum : in Ada.Real_Time.Time_Span);
function Actual_Quantum (Pri : System.Priority)

return Ada.Real_Time.Time_Span;

function Is_Round_Robin (Pri : System.Priority) return Boolean;

end Ada.Dispatching.Round_Robin;

6/11/07

Planificación de tareas en Ada

10

Primero el más urgente

 EDF_Across_Priorities es una política de planificación

basada en plazos

 El plazo de respuesta de una tarea se especifica con

pragma Relative_Deadline (plazo)

El plazo es una expresión de tipo Ada.Real_Time.Time_Span

 Cada tarea tiene una prioridad y un plazo relativo

– cuando está activa tiene, además, un plazo absoluto

 Se despacha primero la tarea cuyo plazo absoluto es

menor, independientemente de su prioridad

6/11/07

Planificación de tareas en Ada

11

6
0
0
2
-
5
0
0
2



t

e
n
e
u
P
a



l


e
d



i

o
n
o

t



n
A
n
a
u
J

©

Ada.Dispatching.EDF

with Ada.Real_Time;
with Ada.Task_Identification;

package Ada.Dispatching.EDF is

subtype Deadline is Ada.Real_Time.Time;
Default_Deadline : constant Deadline := Ada.Real_Time.Time_Last;

procedure Set_Deadline (
D : in Deadline;

T : in Ada.Task_Identification.Task_Id
:= Ada.Task_Identification.Current_Task);

procedure Delay_Until_And_Set_Deadline (

Delay_Until_Time : in Ada.Real_Time.Time;
Deadline_Offset : in Ada.Real_Time.Time_Span);

function Get_Deadline (

T : in Ada.Task_Identification.Task_Id :=
Ada.Task_Identification.Current_Task)
return Deadline;

end Ada.Dispatching.EDF;

6/11/07

Planificación de tareas en Ada

12

6
0
0
2
-
5
0
0
2



t

e
n
e
u
P
a



l


e
d



i

o
n
o

t



n
A
n
a
u
J

©

Ejemplo (1)

-- gnat.adc:
-- pragma Task_Dispatching_Policy (EDF_Across_Priorities);

with Ada.Real_Time;

package Deadline_Driven is
use Ada.Real_Time;

Deadline : constant Time_Span := Milliseconds (4);

task Periodic is
pragma Relative_Deadline (Deadline);
end Periodic;

end Deadline_Driven;

6/11/07

Planificación de tareas en Ada

13

6
0
0
2
-
5
0
0
2



t

e
n
e
u
P
a



l


e
d



i

o
n
o

t



n
A
n
a
u
J

©

Ejemplo (2)

with Ada.Real_Time;
with Ada.Dispatching.EDF;

package body Deadline_Driven is
use Ada.Real_Time, Ada.Dispatching.EDF;

task body Periodic is
Period : constant Time_Span := Milliseconds (20);
Next : Time := Clock;
begin
loop
Delay_Until_And_Set_Deadline (Next, Deadline);
-- actividad periódica
Next := Next + Period;
end loop;
end Periodic;

end Deadline_Driven;

6/11/07

Planificación de tareas en Ada

14

6
0
0
2
-
5
0
0
2



t

e
n
e
u
P
a



l


e
d



i

o
n
o

t



n
A
n
a
u
J

©

Techo de prioridad

 La prioridad activa de las tareas que ejecutan operaciones

protegidas depende de la política de planificación y de la
política de acceso a los objetos protegidos

6
0
0
2
-
5
0
0
2



t

e
n
e
u
P
a



l


e
d



i

o
n
o

t



n
A
n
a
u
J

©

 La política de acceso con techos de prioridad (ceiling

locking) está definida para todas las políticas de
planificación predefinidas
– con FIFO_Within_Priorities equivale al protocolo del techo de

prioridad inmediato

– con EDF_Across_Priorities equivale al protocolo SRP (stack

resource protocol)

6/11/07

Planificación de tareas en Ada

15

Prioridad techo

 Para usar techos de prioridad hay que poner un pragma

de configuración

pragma Locking_Policy (Ceiling_Locking);

6
0
0
2
-
5
0
0
2



– afecta a todo el programa (con GNAT se pone en gnat.adc)

t

e
n
e
u
P
a



l


e
d



i

o
n
o

t



n
A
n
a
u
J

©

 El techo de prioridad de un objeto o un tipo protegido se

especif
  • Links de descarga
http://lwp-l.com/pdf13898

Comentarios de: Planificación de tareas en Ada (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad