lenguajes de programación para sistemas de cómputo distribuido sistemas distribuidos 2007-1
TRANSCRIPT
Lenguajes de Programación para Sistemas de Cómputo Distribuido
Sistemas Distribuidos
2007-1
Agenda
• Introducción• Sistemas de Computo Distribuidos
– Clases de Aplicaciones Distribuidas– Requerimientos para soportar Programación Distribuida– Lenguajes para Programación Distribuida
• Lenguaje para programar sistemas distribuidos– Paralelismo– Comunicación entre procesos y Sincronización– Fallas Parciales
• Conclusiones• Bibliografía
Introducción
• ¿Cuáles son las características para aplicaciones distribuidas?– P– C– MFP
• ¿Quién debería dar esas características para crear aplicaciones distribuidas?
Sistemas de Computo Distribuido
• MIMD : Multiprocesadoras vs. Multicomputadoras.
• ¿Qué es un S.D.?• Fuertemente acoplados y débilmente
acoplados.– ¿Todas las multiprocesadores son
fuertemente acopladas?– ¿ Todas las multicomputadoras son
débilmente acopladas?
Sistemas de Computo Distribuido(Clases de Aplicaciones Distribuidas)
• ¿Cuáles son las razones para programar aplicaciones en sistemas distribuidos?– D…Tmp.– > C. y >D.– Esp. Funcional.– D. Inh.
Sistemas de Computo Distribuido(Clases de Aplicaciones Distribuidas)
• Paralelismo, Aplicaciones con gran desempeño.– ¿Qué es la granularidad?– ¿En qué consiste la granularidad grande y en
qué la granularidad pequeña?– La granularidad pequeña es ideal para
sistemas:• ¿Fuertemente acoplados?• ¿Débilmente acoplados?
Sistemas de Computo Distribuido(Clases de Aplicaciones Distribuidas)
• Paralelismo, Aplicaciones con gran desempeño.– La granularidad grande (S.O.) es ideal para
sistemas:• ¿Fuertemente acoplados?• ¿Débilmente acoplados?
• Aplicaciones tolerante a fallas– ¿Por qué un S.D. puede ser más fácilmente
tolerante a fallas que un S.C. o un P.C?
Sistemas de Computo Distribuido(Clases de Aplicaciones Distribuidas)
• Aplicaciones tolerante a fallas– Para que una aplicación sea tolerante a fallos
debería ser un Sistema:• ¿Bajo o Alto acoplamiento?• ¿Granularidad grande o pequeña?
• Especialización funcional – ¿Qué es?– ¿ Núcleo monolítico o núcleo micronúcleo?
• Aplicaciones con distribución inherente
Sistemas de Computo Distribuido(Requerimientos para soportar Programación Distribuida)
• Básicamente son 3 requerimientos que distinguen la programación distribuida de la secuencial, y son:– El uso de múltiples procesadores– La cooperación de los procesadores– El gran potencial de fallas parciales
• ¿Quién suple los requerimientos?– S.O.– L.P.
Sistemas de Computo Distribuido(Requerimientos para soportar Programación Distribuida)
¿Quién suple los requerimientos?– S.O. + L.S.– L.P.D.
• Un S.O. + L.S– (-) Un S.O. no conoce estructuras de datos complejas – (+) Eficiencia en algunas tareas
• Un L.P.D– (+) Un modelo de programación de alto nivel
Sistemas de Computo Distribuido(Lenguajes para Programación Distribuida)
• ¿Qué lenguaje debe utilizarse para x aplicación?
- ¿ Lenguaje adecuado para la aplicación?
- ¿ El lenguaje puede ser implementado con razonable eficiencia con el HW dado?
• Distribución lógica y distribución física.– D.F.: Multicomputadoras vs. Multiprocesadoras.– D.L.: Cómo es la comunicación: P.M. vs. M.C.
• Algunas aplicaciones necesitan más énfasis en un requerimiento que en otro.
Lenguaje para programar sistemas distribuidos
(Paralelismo)• Qué es verdadero paralelismo vs. Pseudo-
paralelismo.
• ¿Es ideal ocultar el paralelismo al programador?– En pseudo-paralelismo usar M.C.
• ¿En todas las aplicaciones el paralelismo es importante?
Lenguaje para programar sistemas distribuidos
(Paralelismo)• Expresión del paralelismo:
– Proceso– Objeto– Sentencia– Expresión– Claúsula
Lenguaje para programar sistemas distribuidos
(Paralelismo)• Proceso
– ¿Qué es? (Propio estado y datos)– ¿Qué tipos de creación existen?
• I: Declaración de variables de tipo proceso – Mapeo más eficiente
• E: Uso de constructoras – Más flexible
Lenguaje para programar sistemas distribuidos
(Paralelismo)• Objeto
– Características• Encapsula comportamiento y datos• Uso exclusivo de mensajes para la comunicación.• Herencia
– Paralelismo:• Modelo de objetos activos• Lenguajes O.O. secuenciales se basan en el
modelo de objetos pasivos.
Lenguaje para programar sistemas distribuidos
(Paralelismo)• Objeto
– Modelo de objetos pasivo (Cómo es su funcionamiento?)
– ¿Cómo se obtiene el paralelismo?• (1) Permitir que un objeto se active sin
previamente recibir un mensaje• (2) Permitir que el objeto siga ejecutándose
después de recibir un mensaje• (3) Enviar mensajes a varios objetos• (4) Permitir en paralelo recibir y enviar mensajes
Lenguaje para programar sistemas distribuidos
(Paralelismo)• El (1) y (2) efectivamente se asignan a un
proceso paralalelo para cada objeto = modelo de objetos activo.
• El (3) y (4) se implementa usando paso de mensajes asincrónico ó usando múltiples hilos de ejecución
Lenguaje para programar sistemas distribuidos
(Paralelismo)• Paralelismo funcional.
– Lenguajes funcionales (Funciones matemáticas)
• Solo depende de los datos de entrada
– Lenguajes procedimentales (imperativos)• Las funciones pueden afectar a otras de varias
formas:– Variables globales– Apuntadores
Lenguaje para programar sistemas distribuidos
(Paralelismo)• Paralelismo funcional.
– Lenguajes funcionales:• No existen efectos de borde• Ejemplo : h ( f(3,4), g(8))• Problemas: Es importante el tamaño del grano,
puede ser más costo partir en unidades de poco consumo de procesamiento que comunicarse (alto costo de comunicación)
Lenguaje para programar sistemas distribuidos
(Paralelismo)• Paralelismo Lógico (Claúsulas – AND/OR).
– Los programas lógicos pueden ser declarativos como procedimentales.
– Ejemplo:• (1) A :- B,C,D• (2) A:- E,F• Lectura declarativa: Sí B,C y D es verdad entonces A es
verdad, y sí….• Lectura procedimental: Para probar el teorema A entonces
se deben probar los subteoremas ……
Lenguaje para programar sistemas distribuidos
(Paralelismo)• Paralelismo lógico.
– Ejemplo : h ( f(3,4), g(8)• Lectura procedimental:
– Oportunidades de paralelismo» (1) Las dos claúsulas pueden ser invocadas en paralelo (Hasta
que una tenga éxito o ambas fallen)» (2) Por cada una de las dos claúsulas, los subtoremas pueden
trabajar en paralelo, hasta que todos tengan éxito o hasta que uno falle
– + Lectura (procesos)• Para probar A, debe ser reemplazado probando tres procesos B,C y
D– Si la claúsula comparte variables estás no pueden evaluadas
independientemente ( Conflictos)• A:- B(X), C(X?)• Solución: Restringir el acceso a las variables compartidas
Lenguaje para programar sistemas distribuidos
(Mapeo)• ¿Qué es el mapeo?• El mapeo debe variar si lo que se busca
es:– Mejorar el tmp de respuesta– Disponibilidad.
• Si el criterio es mejorar el tmp.– Balanceo de carga (S.O)– Pero con la gran diferencia que las unidades
de paralelismo deben cooperar.
Lenguaje para programar sistemas distribuidos
(Mapeo)• Si el criterio es mejorar la disponibilidad.
– Mapear en diferentes procesadores, no es aceptable el pseudo-paralelismo.
• ¿ Es mejor que el mapeo sea transparente al programador ?
• Pasos del mapeo elaborado por el programador:– Las unidades son mapeadas en los procesadores– Las unidades en el mismo procesador pueden ser
asignadas por prioridades
Lenguaje para programar sistemas distribuidos
(Mapeo)• En los tres acercamientos para asignar las
unidades de paralelismo al procesador se tienen:– Tiempo de compilación (- Flexible pero
pueden compartir variables como medio de comunicación)
– Tiempo de ejecución– Tiempo de vida
Agenda
• Introducción• Sistemas de Computo Distribuidos• Lenguaje para programar sistemas distribuidos
– Paralelismo– Comunicación entre procesos y Sincronización– Fallas Parciales
• Conclusiones• Bibliografía
Comunicación entre procesos y sincronización
Introducción• ¿Cómo las piezas de un programa que se ejecutan en
paralelo cooperaran? (CeP y S)• ¿La cooperación que tipo de interacción involucra?
• C• S
• Ejemplo: Proceso A y proceso B.Proceso A requiere un dato X que provee el proceso B.
• Se debe proveer una forma para que A obtenga el dato X de B.• Si B no tiene el dato X listo, se debe tener la capacidad para
esperar.• Comunicación y sincronización términos estrechamente
relacionados.
Comunicación entre procesos y sincronización
Introducción
• Un tema relacionado con la sincronización es no-determinismo.– ¿Qué es?: Comportamiento– Ejemplo:
• 2 procesos: Proceso buffer y proceso productor.• Proceso buffer puede aceptar una solicitud desde
un proceso productor para almacenar un ítem (siempre y cuando el buffer no este lleno).
• Es necesario una notación para expresar y controlar el no-determinismo.
Comunicación entre procesos y sincronización
Introducción
• ¿Cuales son las dos categorías para la comunicación entre procesos (IPC)? DC y PM.
• ¿Si no se comparte memoria física entre los diferentes sistemas autónomos, cualquier modelo de datos compartidos de qué forma se implementa?
Comunicación entre procesos y sincronización
Paso de mensajes
• ¿Qué factores pueden influir en el Paso de mensajes?:– ¿Quién envía?– ¿Qué se envía?– ¿A quién se le envía?– ¿Se garantiza la recepción del mensaje?– ¿Cómo se manejan los reenvíos?– ¿Qué paso cuándo algo esta mal?– ¿Qué pasa si el proceso receptor esta ocupado (cola
de mensajes o se descarta)?
Comunicación entre procesos y sincronización
Paso de mensajes
• ¿Qué modelos existen para especificar el paso de mensajes?– M: P-a-P– R– RPC– M: U-V
Comunicación entre procesos y sincronización
Paso de mensajes
• Mensajes punto-a-punto– ¿Qué es? (E-R)– Lenguajes ofrecen transparentemente
confiabilidad (S.O.)– ¿Qué clases de interacción existen? – Clases:
• E (accept statement)• I (Thread)
Comunicación entre procesos y sincronización
Paso de mensajes
• Mensajes punto-a-punto– Si el trato es E o I, esto es transparente al
emisor.– Explicito:
• Más control al receptor• Diferentes estados y diferentes tipos de mensajes
por cada estado.• Aceptar mensajes condicionándolos (Parámetros)• Ejemplo. Un archivo: abrir el archivo solo si no
esta bloqueado.
Comunicación entre procesos y sincronización
Paso de mensajes• Mensajes punto-a-punto
– Explicito:• Ejemplo (Concurrent C):
Accpet open(f) suchthat not_locked(f) {…………….
process open request…………….
}• Algunos lenguajes dan control sobre la forma de aceptar mensajes ( FIFO,
preferencias (tipo, emisor o contenido))– Ejemplo:
» El servidor de archivos puede manejar las lecturas para cantidades de datos pequeñas
Accept read(f, offset,nr_bytes) by nr_bytes {…………..process read request…………..
}
Comunicación entre procesos y sincronización
Paso de mensajes
• (B) Otro tema de importancia en el paso de mensajes es el nombramiento ( o direccionamiento) de las partes involucradas en la interacción.– ¿En qué consiste?– ¿En qué formas se pueden nombrar? D-I– Formas:
• D (static name).– simétrico: cada uno conoce el nombre del otro.
– Asimétrico: solo el emisor nombra al receptor.
• I (Objeto intermedio –mailbox)
Comunicación entre procesos y sincronización
Paso de mensajes• Mensajes punto-apunto sincrónicos y
asincrónicos.– Tema importante decidir cuando se utiliza este
modelo.– Sincrónico: El emisor es bloqueado hasta que el
receptor acepta el mensaje (Exp./Impl.)– Asincrónico: El emisor no espera hasta que el
receptor acepte el mensaje.• Problemas?:
– Buffer overflow» Descarta. (Menos confiable)» Control de flujo. (abrazo mortal)
Comunicación entre procesos y sincronización
Paso de mensajes
• Mensajes punto-apunto sincrónicos y asincrónicos.– Modelo sincrónico:
• Desventajas? –Flex.
Comunicación entre procesos y sincronización
Paso de mensajes
• Rendezvous.– Modelo en ambos sentidos.– Basa en tres conceptos
• Entry declaration: Muestra como es la es la declaración del proceso.
• Accept statement: Lista de sentencia que pueden ser ejecutadas cuando la entrada es llamada.
• Entry call: Similar a la sentencia para llamar un proceso.
Comunicación entre procesos y sincronización
Paso de mensajes• Rendezvous.
– Ejemplo (Terminología ADA): accept incr(X:integer; Y: out integer)
do Y: X+1;end;
– Interacción (Pasos)• 1. S llama una entrada de R• 2. R ejecuta una sentencia accept para la entrada
– Interacción muy sincronizada– Interacción sincronizada
• Después que R ejecuta la sentencia do, S y R continúan la ejecución en paralelo.
Comunicación entre procesos y sincronización
Paso de mensajes
• Remote Procedure Call (RPC)– Comunicación en dos vías– Manejo es…como un llamado normal de
proceso, excepto que el emisor y el receptor son procesos distintos.
– Durante la ejecución P y S son bloqueados.– S se reactiva con la llegada de parámetros de
salida.– != Rendezvous que no bloquea el emisor tan
pronto se ejecuta la sentencia accept.
Comunicación entre procesos y sincronización
Paso de mensajes
• Remote Procedure Call (RPC)– RPC es fulmente sincronizado.– La aceptación de un proceso remoto es
USUALMENTE implícito y crea un thread de control con el emisor.
– Importante tema de diseño esta en seleccionar entre transparente y no transparente.
• ¿En qué consiste la transparencia?
Comunicación entre procesos y sincronización
Paso de mensajes
• Remote Procedure Call (RPC)– ¿Por qué RPC no puede ser totalmente
transparente?: • NEMC• Caídas del P.: Bloqueado el (Time-outs)
– Si P no tiene efectos colaterales, pero si sí?
– La meta es hacerlo lo + transparente posible.
Comunicación entre procesos y sincronización
Paso de mensajes• Mensajes de uno-varios
– Muchas redes soportan broadcast y/o multicast– No confiable– Ventajas
• Varias comunicaciones + eficiente que varios mensajes punto-a-punto.
• Garantizar cierto orden.– Ejemplo:
• BSP (Broadcst Sequential Process) basado en CSP• CSP el mensaje es enviado a un específico proceso.• BSP enviar a todos los procesadores de una lista.
Asincrónico– Sin buffer– Con buffer
Comunicación entre procesos y sincronización
Datos compartidos
• ¿En pseudo-paralelo hay problema?
• Ventajas sobre PM– Compartir datos inmediatamente.
• Desventajas– Control de concurrencia.
• Métodos:– Estructuras de datos distribuidas– Variables lógicas compartidas
Comunicación entre procesos y sincronización
Datos compartidos
• Estructuras de datos distribuidas:– ¿Qué son? Estructuras de datos que pueden
ser manipuladas simultáneamente por múltiples procesos.
– Ejemplo : LINDA (Espacio de tuplas)– Espacio de tuplas: Memoria global (No física)
compartido por todos los procesadores de un programa.
• Elementos (Tuplas)
Comunicación entre procesos y sincronización
Datos compartidos
• Estructuras de datos distribuidas:– Espacio de tuplas:
• ¿Qué son? Secuencias ordenadas de valores• [“jones”,31,true]• Operaciones (atómicas)
– out: Adiciona una tupla al espacio– read: lee una tupla del espacio– in: lee una tupla y también la borra en el espacio.Ejemplo:
read (“jones”, var age, var maried)in (“jones), var age, var married
Comunicación entre procesos y sincronización
Datos compartidos• Estructuras de datos distribuidas:
– Ejemplo:• Si existe más de una conciencia, se seleccionada una
arbitrariamente.• SI no existe se bloquea hasta que otro proceso adicione la
tupla.• Para modificar una tupla primero debe ser removido para
después ser adicionada (Resuelve que problemas?)• Como se distribuye el espacio de tuplas entre los diferentes
procesadores:– Replicar el espacio en todos los procesadores.– Hashing– Almacenar la tupla en el procesador donde se elabora el out
Comunicación entre procesos y sincronización
Datos compartidos
• Estructuras de datos distribuidas:– Ejemplo:
• Comunicación anónima: Lee una tupla pero no le interesa que proceso la adiciono.
Comunicación entre procesos y sincronización
Datos compartidos
• Variables lógicas compartidas:– Basados en una propiedad asignación
sencilla.– Inicialmente las variables están desatadas,
pero una vez reciben un valor ellas no pueden ser cambiadas.
– Las variable pueden ser usadas como canales de comunicaciones entre procesos.
Comunicación entre procesos y sincronización
Datos compartidos
• Variables lógicas compartidas:– Ejemplo.
• goal_1(X,Y), goal_2(X,Y), goal_3(X)• Resueltas en paralelo por los procesos P1, P2 y
P3.• La variable x inicialmente “desatada”, es un canal
de comunicación entre los tres procesos.– Si cualquier proceso ata a X un valor, cualquier proceso
lo puede usar.– Bloqueo: Si Y es usada para enviar un mensaje entre P1
y P2, entonces P2 puede suspenderse hasta que P1 ata a Y.
Comunicación entre procesos y sincronización
Datos compartidos
• Variables lógicas compartidas:– Ejemplo.
– IDEA: Restringir los derechos de un proceso específico para generar ataduras a las variables.
– Ejemplo el mecanismo de restricciones son las variables de solo lectura de Concurrent Prolog.
Agenda
• Introducción• Lenguaje para programar sistemas
distribuidos– Paralelismo– Comunicación entre procesos y
Sincronización– Fallas Parciales
• Taller• Bibliografía
IPC y SExpresión y control del no-determinismo
• ¿Qué es?
• ¿Cómo se puede expresar el no determinismo (Ejemplo)?
• ¿Cómo se controla?– Select statement– Guarded Horn clause
IPC y SExpresión y control del no-determinismo
• Select Statement– ¿Qué es? Lista de G
• Guard -> statement• ¿Qué es una Guarda? Expresión Booleana que
ordena una solicitud de comunicación.– No debe haber efectos de borde– Además una guarda tiene un lugar explicito donde
llegan los mensajes.» Solicitud (Estados)
Éxito (P ok)Fallo (P no ok)Suspendido (P ok pero no envía solicitud)
IPC y SExpresión y control del no-determinismo
• Select Statement– Guarda (Estados)
Éxito (Evaluación True)Fallo (Evaluación False)Suspendido (Evaluación True pero..)
– ¿Qué es entonces el select statement?-Ejemplo (CSP):
[not full (buffer); producer? DepositItem(x) ->
add x to end of buffer[] not empty(buffer); consumer?Askfortem() ->
consumer!SendItem (frst item of buffer);remove first item from buffer
]
IPC y SExpresión y control del no-determinismo
• Select Statement– Controla el no-determinismo en la
comunicación. (Time-outs en la solicitud de la comunicación)
• Limita el tiempo en el cual un proceso espera un mensaje.
• Controlar la terminación del proceso
IPC y SExpresión y control del no-determinismo
• Guarded Horn Clauses– Lenguajes lógicos– Seleccionar la correcta cláusula.
• La semántica usa “backtracking”– Para cada punto de selección una cláusula arbitraria se analiza
y después se evalúa si se hizo una buena o mala selección.
– Pero si no se hizo el “enlazado”
» Otra solución != “backtracking” (Paralelismo OR)
1. Se busca todas las cláusulas en paralelo
2. No se permiten “enlazados” durante la ejecución en paralelo hasta que una de las ejecuciones en paralelo haga “commit”
IPC y SExpresión y control del no-determinismo
• Guarded Horn Clauses– Ejemplo (Paralelismo OR)
• A:- G1,…………,Gn | B1,………………Bm– N >= 0 y M >= 0
• La conjunción de las metas (Gi) es la llamada guarda y la conjunción de la metas Bi es el cuerpo. El operador | es un operador de conjunción.
• Una guarda no debe permitir efectos en el ambienta hasta que sea seleccionada.
• Las guardas abortadas no debe dejar efectos.• Ejemplo
– A(X) :- G(X) | B(X)– A(X) :- H(X) | C(X)– G(1) :- P(1)– H(2) :- Q(2)
» LA guarda G de la primera cláusula enlaza x en 1 y llama a P, la segunda enlaza x a 2 y llama a Q. Peor estos enlazados no debe ser visibles hasta que en A una de las gurdas G ó H sea “commit”
Fallas parciales
• Introducción– V (2): Confiabilidad y Disponibilidad.– El principio de replicación sirve para…– ¿Qué es un sistema tolerante a fallos?– ¿De quien puede ser la responsabilidad?
• L• S.O.• Programador
Fallas parciales
• Programación Tolerante a fallos– Acercamientos:
• Ignorarlo (Falla tanto un procesador?, es crítico una falla?)
• Programador haga algo.– ¿Cómo se detecta?
» Si no existen efectos de borde (No se tienen problemas). Se repite.
» Si existen efectos de borde, entonces es muy importante verificar que efecto de repetir.
Fallas parciales
• Programación Tolerante a fallos– Acercamientos:
– Si existen efectos de borde, entonces es muy importante verificar que efecto de repetir.
» Exactamente una vez (si no se cae E/R)
» Si se cae E y R y se repite hasta que alguna vez tenga éxito. El resultado es el de: Semántica de al menos uno.
» Pero si existen más procesos involucrados (huérfanos). Pariente murió.
….Para mantener la semántica de al menos uno los huérfanos deben morir antes de volver a empezar. El último de varios es e nombre semántico cuando quedan huerfanos.
Fallas parciales
• Programación Tolerante a fallos– Acercamientos:
– Concepto de “Transacciones”
Fallas parciales
• Transacciones atómicas– Grupo de operaciones debe ser indivisible y
recuperable.– ¿Cuándo una transacción es indivisible?– ¿Cuándo es recuperable?– Recuperable (Técnicas)
• No aplicar cambios a los objetos originales(copias)
– Indivisible• Ejecución secuencial
Fallas parciales
• Transparencia– Tolerancia a fallos en un sistema de paso de
mensajes, como sería?• Tener procesos inactivos de backup.• Periódicamente se sincronizan.• Otra técnica (Recuperación optimista)
– Puntos de chequeo periódicos.– Uso de almacenamiento estable.
Bibliografía
• Programming Languages for Distributed Computing Systems Bal, Steiner, Tanenbaum)