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