Programación Concurrente y distribuida

Anuncio
Working Hypothesis
Programación Concurrente y distribuida
Camilo Rueda
1 Universidad
1
Javeriana-Cali
1 de febrero de 2008
Working Hypothesis
Oz
Propósito
La programación como disciplina de ingenierı́a
Existe una teorı́a
Los que practican la disciplina usan la teorı́a para predecir el
resultado de sus acciones
La teorı́a usa conceptos cercanos a la práctica de la profesión
Ejemplo: Ingenierı́a civil
Teorı́a: estática, dinámica, resistencia de materiales
Permiten chequear el diseño de un puente y optimizarlo
Permiten entender el diseño de un puente hecho por otra
persona
Working Hypothesis
Oz
Teorı́as en computación
Las informática empezó en las matemáticas. Varias teorı́as
entonces, derivadas de la noción de computabilidad:
Máquinas de Turing
Cálculo lambda
π-Cálculo
Muy utilizadas entre la comunidad de investigadores en Ciencias de
la computación.
Ventajas: Rigor semántico, generalidad
Desventajas: Alejadas de la práctica
Working Hypothesis
Oz
Teorı́as de programación “prácticas”
Existe alguna teorı́a de la programación para el programador?
Al menos dos:
Transformadores de predicados (Dijkstra)
Lenguaje de núcleo (“kernel”)
model checking
Working Hypothesis
Oz
El modelo de Dijkstra
Precondición:
Programa :
Invariante:
Postcondición:
P ∧ I ⇒ wp(S, R)
P : n ≥0∧z =1∧i =n
S : while i 6= 0 do z, i := z × i, i − 1 end
I : n! = z × i!
R : z = n!
Working Hypothesis
Oz
Lenguaje de núcleo
Lenguaje de programación minimal,
Turing completo
Implementable e implementado
Simple
Modular (o “incrementable”)
Realı́sticamente cercano a lenguajes existentes.
Semántica precisa.
Nombre de moda: “framework”
Working Hypothesis
Oz
El KL Oz
< st >::=
< st1 > < st2 >
local < var > in < st > end
if < var > then < st1 > else < st2 > end
case < var > of < patron > then < st1 > else < st2 > e
{< var > < arg1 > . . . < argn > }
Por qué no hay declaración de procedimientos?:
< valor >::=< numero > | < registro > | < proced >
< proced >::= proc { $ < arg1 > . . . < argn >} < st > end
Working Hypothesis
Oz
El KL Oz
< st >::=
< st1 > < st2 >
local < var > in < st > end
if < var > then < st1 > else < st2 > end
case < var > of < patron > then < st1 > else < st2 > e
{< var > < arg1 > . . . < argn > }
Por qué no hay declaración de procedimientos?
Porque son “de primera clase” (valores):
< valor >::=< numero > | < registro > | < proced >
< proced >::= proc { $ < arg1 > . . . < argn >} < st > end
Working Hypothesis
Oz
Model Cecking
Método de verificación formal de sistemas
Etapas:
Construir un modelo del sistema
Traducir el diseño a un formalismo preciso
Especificar propiedades del diseño
utilizar alguna lógica (ej. lógica temporal): cómo evoluciona el
sistema en el tiempo
verificar. Idealmente de forma automática (ProB, SMV)
Identificar los errores por la traza
Working Hypothesis
Oz
Por qué KL en el curso
Por ser dispositivo de cómputo: refuerza conceptos teóricos
viendo su realización práctica
es a la vez riguroso, simple y práctico.
Puede cubrir varios paradigmas de programación
Puede aumentarse para distintos modelos de computación:
Programación concurrente
Programación distribuida
Working Hypothesis
Oz
Por qué Model Checking en el curso
Es muy difı́cil (imposible?...) depurar a ojo los programas
concurrentes y distribuidos.
Es una metodologı́a comprobada en la práctica
Es intuitiva
Puede emplearse simplemente como herramienta
Working Hypothesis
Oz
Modelos de computación (versión PVR&SH)
Declarativo
Abstracción procedimental y recursión
Evaluación perezosa
Programación de alto orden
Lenguajes: ML ( caML)
Estado explı́cito (imperativo)
Funciones con memoria
Tipos abstractos de datos
Lenguajes: C
Concurrente declarativo o dirigido por datos (X)
Programación multi-hilos (X)
Flujos (streams) (X)
Sincronización de procesos (X)
Working Hypothesis
Oz
Modelos (2)
Concurrencia por paso de mensaje (X)
Asincronı́a (X)
Puertos (X)
Agentes (X)
Lenguajes: Earlang (X)
Orientado-objetos
Herencia
Clase, objeto
Lenguajes: Java, Eiffel, C++, et al.
Concurrencia de estado compartido (X)
Candados (X)
Monitores (X)
Transacciones (X)
Lenguajes: Java concurrente (X)
Working Hypothesis
Oz
Modelos (3)
Programación distribuida (X)
Distribucón de datos (X)
istribución de estado (X)
Patrones de programación distribuida (X)
Protocolos distribuidos (X)
Manejo de fallas (X)
aspectos de seguridad (X)
Movilidad (X ?)
Working Hypothesis
Oz
Objetivos generales
Saber diseñar programas concurrentes y distribuidos
Poder razonar formalmente sobre un programa concurrente o
distribuido
Conocer cómo verificarlos
Poder implementar un programa concurrente o distribuido
usando el lenguaje de núcleo
Working Hypothesis
Oz
Programa concurrente vs secuencial
Secuencial:
Observables: Parejas de estados iniciales y finales
i.e. Valores de las variables de entrada/salida
El cómo se llega al estado final no importa
Hay un solo camino posible al estado final
Concurrente:
Estados intermedios son tan importantes como los finales
(sincronización)
Observables:
Conjunto de variables que ocurren en un componente
Conjunto de variables con las que se comunica
Working Hypothesis
Oz
Semántica de la concurrencia
traza: una secuencia particular de transiciones atómicas
de estado
σ0 →α1 σ1 →α2 ... →αi σi →αi+1 σi+1
σi : Estados
αi : acciones atómicas
α1 α2 ... es un intercalamiento (interleaving). Corresponde a
una historia del proceso
Semántica de un programa:
conjunto de todas sus historias posibles
Working Hypothesis
Oz
Cómo razonar sobre prog. concurrentes?
Inspeccionar cada historia?
Working Hypothesis
Oz
Cómo razonar sobre prog. concurrentes?
Inspeccionar cada historia? son demasiadas!!
Working Hypothesis
Oz
Cómo razonar sobre prog. concurrentes?
Inspeccionar cada historia? son demasiadas!!
Mejor:
Representar conjuntos enteros de trazas por sus propiedades
un predicado representa un conjunto de estados
Un programa es una relación entre predicados
Working Hypothesis
Oz
Cómo involucrar sincronización?
La comunicación permite a un proceso influir sobre otro
Posibilidades:
Variables compartidas
Paso de mensajes (canales compartidos)
Esquemas de sincronización:
Exclusión mutua
Sincronización condicional
Comunicación sı́ncrona
Working Hypothesis
Oz
Ejemplo
ENVIA
BUFFER
RECIBE
Exclusión mutua entre envı́o y recepción
Sincronización condicional: Evitar que el mismo mensaje se
envı́e dos veces.
Protocolo de comunicación: sincronı́a.
Working Hypothesis
Oz
Ejemplo: Exclusión mutua
P1 ≡
P2 ≡
l0 : loop forever do
m0 : loop forever do
l1 : sección no crı́tica
m1 : sección no crı́tica
l2 : s := 1;
m2 : s := 2;
l3 : y1 := 1;
m3 : y2 := 1;
l4 : wait (y2 = 0) ∨ (s 6= 1);
m4 : wait (y1 = 0) ∨ (s 6= 2);
l5 : sección crı́tica
m5 : sección crı́tica
l6 : y1 := 0
m6 : y2 := 0
od
od
Ej1 ≡ s := 1; y1 , y2 := 0, 0; [P1 || P2 ]
funciona?
Working Hypothesis
Oz
Ejemplo: Exclusión mutua
P1 ≡
P2 ≡
l0 : loop forever do
m0 : loop forever do
l1 : sección no crı́tica
m1 : sección no crı́tica
l2 : s := 1;
m2 : s := 2;
l3 : y1 := 1;
m3 : y2 := 1;
l4 : wait (y2 = 0) ∨ (s 6= 1);
m4 : wait (y1 = 0) ∨ (s 6= 2);
l5 : sección crı́tica
m5 : sección crı́tica
l6 : y1 := 0
m6 : y2 := 0
od
od
Ej1 ≡ s := 1; y1 , y2 := 0, 0; [P1 || P2 ]
funciona?
No
Exactamente por qué?
Working Hypothesis
Oz
Ejemplo: Exclusión mutua
P1 ≡
P2 ≡
l0 : loop forever do
m0 : loop forever do
l1 : sección no crı́tica
m1 : sección no crı́tica
l2 : y1 := 1;
m2 : y2 := 1;
l3 : s := 1;
m3 : s := 2;
l4 : wait (y2 = 0) ∨ (s 6= 1);
m4 : wait (y1 = 0) ∨ (s 6= 2);
l5 : sección crı́tica
m5 : sección crı́tica
l6 : y1 := 0
m6 : y2 := 0
od
od
Ej1 ≡ s := 1; y1 , y2 := 0, 0; [P1 || P2 ]
funciona?
Working Hypothesis
Oz
Ensayar model Checking
Modelar en lenguaje riguroso (B)
Parte estática: variables con sus tipos
del sistema
s ∈ 0.,2
y 1 ∈ 0.,1
y 2 ∈ 0.,1
adicionales
sy 1 ∈ 0.,1
ss1 ∈ 0.,1
zc1 ∈ 0.,1
sy 2 ∈ 0.,1
ss1 ∈ 0.,1
zc2 ∈ 0.,1
P1
P1
P1
P2
P2
P2
ya asignó y 1
ya asignó s
en zona crı́tica
ya asignó y 2
ya asignó s
en zona crı́tica
Parte dinámica: eventos (u operaciones)
Working Hypothesis
Oz
Model Checking (2)
Parte estática: variables con sus tipos
Parte dinámica: eventos (u operaciones)
P1:
askSS1 = select ss1 = 0 ∧ zc1 = 0 then s, ss1 := 1, 1 end
askSY 1 = select ss1 = 1 ∧ zc1 = 0 then y 1, sy 1 := 1, 1 end
inZC 1 = select sy 1 = 1 ∧ (y 2 = 0 ∨ s 6= 1) then zc1 := 1 end
outZC 1 = select zc1 = 1 then y 1, zc1, sy 1, ss1 := 0, 0, 0, 0 end
P2:
askSS2 = select ss2 = 0 ∧ zc2 = 0 then s, ss2 := 2, 1 end
askSY 2 = select ss2 = 1 ∧ zc2 = 0 then y 2, sy 2 := 1, 1 end
inZC 2 = select sy 2 = 1 ∧ (y 1 = 0 ∨ s 6= 2) then zc2 := 1 end
outZC 2 = select zc2 = 1 then y 2, zc2, sy 2, ss2 := 0, 0, 0, 0 end
Working Hypothesis
Oz
Model Checking (3)
Parte estática: variables con sus tipos
Parte dinámica: eventos (u operaciones)
Especificación: propiedades del sistema
P1 y P2 no están al tiempo en zona crı́tica:
¬ (sy 1 = 1 ∧ sy 2 = 1 ∧ zc1 = 1 ∧ zc2 = 1)
Working Hypothesis
Oz
Model checking: bases
Model Checking se compone de:
Estructuras de Kripke: un autómata extendido
Estados y transiciones
los estados se etiquetan con predicados
Una lógica temporal (LTL, CTL)
La lógica expresa propiedades de caminos en el autómata de Kripke
Working Hypothesis
Oz
Estructuras de Kripke
M =< S, S0 , R, L >
S: conjunto finito de estados
S0 ⊆ S: conjunto de estados iniciales
R ⊆ S × S: relación (total) de transición entre estados
L: S → 2PA : función de etiquetamiento
(PA: proposiciones atómicas)
camino en M, desde estado s:
π = s0 s1 s2 . . .
s0 = s
R(Si , si+1 )se cumple para todo i ≥ 0
Working Hypothesis
Oz
Lógica temporal (CTL)
Fórmulas de estado
Proposiciones atómicas p ∈ PA
¬f , f ∨ g , f ∧ g
E f (“para algún camino, f ‘ es válido”)
A f (“para todo camino, f es válido”)
Fórmulas de camino
si f es fórmula de estado, también es fórmula de camino
¬f , f ∨ g , f ∧ g
X f (“next time”)
F f (“ eventually”)
G f (“always”)
U f (“until”)
f R g (“release”)
Working Hypothesis
Oz
Ejemplo: Exclusión mutua(2)
Pi ≡
l0 : loop forever do
l1 : sección no crı́tica
l2 : flag [i] := 1;
l3 : wait ∀j : 0 ≤ j < n ∧ j 6= i. (flag [j] = 0);
l4 : sección crı́tica
l5 : flag [i] := 0
od
mutex1 ≡ flag := 0; [P1 || P2 || ...|| Pn ]
Funciona? por qué?
Working Hypothesis
Oz
Ejemplo: Exclusión mutua(3)
Pi ≡
l0 : loop forever do
l1 : sección no crı́tica
l2 : flag [i] := 1;
l3 : wait ∀j : 0 ≤ j < n ∧ j 6= i. (flag [j] = 0 ∨ flag [j] = 1);
l4 : flag [i] := 4;
l5 : wait ∀j : 0 ≤ j < i ∧ j 6= i. (flag [j] = 0 ∨ flag [j] = 1);
l4 : sección crı́tica
l5 : flag [i] := 0
od
mutex2 ≡ flag := 0; [P1 || P2 || ...|| Pn ]
Funciona? por qué?
Working Hypothesis
Oz
tarea
Propósito: responder a las preguntas,
qué es model checking?
cómo ayuda model checking a construir programas
concurrentes robustos?
Con este fin,
Lea la introducción light a model checking en la wiki del curso
Instale la herramienta ProB (no olvide leer el manual, en
especial la sintaxis de B)
modele en ProB el ejemplo de la bomba de agua (introd
“light” a model checking)
verifique las propiedades
modele en ProB los dos programas anteriores de exclusión
mutua
Verifique con la herramienta si son o no correctos
Si no son correctos, con ayuda de la herramienta encuentre y
corrija el problema. Luego verifique de nuevo.
Asegurar conocimientos básicos de Mozat: leer libro PVR, cap
2 (hasta 2.7 inclusive)
Working Hypothesis
Primeros programas en Oz
(archivo primeros.oz)
Oz
Working Hypothesis
Oz
Cómo pensar un Sistema concurrente?
En un sistema concurrente: algo pasa coordinadamente en el
tiempo.
Cómo se da uno cuenta del paso del tiempo?
Qué cambia?
Qué causa el cambio?
El mundo es:
Working Hypothesis
Oz
Cómo pensar un Sistema concurrente?
En un sistema concurrente: algo pasa coordinadamente en el
tiempo.
Cómo se da uno cuenta del paso del tiempo?
Observa cambios.
Qué cambia?
Qué causa el cambio?
El mundo es:
Working Hypothesis
Oz
Cómo pensar un Sistema concurrente?
En un sistema concurrente: algo pasa coordinadamente en el
tiempo.
Cómo se da uno cuenta del paso del tiempo?
Observa cambios.
Qué cambia?
Mi información sobre el sistema
Qué causa el cambio?
El mundo es:
Working Hypothesis
Oz
Cómo pensar un Sistema concurrente?
En un sistema concurrente: algo pasa coordinadamente en el
tiempo.
Cómo se da uno cuenta del paso del tiempo?
Observa cambios.
Qué cambia?
Qué causa el cambio?
Un evento
El mundo es:
Working Hypothesis
Oz
Cómo pensar un Sistema concurrente?
En un sistema concurrente: algo pasa coordinadamente en el
tiempo.
Cómo se da uno cuenta del paso del tiempo?
Observa cambios.
Qué cambia?
Qué causa el cambio?
El mundo es:
Objetos
Eventos
Estado:
mi información sobre el hidtorial de eventos
Working Hypothesis
Oz
Diseñar un sistema concurrente (o no)
Diferenciar entre
Modelar:
Construir un sistema con el objeto de probar sus propiedades
Implementar:
Construir un sistema para simular u observar comportamiento
La clave:
Cómo establecer una relación precisa entre ambos
Working Hypothesis
Oz
Metodologı́a de diseño
Construı́r uno (o varios) modelos
Usar lenguaje matemático (model checking) para razonar
sobre propiedades
Construir refinamientos del modelo
Establecer criterios para probar coherencia entre ambos
Working Hypothesis
Oz
Cómo diseñar?
Paradigma del paracaidas:
Primero ubicarse mentalmente muy por encima del sistema y
observar:
Objetos (personas, buses, canales, mensajes)
Eventos: Movimientos de personas, buses, etc
Representar los anteriores en un formalismo (modelar)
Inferir una propiedad que determina la coherencia de lo que se
observa:
Un invariante del sistema
Asegurarse de que la evolución del sistema mantiene el
invariante
Comprobar que los eventos no se bloquean ( deadlock)
Comprobar justicia ( fairness) en ejecución de eventos
Working Hypothesis
Oz
Cómo diseñar: dificultades
Probar propiedades puede ser muy dispendioso
Pueden cometerse errores en las pruebas!
Puede no haber tiempo para hacerlas (restricciones del
mercado)
La metodologı́a exige el uso de herramientas computacionales
Working Hypothesis
Oz
Guı́a
Empezar con un modelo simple, muy abstracto
(estados+eventos)
Usar MC para probar formalmente las propiedades
Volverlo más preciso: Refinar
Repetir 2,3, si necesario
Introducir control y comunicación
Descomponer (o componer), si necesario
Repetir 2,3,4,5
Working Hypothesis
Oz
Un formalismo: Eventos
xxx=
ANY x, y , z, ... WHERE
P(x, y , ..., v , w , ...)
THEN
S(x, y , ..., v , w , ...)
END
Cuando existen valores de (x, y , ...) tales que P(x, y , ..., v , w , ...)
entonces Nuevo estado es S(x, y , ..., v , w , ...)
Working Hypothesis
Oz
Eventos (2)
xxx=
SELECT
P(v , w , ...)
THEN
S(v , w , ...)
END
Cuando P(v , w , ...) es cierto, el nuevo estado es S(v , w , ...)
S es de la forma a, b, ... := E , F , ...
En ProB los eventos se llaman operaciones
Descargar