Publicado el 6 de Junio del 2017
1.393 visualizaciones desde el 6 de Junio del 2017
276,8 KB
20 paginas
Creado hace 16a (24/11/2008)
Parte I: Programación en Ada
UNIVERSIDAD DE CANTABRIA
1. Introducción a los computadores y su programación
2. Elementos básicos del lenguaje
3. Modularidad y programación orientada a objetos
4. Estructuras de datos dinámicas
5. Tratamiento de errores
6. Abstracción de tipos mediante unidades genéricas
7. Entrada/salida con ficheros
8. Herencia y polimorfismo
9. Programación concurrente y de tiempo real
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
4
© Javier Gutiérrez, Michael González
24/nov/08
1
Notas:
UNIVERSIDAD DE CANTABRIA
9. Programación concurrente y de tiempo real
• Concurrencia
• Sincronización de espera
• Sincronización de datos
• Programación de tiempo real
• Representación del hardware
• Interrupciones
• Gestión del tiempo
• Prioridades
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
24/nov/08
2
9.1. Concurrencia
UNIVERSIDAD DE CANTABRIA
Muchos problemas se expresan de forma natural mediante
varias actividades concurrentes:
• sistemas de control atendiendo a múltiples subsistemas y
eventos
• sistemas multicomputadores o distribuidos
• para el uso concurrente de múltiples recursos
La concurrencia implica prever la sincronización:
• para la utilización de recursos y datos compartidos
• y para el intercambio de eventos e información
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
24/nov/08
3
Notas:
UNIVERSIDAD DE CANTABRIA
Tradicionalmente, existen tres entornos de aplicación en los que se utilizan programas
concurrentes:
• En aplicaciones que interaccionan con o controlan entornos físicos, en los que múltiples
eventos y subsistemas deben ser controlados a la vez. En estos sistemas una solución
concurrente lleva a un mayor grado de modularidad y a un diseño más claro.
• En sistemas multicomputadores o distribuidos, donde el paralelismo físico se puede
aprovechar al máximo ejecutando diferentes tareas en diferentes procesadores.
• En sistemas de cálculo convencional, si se desea utilizar múltiples recursos a la vez. Por
ejemplo, en un sistema de ventanas, puede ser útil asociar tareas a determinadas clases de
ventanas, de forma que puedan ejecutar diferentes actividades concurrentemente.
Los programas concurrentes representan el modelo más natural para resolver muchos problemas
del mundo real que son de naturaleza concurrente.
También se pueden usar (a veces) aproximaciones no concurrentes para la programación de
problemas de naturaleza concurrente, pero el problema es más difícil de abordar y, sobre todo, más
difícil de modificar y extender, tal como se muestra en el ejemplo de control del automóvil que
aparece a continuación.
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
24/nov/08
4
Ejemplo: Control de un
Automóvil
Actividades a controlar:
UNIVERSIDAD DE CANTABRIA
Medida de
Velocidad
C=4 ms.
T=20 ms.
D=5 ms.
Control de
Frenos ABS
C=10 ms.
T=40 ms.
D=40 ms.
Control de
Inyección
C=40 ms.
T=80 ms.
D=80 ms.
C = Tiempo de ejecución
T = Periodo
D = Plazo máximo de
finalización
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
24/nov/08
5
Programación no
Concurrente
UNIVERSIDAD DE CANTABRIA
procedure Control_del_Automóvil is
Tiempo : Integer:=0;
begin
loop
Acciones de Medida_de_Velocidad;
if Tiempo=0 or Tiempo=40 then
Acciones de Control de Frenos ABS;
end if;
if Tiempo=0 then
Primera parte de control de inyección; --(<6 ms)
elsif Tiempo=20 then
elsif Tiempo=40 then
else
Segunda parte de control de inyección; --(<16 ms)
Tercera parte de control de inyección; --(<6 ms)
Cuarta parte de control de inyección; --(<16 ms)
end if;
Espera hasta el próximo periodo; --mediante el reloj
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
24/nov/08
6
Programación no
Concurrente (cont.)
UNIVERSIDAD DE CANTABRIA
Tiempo:=Tiempo+20;
if Tiempo=80 then
Tiempo=0;
end if;
end loop;
end Control_del_Automovil;
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
24/nov/08
7
Concurrencia en Ada
UNIVERSIDAD DE CANTABRIA
El Ada soporta la programación de procesos concurrentes
mediante las tareas (“tasks”).
Las tareas constan de especificación y cuerpo:
• la especificación de una tarea declara sus puntos de
entrada (si los hay)
• el cuerpo define una actividad que se ejecuta
independientemente; tiene declaraciones e instrucciones
Las tareas van en la parte de declaraciones de un módulo
• se arrancan nada más ser visibles
• el módulo que las declara no termina si no han terminado
todas sus tareas
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
24/nov/08
8
Programación concurrente
UNIVERSIDAD DE CANTABRIA
procedure Control_del_Automóvil is
task Medida_Velocidad;
task Control_ABS;
task Control_Inyeccion;
task body Medida_Velocidad is
begin
loop
Acciones de Medida_de_Velocidad;
Esperar al próximo periodo (20 ms);
end loop;
end Medida_Velocidad;
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
24/nov/08
9
Programación concurrente
(cont.)
UNIVERSIDAD DE CANTABRIA
task body Control_ABS is is
begin
loop
Acciones de Medida_de_Velocidad;
Esperar al próximo periodo (40 ms);
end loop;
end Control_ABS;
task body Control_Inyección is
begin
loop
Acciones de Control de Inyección;
Esperar al próximo periodo (80 ms);
end loop;
end Control_Inyección;
begin
null; -- el programa principal es otra tarea
end Control_del_Automovil;
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
24/nov/08
10
9.2. Sincronización de espera
UNIVERSIDAD DE CANTABRIA
La sincronización de espera entre tareas en Ada se realiza
mediante el mecanismo del “rendezvous”, o punto de entrada,
o punto de encuentro entre dos tareas
• Hay una tarea que llama, y otra que acepta el encuentro
• En la llamada se pueden pasar parámetros, como en un
procedimiento
• La tarea que “llama” se queda esperando hasta que la tarea
que acepta la llamada termine de ejecutarla
Los puntos de entrada se declaran en la especificación
En el ejemplo que se muestra a continuación una tarea
(consumidora) debe esperar a un dato que le suministra la
otra tarea (productora)
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
24/nov/08
11
Ejemplo de sincronización de
espera
UNIVERSIDAD DE CANTABRIA
task Consumidor;
task Productor is
entry Espera_Dato(El_dato : out Dato);
end Productor;
task body Consumidor is
Copia_del_dato : Dato;
begin
-- hace cosas
Productor.Espera_Dato(Copia_Del_Dato);
-- hace más cosas
end Consumidor;
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
24/nov/08
12
Ejemplo de sincronización de
espera
UNIVERSIDAD DE CANTABRIA
task body Productor is
Dato_Producido : Dato;
begin
-- calcula valor de Dato_Producido
accept Espera_Dato (El_Dato : out Dato)
do
El_Dato:=Dato_Producido;
end Espera_Dato;
-- hace más cosas
end Productor;
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
24/nov/08
13
9.3. Sincronización de datos
UNIVERSIDAD DE CANTABRIA
La sincronización de datos, para compartir información de
manera mutuamente exclusiva, se realiza mediante objetos
protegidos
El objeto protegido tiene una especificación con:
• parte visible: tiene funciones, procedimientos y puntos de
entrada
• parte privada: contiene los datos protegidos
Con las funciones y procedimientos se garantiza un acceso
mutuamente exclusivo a la información protegida.
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
24/nov/08
14
Ejemplo de sincronización de
datos
UNIVERSIDAD DE CANTABRIA
type Coordenadas is record
X,Y,Z : Float;
end record;
protected Datos_Avion is
function Posicion return Coordenadas;
procedure Cambia_Posicion (La_Posicion : Coordenadas);
private
Posicion_Avion : Coordenadas;
end Datos_Avion;
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
24/nov/08
15
Ejemplo de sincronización de
datos
UNIVERSIDAD DE CANTABRIA
protected body Datos_Avion is
function Posicion return Coordenadas is
begin
return Posicion_Avion;
end Posicion;
procedure Cambia_Posicion (La_Posicion : Coordenadas) is
begin
Posicion_Avion:=La_Posicion;
end Cambia_Posicion;
end Datos_Avion;
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
24/nov/08
16
Puntos de entrada en objetos
protegidos
UNIVERSIDAD DE CANTABRIA
Los puntos de entrada proporcionan la misma protección que
los procedimientos protegidos, pero además:
• permiten a una tarea esperar, hasta que se cumpla una
determinada condición
• la evaluación de esta condición también está protegida
El ejemplo que se muestra a continuación implementa una
cola con datos:
• utiliza el tipo abstracto de datos “Cola”
• las operaciones de la cola (Insertar, Extraer, etc.) están
protegidas
• la operación de Extraer hace que la tarea espere hasta que
haya datos disponibles
GRUPO DE COMPUTADORES Y TIEMPO REAL
FACULTAD DE CIENCIAS
© Javier Gutiérrez, Michael González
24/nov/08
17
Notas:
UNIVERSIDAD DE CANTABRIA
La sincronización de datos es necesaria para garantizar que la modificación o lectura de datos
compuestos es consistente. Si por ejemplo una tarea está modificando un dato compuesto, y cuando
sólo ha modificado una parte es interrumpida por otra tarea, esta segunda puede leer un dato
inconsistente.
La solución es la sincronización para acceso mutuamente excl
Comentarios de: Parte I: Programación en Ada - 9. Programación concurrente y de tiempo real (0)
No hay comentarios