Sockets, MPI y Memoria Compartida en Sistemas Distribuidos
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 8,06 KB
T7 Socket: ¿Para qué sirven?
Un socket es un hilo existente en el nodo cliente (que inicia la conexión) y servidor que permite que los datos se transfieran hacia el proceso involucrado en la comunicación desde la tarjeta de red. Sirven para transferir información entre el cliente y el servidor.
MPI:
Es un modelo de comunicación donde diferentes procesos se pueden comunicar de manera explícita a través de la red de comunicaciones en la arquitectura, siendo el paso de mensajes mediante primitivas de envío y recepción de mensajes. Es un estándar de facto en librerías de paso de mensajes (C, C++ y Fortran). Ejemplos de versiones: MPICH, STAMPI
Estas Librerías tienen varios tipos de Primitivas:
- F. para gestión del entorno MPI: MPI_init, MPI_Size, MPI_rank, MPI_Finalize
- F. de comunicación punto a punto bloqueantes: MPI_Send y MPI_Recv
- F. de comunicación punto a punto no bloqueante: MPI_Isend y MPI_Irecv
- F. de comunicación colectivas: todas las bloqueantes: broadcast, scatter, gather, reduction
- F. para gestión y definición de tipos de datos.
El comunicador define grupos de tareas MPI_COMM_WORLD.
También se manejan etiquetas para clasificar temas de los mensajes MPI_ANY_TAG.
Diferencia entre Funciones Bloqueantes y no Bloqueantes:
- Las no bloqueantes permiten solapar cómputo con comunicaciones.
- Una vez invocada la función de envío o recepción se retorna al programa sin que la primitiva de comunicación se complete.
- En las funciones bloqueantes no se continúa con la comunicación hasta que el envío o recepción se complete.
T8: Detección de interbloqueos:
Existen 3 estrategias para lidiar con los interbloqueos en sistemas distribuidos:
- PREVENCIÓN: se evita el interbloqueo haciendo que cada proceso reserve o asigne todos los recursos que necesita simultáneamente. No hay esperas.
- EVITACIÓN: se asigna un recurso a un proceso solo si se comprueba en tiempo real que la asignación no provoca interbloqueo. Para saberlo se necesita snapshots del estado global.
- DETECCIÓN: Es la estrategia más utilizada, se monitoriza en tiempo real la aparición de interbloqueos. Si se detecta alguno se resuelve abortando un proceso, retirándole el permiso para que utilice el recurso. Es la más complicada pero la más eficiente, tiene 2 propiedades:
- Progreso: capacidad para detectar en tiempo real interbloqueo en el sistema.
- Seguridad: asegurar realmente que si detecta un interbloqueo.
La detección de interbloqueos trabaja con grafos llamados WFG (wait for graph).
Existen interbloqueos cuando hay un ciclo dirigido en el grafo KNOT.
Tipos de detección de interbloqueos: - Path-pushing - Edge-chasing - Por difusión - Basado en estado global.
CONCENSO:
Cuando los procesos necesitan llegar a un acuerdo sobre otro aspecto, es un problema complejo de resolver y depende de variables:
- Comunicación asíncrona
- Tipos de canales de comunicación
- Modelo de fallos
- Possibilidad de autenticar la comunicación.
T5: Construcción del espacio de memoria compartida
Page-based DSM: cualquier página del espacio de direcciones puede ubicarse en cualquiera de las memorias físicas del sistema. El DOS captura los accesos y traduce los mensajes para mover los bloques de información, trabajando con interrupciones en los procesadores. Se usan cachés para las páginas que solo se leen e invalidación para escritura.
Shared-variable DSM: No se comparte todo el espacio de direcciones de memoria, solo se marcan las direcciones y estructuras compartidas. Además, no requiere mucho trabajo del DOS permitiendo trabajar con más compiladores y librerías.
Shared-objects DSM: en el modelo anterior se depende de que el programador marque las variables y estructuras compartidas, aquí se hace una abstracción que permite que cualquier proceso pueda invocar a cualquier objeto en el espacio de objetos compartidos, independientemente de su ubicación.
Problemas que deben resolverse de la memoria compartida distribuida:
- Coherencia: resolver problemas de source - Snoopy o de directorio
- Consistencia: se resuelve mediante la definición de modelos de alto nivel.
- Sincronización: se resuelve mediante mecanismos como cerrojos, semáforos.
Modelos de consistencia:
- Modelo de consistencia estricta: la lectura de cualquier variable devuelve el valor más reciente escrito. Todos los procesadores observan que las operaciones de escritura y lectura se hacen automáticamente y secuencialmente, en el mismo orden para las operaciones. Se tiene que simular el tiempo global. Es cara.
- Modelo de consistencia secuencial: las operaciones se ordenan de manera secuencial, cualquier orden es posible pero los procesadores lo observan en el mismo en cada ejecución. Este orden tiene que cumplir una condición (operaciones locales en el orden del programa). Menos cara y no se tiene que simular el tiempo global ni se garantiza la escritura más reciente.
- Modelo de consistencia casual: no se exige orden, solo se tiene que ver en mismo orden las escrituras entre las que haya una relación casual. La implementación es igual al modelo secuencial.
- Modelo de consistencia PRAM: modelo más flexible, las escrituras se consideran concurrentes. Los procesadores observan el mismo orden las escrituras por un mismo procesador, pero no por la de diferentes. Trabaja como un buffer FIFO.
- Modelo de Slow memory: más flexible que el anterior, solo se tiene que ver en el mismo orden las escrituras lanzadas por un mismo procesador. El resto de órdenes no influye.
T4: Middleware:
Software específico que proporciona una capa a las aplicaciones distribuidas para que no tengan que lidiar con la heterogeneidad de un sistema distribuido. Facilita el desarrollo y portabilidad de aplicaciones y proporciona interoperabilidad, en ocasiones asume funciones de SO.
Enumeración de aspectos comunes de Sistemas Distribuidos:
- No existe reloj físico común
- No se comparten niveles de memoria
- Acoplamiento entre nodos
- Possible separación geográfica
- Se da heterogeneidad
- Funcionamiento autónomo y concurrente
Protocolos necesarios para un Sistema Distribuido:
- Resumen del estado global (snapshot)
- Exclusión mutua
- Detección de terminación
- Detección de interbloqueos
- Consenso
- Replicación
Filosofías de diseño de los sistemas distribuidos:
- Apenas modificar los SO locales y trabajar con ellos en red dejando toda responsabilidad de resolver problemas a un middleware.
- Proponerse SO distribuido que contenga todas las funciones necesarias (parches o modificación del kernel).
T3: Tipos de implementación en sistemas monolíticos:
- Implementación por capas: ordenadas de más cerca del hardware a más cerca del usuario/aplicaciones. En este tipo de implementación cada capa confía en la que tiene debajo, sin tener que conocerla. Su problema es el rendimiento. Ejemplo: UNIX
- Implementación basada en microkernel: se elimina del Kernel del SO lo no esencial reduciéndolo a un microkernel. Fáciles de modificar, extender y son portables. Ejemplo: Windows NT o QNX
- Implementación modular: aprovechan las propiedades de los lenguajes de programación orientada a objetos, es parecido al microkernel, pero sin paso de mensajes, aquí el kernel enlaza módulos con otros módulos. Modelos agrupados por funcionalidad sin orden (como el sistema por capas). Ejemplo: Linux