Sobre la programación concurrente [1em] Lecturas recomendadas

Transcripción

Sobre la programación concurrente [1em] Lecturas recomendadas
Concurrencia
¿Qué es la programación concurrente?
Procesos / tareas con control independientemente programable
Puede ser necesaria
Sobre la programación concurrente
I
Lecturas recomendadas:
G. Andrews, introducción parte 1
Ben-Ari, secciones 2.1 y 2.3
A. Burns, A. Wellings, capı́tulo 2 (hasta 2.4)
Andrews & Schneider, todo el artı́culo
I
Sincronización entre las tareas
Comunicación de datos / creación de estructuras de datos
Distinguir programa de tarea:
Un programa, varias tareas
P
Metáfora: varios trabajadores
construyen una pared.
Manuel Carro
I
Universidad Politécnica de Madrid
T5
T1
T2
T3
T4
¿Cuándo y cómo se produce la
sincronización en este caso?
T6
Tarea vs. Proceso
Este texto se distribuye bajo los términos de la Creative Commons License
M. Carro (UPM)
Sobre la programación concurrente
1 / 16
M. Carro (UPM)
Concurrencia
La programación concurrente es...
Difı́cil:
Navegador web accede una página mientras atiende al usuario
I
Varios navegadores acceden a la misma página
I
I
Acceso a disco mientras otras aplicaciones siguen funcionando
Interacción de tareas, comunicación de datos
Intuitivamente, muchos más estados
¿Cuántos estados tienen los siguientes fragmentos de programa?
X
X
Y
X
El teléfono avisa de recepción de llamada mientras se habla
Varios usuarios conectados a un mismo sistema
Fase eliminatoria de 50 por 15
:=
:=
:=
:=
2; Y := 3;
X + Y;
X − Y;
X − Y;
while True loop
null ;
end loop ;
Útil:
I
I
I
I
Sobre la programación concurrente
2 / 16
Concurrencia
¿Dónde está la concurrencia?
M. Carro (UPM)
Sobre la programación concurrente
3 / 16
Permite funcionamiento determinados programas: sistemas
inherentemente concurrentes con llamadas bloqueantes
Optimiza uso CPU: detener un proceso mientras se espera por un dato
(bio.adb) → evitar espera activa
Simula simultaneidad (time sharing)
Simplifica muchos diseños
M. Carro (UPM)
Sobre la programación concurrente
4 / 16
Interacción y ejecuciones
Interacción y ejecuciones
Tareas e interacción entre las mismas
Ejemplo de interacción
Tarea: hilo de ejecución (y realización de instrucciones)
independiente
(¿Cómo harı́amos programas para un ordenador
moderno si tuviesen que tener en cuenta qué otros
programas están ejecutándose en un momento dado?)
Comunicación: a través de
datos compartidos en memoria (multiprocesadores)
datos enviados explı́citamente
(multicomputadores, sistemas distribuidos, Internet)
Código fuente
−→
X := X + X;
Código compilado
(a) Load MemPos1, Accum
(b) Add MemPos1, Accum
(c) Sto Accum, MemPos1
T1 , T2 mismo código
Memoria compartida
(MemPos1)
Objetivo: coordinación tareas, coherencia datos, cooperación hacia un
fin
T
Accum privado a cada tarea
(task switching / registro del
procesador)
T1
T2
T
Inicialmente X = 1
Objetivo: X = 4
Instrucciones indivisibles (atómicas)
M. Carro (UPM)
Sobre la programación concurrente
5 / 16
M. Carro (UPM)
Interacción y ejecuciones
Sobre la programación concurrente
6 / 16
Propiedades
Posibles ejecuciones
Atomicidad y serializabilidad
Básicas para razonar sobre ejecuciones concurrentes
Código fuente
X := X + X;
−→
Código compilado
(a) Load MemPos1, Accum
(b) Add MemPos1, Accum
(c) Sto Accum, MemPos1
Acción atómica: desarrollada sin interferencia de otras tareas / procesos
(ej., cada una de las instrucciones en ensamblador del caso
anterior)
¿Cuáles son los resultados de las siguientes ejecuciones?
1
2
3
Serializabilidad: ejecución concurrente equivalente a algún entrelazado de
acciones atómicas
(ej., cada una de las ejecuciones del caso anterior)
T1 : a; T1 : b; T1 : c; T2 : a; T2 : b; T2 : c
T1 : a; T2 : a; T1 : b; T2 : b; T1 : c; T2 : c
T1 : a; T2 : a; T1 : b; T1 : c; T2 : b; T2 : c
¿Cuántas ejecuciones diferentes hay? ¿Cuántas son correctas?
No confiar en una planificación determinada
Para encontrar errores (en principio): buscar ejecuciones incorrectas
Intentaremos expresar qué ejecuciones son correctas
M. Carro (UPM)
Sobre la programación concurrente
7 / 16
Nos servirán para estudiar las propiedades de los programas
concurrentes
M. Carro (UPM)
Sobre la programación concurrente
8 / 16
Propiedades
Propiedades
Propiedades de un programa concurrente
Propiedades de seguridad
Sirven para analizar comportamientos
Caracterización comportamiento: más complicado que en el caso
secuencial
A menudo (pero no siempre):
I
I
I
Deben cumplirse en todo momento
A menudo expresan cosas que no queremos que ocurran:
Tiempo (absoluto) o complejidad no importante
Resultados finales no existentes
¡Terminación no esencial!
Nunca debe cumplirse P
¬∃tP(t) (t ≡ tiempo)
←→
Siempre debe cumplirse ¬P
∀t¬P(t)
¿Qué es relevante?
I
I
Corrección de los resultados parciales
Existencia de resultados deseados
Es decir, evitan situaciones indeseables
−→ No se entra en ningún estado inconsistente / incorrecto
−→ No se produce ningún dato erróneo (siempre es verdad que no se
produce un dato erróneo o todo dato producido es correcto)
Tres tipos de propiedades:
I
I
I
Seguridad: propiedades que deseamos que siempre se cumplan
Vivacidad: propiedades que deseamos que se cumplan en algún
momento
Prioridad
M. Carro (UPM)
También llamadas estáticas: no dependen de la historia anterior
Corrección parcial: siempre que el proceso termine, su estado final es
correcto
Sobre la programación concurrente
9 / 16
M. Carro (UPM)
Propiedades
Propiedades de prioridad
Si algo debe ocurrir, garantizamos que ocurrirá en algún momento
A menudo: en algún momento se entra en un estado deseable, o en
algún momento se produce un dato necesario
T2
loop
X := X + 1;
end loop;
loop
if X mod 2 = 0 then Put(X); end if;
end loop;
10 / 16
Propiedades
Propiedades de vivacidad
T1
Sobre la programación concurrente
Relacionadas con vivacidad
De manera explı́cita, unas tareas puede tener más derecho a
ejecutarse que otras
Diferentes prioridades pueden dar inanición
Pero a veces esto es lo requerido
Propiedades vivacidad/prioridad
¿Cómo garantizar que en algún momento se imprime un número?
¡No confiar en planificación del S.O. o del lenguaje!
Propiedades de vivacidad: corrección total (incluye terminación)
Inanición: procesos conspiran para que otro no progrese
M. Carro (UPM)
Sobre la programación concurrente
11 / 16
M. Carro (UPM)
Sobre la programación concurrente
12 / 16
Propiedades
Representación gráfica
Hacia la corrección
Representación de procesos y datos
Asegurar (buenas) propiedades de seguridad/vivacidad/prioridad
Tareas sin comunicación: poco interesante
Nunca suponer una planificación favorable
Interacción entre procesos mediante comunicación datos
Prueba de corrección difı́cil: no determinismo
Diagrama de procesos y flujo de datos: esquematiza interacción
mediante comunicación datos
Depuración convencional inadecuada: intromisión en planificación
Datos fluyen entre procesos
Imprimir mensajes para ver qué pasa puede ser mejor (pero también
afecta planificación)
¿Cómo llegar a corrección?
I
I
Análisis cuidadoso de condiciones de concurrencia
Implementación sistemática de estas condiciones
Info.
adicional
Natural — pero no la única representación
M. Carro (UPM)
Sobre la programación concurrente
13 / 16
M. Carro (UPM)
Sobre la programación concurrente
Representación gráfica
14 / 16
Representación gráfica
Procesos y recursos
Transformación entre esquemas
Esquematiza interacción tareas concurrentes
Procesos: acceden a recursos compartidos
Similar (¡pero sólo similar!) a un TAD
Recursos:
I
I
I
estado,
operaciones sobre estado,
condiciones sincronización
P1
Recurso
P2
Recurso
P1
P2
Op A
P3
P3
Op B
Estado
Op C
Info.
adicional
M. Carro (UPM)
Sobre la programación concurrente
15 / 16
Info.
adicional
M. Carro (UPM)
Sobre la programación concurrente
16 / 16

Documentos relacionados

“Simultaneidad” + Sincronización

“Simultaneidad” + Sincronización Distinguir programa de tarea: Un programa, varias tareas Metáfora: varios trabajadores construyen una pared. I

Más detalles