Logo Studenta

Unidad 5

Esta es una vista previa del archivo. Inicie sesión para ver el archivo original

Unidad 5: SISTEMAS DISTRIBUIDOS
Entre los años 1945 y 1985 se dio una gran revolución en los sistemas de cómputo. Al principio estos sistemas eran grandes y costosos, y por lo general operaban de manera independiente entre sí, sin posibilidad de conectarse unos con otros.
A mediados de la década de 1980 se dieron dos avances tecnológicos que comenzaron a cambiar la situación anteriormente mencionada. Uno de ellos fue el desarrollo de poderosos microprocesadores que permitían ejecutar el mismo número o más de instrucciones que una máquina de gran tamaño, pero con una dimensión mucho más reducida y un menor costo.
El segundo avance tecnológico fue la invención de las redes LAN, las cuales permiten conectar múltiples computadoras dentro de un edificio, intercambiando pequeñas cantidades de información entre sí.
El resultado de estas tecnologías consiste en que hoy día pueden implementarse de manera simple los sistemas de cómputo compuestos por un gran número de CPU conectados mediante una red de alta velocidad. A estos sistemas se les da el nombre de sistemas distribuidos.
¿QUÉ ES UN SISTEMA DISTRIBUIDO?
“Un sistema distribuido es una colección de computadoras independientes que aparecen entre los usuarios del sistema como una computadora única.”
En cuanto al hardware, puede decirse que las maquinas son autónomas. Respecto al software, los usuarios ven al sistema como una única computadora. Proporcionan acceso (controlado por el SO) a los distintos recursos del sistema (hardware y software).
En general se consideran sistemas distribuidos, en sentido amplio, a los sistemas en que:
· Existen varias CPU conectadas entre sí.
· Las distintas CPU trabajan de manera conjunta.
Distinguir entre:
· Sistemas distribuidos: no comparten memoria, están diseñados para que muchos usuarios trabajen en forma conjunta.
· Sistemas paralelos: comparten memoria, están diseñados para lograr la máxima rapidez en un único problema.
VENTAJAS DE LOS SISTEMAS DISTRIBUIDOS 
Con respecto a los Centralizados:
· Más económico. Generalmente tienen en potencia una proporción precio/desempeño mucho mejor que la de un único sistema centralizado.
· Mayor confiabilidad. Al distribuir la carga de trabajo en muchas máquinas, la falla de una de ellas no afectará a las demás.
· Crecimiento incremental. Podrían añadirse procesadores al sistema, permitiendo un desarrollo gradual según las necesidades.
· Mayor potencia de cálculo.
Con Respecto a las PC Independientes:
· Satisfacen la necesidad de muchos usuarios de compartir ciertos datos, programas y periféricos costosos.
· Mejor comunicación entre las personas.
· Mayor flexibilidad. La carga de trabajo se puede difundir entre las máquinas disponibles en la forma más eficaz según el criterio adoptado.
DESVENTAJAS DE LOS SISTEMAS DISTRIBUIDOS
El diseño, implantación y uso del SO distribuido presenta numerosos inconvenientes.
· Se deben considerar problemas de redes de comunicaciones debidos a pérdidas de mensajes, saturación en el tráfico, expansión, etc.
· La seguridad es uno de los principales problemas. Se debe garantizar la seguridad de los datos ya que es muy fácil de compartir.
· Escaso software para los sistemas distribuidos
Las ventajas superan a las desventajas, si estas últimas se administran seriamente.
CONCEPTOS DE HARDWARE
Todos los sistemas distribuidos constan de varias CPU, organizadas de diversas formas, especialmente respecto de interconectarlos y comunicarse entre sí.
Existen diversos esquemas de clasificación para los sistemas de cómputos con varias CPU. Uno de los más conocidos es la “Taxonomía de Flynn”:
Considera como características esenciales el número de flujo de instrucciones y el número de flujos de datos. La clasificación incluye equipos SISD, SIMD, MISD y MIMD.
· SISD: Un flujo de instrucciones y un flujo de datos. Poseen un único procesador.
· SIMD: Un flujo de instrucciones y varios flujos de datos. Sistemas en los que una sola instrucción se ejecuta sobre varios datos.
· MISD: Un flujo de varias instrucciones y un solo flujo de datos. No se presenta en la práctica.
· MIMD: Flujo de varias instrucciones, flujo de varios datos. Un grupo de computadoras independientes, cada una con su propio contador del programa, programa y datos. Todos los sistemas distribuidos son de este tipo.
Un avance sobre la clasificación de Flynn incluye la división de las computadoras MIMD en dos grupos:
· Multiprocesadores: poseen memoria compartida. Los distintos procesadores comparten el mismo espacio de direcciones virtuales. Fuertemente acoplados. 
· Multicomputadoras: no poseen memoria compartida. PC independientes.
Cada una de las categorías indicadas se puede clasificar según la arquitectura de la red de interconexión en:
· Esquema de bus: Existe una sola red, bus, cable u otro medio que conecta todas las máquinas.
· Esquema con conmutador: No existe una sola columna vertebral de conexión. Hay múltiples conexiones y varios patrones de conexionado.
Otro aspecto de la clasificación considera el acoplamiento entre los equipos:
· Sistemas fuertemente acoplados: Sistemas multiprocesadores. Los procesadores comparten memoria y reloj. Comunicación a través de la memoria compartida. Poco retraso al enviar un mensaje y alta velocidad en bps. Generalmente se los utiliza como sistemas paralelos.
· Sistemas débilmente acoplados: Sistemas distribuidos. Cada procesador tiene su propia memoria local y no comparten reloj. Comunicación mediante redes. El retraso de los mensajes es grande y la velocidad es baja.
Hardware de los multiprocesadores
Los multiprocesadores se pueden usar para aumentar la productividad del sistema, al ejecutar procesos sobre procesadores en paralelo, o para ganar velocidad en la aplicación, al ejecutar en paralelo algunas partes de la misma.
La forma de conexión influye sobre el ancho de banda y la saturación de la comunicación en el sistema.
1. Multiprocesadores con Base en Buses
Constan de cierto número de cpu conectadas a un bus común, junto con un módulo de memoria. Utiliza un bus compartido para conectar los procesadores y la memoria. Para leer una palabra de memoria, un cpu coloca la dirección de la palabra deseada en las líneas de direcciones del bus y coloca una señal en las líneas de control adecuadas para indicar que se desea leer. La memoria responde y coloca el valor de la palabra en las líneas de datos para permitir la lectura de esta por parte de la cpu solicitante.
Es un esquema coherente porque las modificaciones realizadas en memoria por un procesador son percibidas por todos en accesos posteriores.
Desventaja: El bus tiende a sobrecargarse y el rendimiento a disminuir drásticamente. La solución es añadir una memoria caché de alta velocidad entre cada cpu y el bus:
· El caché guarda las palabras de acceso reciente.
· Todas las solicitudes de la memoria pasan a través del caché. Si la palabra solicitada se encuentra en el caché, no se hace solicitud alguna al bus.
· Si el caché es lo bastante grande, la cantidad de tráfico en el bus por cada cpu disminuirá drásticamente y permite incrementar el número de cpu.
Problema de cachés: Incoherencia de la memoria, ya que los cambios realizados sobre un dato en caché no se guardan en la memoria. La solución sería diseñar las caché de tal forma que cuando una palabra sea escrita al caché, también sea escrita a la memoria (caché de escritura) y, además, monitorear el bus para actualizar los datos en las cachés (cachés monitores).
Un diseño con cachés monitores y de escritura es coherente e invisible para el programador, por lo que es muy utilizado en multiprocesadores basados en buses.
Otra desventaja es la Escalabilidad: limitada por el bus y la memoria compartida.
2. Multiprocesadores con conmutador
Esquema de conmutador cruceta: Se dispone de n procesadores y n memorias conectados mediante conmutadores. Se divide la memoria en módulos y se conecta cada CPU y cada módulo con un conmutador de cruce. En cada intersección esta un delgado conmutador de punto de cruce electrónico que el hardware puede abrir y cerrar.
Cuando la CPU desea acceso a una memoria particular, el conmutador del punto de cruce se cierra de manera momentánea para permitirle el acceso. Esto trae como ventaja que todas las CPU conectadas pueden tener acceso a la memoria al mismo tiempo, aunque no a la misma memoria simultáneamente.
MEMORIA
Desventaja: Con n CPU y n memorias, se necesitan n2 conmutadores, por lo que el coste es elevado y limita su escalabilidad. Además, permite un elevado grado de paralelismo entre tareas no relacionadas, pero hay problemas de contención cuando hay procesos con memoria compartida. 
Esquemas según sistemas jerárquicos: cada CPU tiene asociada cierta memoria local. El acceso será muy rápido a la propia memoria local y más lento a la memoria de las demás CPU. Este diseño da lugar a la llamada máquina NUMA (acceso no uniforme a la memoria).
3. Multicomputadoras con Base en Buses
Cada CPU tiene una conexión directa con su propia memoria local, es decir, no se comparte la memoria.
Un problema importante es la forma en que las CPU se comuniquen entre sí. El tráfico es solo entre una CPU y otra; el volumen de tráfico será menor que si se utilizara multiprocesador con base en buses.
Topológicamente es un esquema similar al del multiprocesador basado en un bus. Consiste generalmente en una colección de estaciones de trabajo en una LAN.
4. Multicomputadoras con Conmutador
Se han propuesto y construido varias redes de interconexión, pero todas tiene la propiedad de que cada CPU tiene acceso directo y exclusivo a su propia memoria particular.
Existen diversas topologías, las más comunes son la retícula y el hipercubo.
Las retículas se basan en tarjetas de circuitos impresos. Se adecuan mejor a problemas que poseen una naturaleza bidimensional inherente.
Por otra parte, un hipercubo es un cubo n-dimensional. En él, cada CPU contiene n conexiones con otros CPU. Puesto que solo se conectan con los vecinos cercanos, los mensajes realizaran varios saltos hasta llegar a destino.
Los multiprocesadores basados en bus, incluso con cachés, están limitados por la capacidad del bus (hasta 64 procesadores). Para pasar este límite, la solución ideal para sistemas grandes son las conexiones hipercubo.
CONCEPTOS DE SOFTWARE
Sistemas operativos para multiprocesadores 
Principal característica: existe sólo una cola de tareas para su ejecución.
Clases de sistemas operativos para multiprocesadores
1) Sistemas con supervisores separados
· Cada nodo tiene un sistema operativo que gestiona el procesador local, la memoria y los dispositivos de E/S como un sistema independiente, añadiéndose algunos servicios y estructuras de datos para soportar el diseño de multiprocesadores.
· No soporta bien el paralelismo. No está optimizado el reparto de carga.
· El paralelismo se logra dividiendo las tareas en subtareas.
· Las funciones a nivel de sistema completo (asignación de procesadores, planificación) se hace en un supervisor del sistema, implementado según alguna de las otras dos clases de SO.
· Ejemplos de aplicación: hipercubos.
2) Sistemas Maestro/Esclavo
· Un procesador (Maestro) ejecuta el SO, planificando todas las tareas y controlando a los esclavos y las estructuras de datos. Proporciona la mayor parte de los servicios; los esclavos sólo pueden procesar algunas consultas locales sencillas.
· Disposición adecuada para el paralelismo de tareas, pero no permite el paralelismo del SO.
· Fáciles de desarrollar. Escalabilidad limitada por tener sólo un procesador maestro.
3) Sistemas Simétricos
· Considera a todos los procesadores funcionalmente idénticos. 
· Se puede asignar cualquier tarea a cualquier procesador (incluso el propio SO, que también podrá ejecutarse de forma paralela).
· Forma sencilla de organizar el sistema: Maestro flotante. El procesador que temporalmente ejecuta el SO actúa de maestro y planifica tareas para el resto.
· Fácil de implementar a partir de sistemas monoprocesadores. 
· Se consigue paralelismo de forma fácil.
Gestión de los recursos
· Planificación de los procesadores: asignar los procesadores a los procesos y asegurar el uso eficiente de los mismos.
· Productividad del sistema: función de cómo se asignan los procesadores.
· Velocidad del sistema: depende del uso eficiente de los procesadores asignados.
· El obtener un buen rendimiento o una mayor velocidad requiere generalmente la orientación explícita del programador.
· Gestión de memoria: el SO debe tender a proporcionar un modelo unificado de la memoria, independientemente del hardware.
· Gestión de los dispositivos: no requiere tratamiento especial, ya que los sistemas multiprocesadores se dedican a aplicaciones intensivas en cálculo con escasas operaciones de E/S.
Tipos de sistemas operativos para sistemas distribuidos
La importancia del SOFTWARE supera frecuentemente a la del HARDWARE. La imagen que un sistema presenta queda determinada en gran medida por el SOFTWARE del SO. Los sistemas distribuidos proporcionan acceso a los distintos recursos de hardware y software que ofrece el sistema. El SO controla este acceso y proporciona la imagen final que ven los usuarios. 
Se puede clasificar a los SO en dos tipos:
· Débilmente acoplados.
· Fuertemente acoplados.
El software débilmente acoplado de un sistema distribuido permite que las máquinas y usuarios sean independientes entre sí en lo fundamental. Facilita que interactúen en cierto grado cuando sea necesario. Por ejemplo, un conjunto de computadoras personales, cada uno con su propio CPU, su propia memoria, disco duro y sistema operativo, pero comparten ciertos recursos como la impresora y las bases de datos en una LAN. Este sistema esta débilmente acoplado puesto que las maquinas individuales se distinguen con claridad, cada uno de los cuales tiene su propio trabajo que realizar.
Combinando los distintos tipos de HW distribuido con SW distribuido se logran distintas soluciones:
1. Sistemas Operativos de Redes
Software débilmente acoplado en hardware débilmente acoplado. Cada usuario tiene una estación de trabajo para su uso exclusivo: tienen su propio SO por lo que la mayoría de los requerimientos se resuelven localmente. Es muy utilizado en una red de estaciones de trabajo conectadas mediante una LAN.
Es posible que un usuario se conecte de manera remota con otra estación de trabajo mediante comandos. El efecto de esto es convertir la estación de trabajo en una terminal enlazada con la maquina remota. En cualquier instante solo se puede usar una máquina, y la selección de esta es manual.
Las redes de estaciones de trabajo también disponen de un comando de copiado remoto de archivos de una máquina a otra. Una mejora de esto consiste en un sistema de archivos global compartido, accesible desde todas las estaciones de trabajo. Este sistema de archivos es soportado por una o varias máquinas, llamadas servidores. Estos aceptan solicitudes para la lectura y escritura de los programas de usuarios que se ejecutan en otras máquinas. Cada una de estas se examina, ejecuta y envía la respuesta de regreso. Los programas se ejecutan en las máquinas no servidoras, llamadas clientes. 
Los servidores de archivos tienen por lo general un sistema jerárquico de archivos, cada uno de los cuales tiene un directorio raíz, con subdirectorios y archivos. Las estaciones pueden importar o montar estos sistemas de archivos, lo que aumenta sus sistemas locales.
El SO debe controlar las estaciones de trabajo individuales, a los servidores de archivo y encargarse de la comunicación entre los servidores.
Un protocolo típico utilizado para transferir archivos es FTP (File Transfer Protocol). En este esquema, la ubicación del archivo no es transparente. Los archivos no se comparten realmente porque sólo se puede copiar de un computador a otro. Pueden existir problemas de inconsistencia por la multiplicidad de copias, además del desperdicio de espacio. Cada computador puede estar ejecutando un SO diferente, pero deben coincidir en el formato y significado de todos los mensajes que se pueden intercambiar.
2. Sistemas Realmente Distribuidos
Estos sistemas tienen un software fuertemente acoplado en un harware débilmente acoplado. Multicomputadoras.
Un sistema distribuido es aquel que se ejecuta en una colección de máquinas sin memoria compartida, pero que aparece ante sus usuarios como una sola computadora. Crean la ilusión de que toda la red de computadoras es un solo sistema de tiempo compartido, en vez de una colección de máquinas diversas (imagen de un único sistema). Otro punto de vista es el de concebir a un sistema distribuido se ejecuta como una colección de máquinas enlazadas mediante una red, pero como un uniprocesador virtual.
La idea esencial es que los usuarios no deben ser conscientes de la existencia de varias CPU en el sistema. Los usuarios pueden acceder a los recursos remotos de igual manera que a los locales. La migración de datos y procesos de una máquina a otra queda bajo el control del SO distribuido. Debe existir un mecanismo de comunicación global entre los procesos, y no deben distinguirse comunicaciones locales y globales.
Algunas de las características de los sistemas distribuidos son las siguientes:
· Debe existir un mecanismo de comunicación global entre los procesos, de forma que cualquier proceso debe poder comunicarse con cualquier otro.
· Debe existir un esquema global de protección.
· La administración de procesos debe ser la misma en todas partes.
· Se debe tener una misma interfaz de llamadas al sistema en todas partes: núcleos idénticos en todas las CPU.
· Es necesario un sistema global de archivos.
Tiene que hacer tres funciones, que deben ser transparentes al usuario:
· Migración de datos: posibilidad de transferir datos de una máquina a otra. Dos estrategias: transferir todo el archivo o transferir sólo aquellas partes que se necesitan a medida que se solicitan.
· Migración de cálculos: diferentes formas:
· Llamada a un procedimiento remoto: un proceso de una instalación invoca a un procedimiento definido en otra instalación, el cual se ejecuta y devuelve los resultados.
· Mediante mensajes: el primer proceso envía un mensaje a la instalación donde se encuentra el proceso que quiere que se ejecute. El SO desea instalación inicia el proceso y, al finalizar, envía un mensaje con el resultado al primer proceso. Este esquema permite que los procesos se ejecuten concurrentemente.
· Migración de procesos: un proceso puede comenzar en una instalación y continuar en otra debido a varias razones. La migración puede hacerse de dos formas: transparente al usuario (utilizada para equilibrar las cargas de los sistemas y acelerar los cálculos en sistemas homogéneos) o requiriendo que éste especifique cómo y dónde migrar el proceso (utilizada cuando se traslada al proceso por características de hardware o software de una instalación que hacen preferible que se ejecute en ella).
3. Sistemas de Multiprocesador con tiempo compartido
Estos contienen software y hardware fuertemente acoplados. Los ejemplos más comunes son multiprocesadores que operan como un sistema de tiempo compartido, pero con varias CPU en vez de una sola. Se corresponde con la imagen de un único sistema. Ninguna CPU tiene memoria local, hay una memoria global compartida con el SO y los programas.
La característica clave de este sistema es que consta de una sola cola para ejecución, con todos los procesos listos, almacenada en la memoria compartida. Puesto que ninguno de los CPU tiene memoria local, y todos los programas se guardan en la memoria global compartida, no importa el CPU donde se ejecute el proceso.
Un aspecto colateral es que si un proceso se bloquea en espera de entrada/salida en un sistema multiprocesador el sistema operativo tiene la opción de suspenderlo o dejarlo en espera activa.
Si todas las CPU están inactivas en espera de E/S y un proceso está listo para su ejecución es conveniente asignarlo a la CPU que se utilizó por última vez (para ese proceso). Si un proceso se bloquea en espera de E/S, el SO puede suspenderlo o dejarlo en “espera ocupada”.
El planificador (de procesos) del Sistema Operativo se ejecuta como una “región crítica”, con ello se evita que dos CPU elijan el mismo proceso para su ejecución inmediata.
Generalmente se dispondrá de un sistema de archivos tradicional, con un único caché: Globalmente considerado es similar al sistema de archivos de un único procesador.
ASPECTOS DEL DISEÑO DE SISTEMAS OPERATIVOS DISTRIBUIDOS
Transparencia
Lograr la imagen de un único sistema. Los usuarios deben percibir la colección de máquinas como un sistema único, sin distinción entre recursos locales y remotos.
Distintos aspectos: transparencia de la localización, de la migración, de copia, con respecto a la concurrencia y con respecto al paralelismo.
Flexibilidad
Dos concepciones: 
· Sistemas con núcleo monolítico: Cada máquina debe ejecutar un núcleo tradicional que proporcione la mayoría de los servicios, al que se le agregan capacidades de red e integración de servicios remotos. Ventaja: mayor rendimiento. 
· Sistemas basados en un micronúcleo: cuentan con los servicios mínimos, consistentes en un mecanismo de comunicación entre procesos, administración de la memoria, planificación y gestión de los procesos de bajo nivel y gestión de E/S de bajo nivel. El resto de los servicios se implementan como servidores a nivel de usuario. Ventajas: más flexibles, muy modulares, permiten instalar y depurar nuevos servicios fácilmente.
Ventajas: más flexibles, muy modulares, permiten instalar y depurar nuevos servicios fácilmente.
Confiabilidad
El sistema debe ser tolerante a fallos. Si una máquina falla, otra debe encargarse del trabajo. Algunos aspectos relacionados son la disponibilidad y seguridad del sistema.
Desempeño
La ejecución de una aplicación en un sistema distribuido debe ser igual a su ejecución en un único procesador, pero esto es difícil de lograr. Mirando tiempo de espera, respuesta, ejecución, rendimiento, uso sistema.
Escalabilidad
El sistema debe tener capacidad de crecer sin problemas y permitir una elevada carga de servicio, adaptándose al crecimiento del número de usuarios y admitiendo la integración de nuevos recursos adicionales de una forma sencilla. 
COMUNICACIÓN EN LOS SISTEMAS DISTRIBUIDOS
La diferencia más importante entre un sistema distribuido y un sistema con un procesador es la conmutación entre procesos. En un sistema con un procesador, la mayor parte de la comunicación entre procesos supone de manera implícita la existencia de la memoria compartida. En un sistema distribuido no existe tal memoria compartida, por lo tanto, toda la naturaleza de la comunicación entre procesos debe replantearse a partir de 0.
Las reglas a las que se deben apegar los procesos respecto a la comunicación son conocidas como protocolos. Para los sistemas distribuidos en un área amplia, estos protocolos toman con frecuencia la forma de varias capas, cada una con sus propios objetivos y reglas.
Los conjuntos de capas más importantes son OSI y ATM.
El modelo OSI está diseñado para permitir la comunicación de los sistemas abiertos. Un sistema abierto es aquel que está preparado para comunicarse con cualquier otro sistema abierto mediante estándares que gobiernan el formato, contenido y significado de los mensajes enviados y recibidos. Estas reglas se formalizan en lo que se conoce como protocolo. Para que un grupo de computadoras puedan comunicarse mediante la utilización de una red, deben coincidir en el protocolo que usan.
El modelo OSI consta de 7 capas:
· Capa Física.
· Capa de Enlace de Datos.
· Capa de Red.
· Capa de Transporte.
· Capa de Sesión.
· Capa de Presentación.
· Capa de Aplicación
El modelo ATM consiste en que un emisor establece primero una conexión (circuito virtual) con el o los receptores. Durante el establecimiento de la conexión se determina una ruta entre el emisor hasta el receptor, y se guarda la información del ruteo en conmutadores a lo largo del camino. Mediante esta conexión se puede enviar los paquetes.
El modelo ATM consta de 3 capas:
· Capa Física ATM.
· Capa ATM.
· Capa de adaptación ATM.
MODELO
CLIENTE SERVIDOR
Cada vez que se envía un mensaje, se debe procesar un conjunto de capas, cada una de las cuales genera y añade un encabezado en el camino hacia abajo, o elimina y examina el encabezado en el camino hacia arriba.
En el modelo cliente servidor se estructura al sistema operativo como a un grupo de procesos en cooperación, llamados servidores, que ofrecen servicios a los usuarios, llamados clientes. Este modelo se basa en un protocolo de solicitud/respuesta sencillo y sin conexión. El cliente envía un mensaje de solicitud al servidor para pedir ciertos servicios, y el servidor hace el trabajo y regresa los datos o un código de error.
Una característica de este modelo es que no se tiene que establecer una conexión hasta que se utilicen los servicios.
Direccionamiento: Para que un cliente pueda enviar un mensaje a un servidor debe conocer la dirección del mismo.
LLAMADA A UN PROCEDIMIENTO REMOTO (RPC)
Cuando se solicita acceso a un archivo remoto, se debe efectuar una transferencia de datos para satisfacer la solicitud. Una forma de hacerla es mediante un servicio remoto. En él, se entregan al servidor las solicitudes de acceso, el mismo lo lleva a cabo y devuelve los resultados al usuario. 
Una de las formas más comunes de servicio remoto es la llamada a un procedimiento remoto (RPC, Remote Procedure Call). Cuando se invoca un procedimiento remoto, el entorno que lo invoca queda suspendido y se transfieren los parámetros a través de la red al nodo donde el procedimiento se va a ejecutar. Cuando finaliza, se devuelven por la red los resultados al nodo que lo invocó.
En este el programador no se preocupa de una transferencia de mensajes o de la entrada/salida, sino que los programas son capaces de llamar a otros procedimientos localizados en otras máquinas.
Cuando un proceso en la maquina A llama a un procedimiento en la maquina B, el proceso que realiza la llamada a A se suspende y la ejecución del procedimiento se realiza en B. La información se puede transportar de un lado a otro utilizando parámetros y puede volver en el resultado del procedimiento.
Existen algunas dificultades. Puesto que el procedimiento que realiza la llamada y el que la recibe se ejecutan en máquinas diferentes, utilizan espacios de direcciones distintas. También se deben transferir los parámetros y los resultados, lo que se puede complicar en especial si las maquinas no son idénticas.
El objetivo de RPC es ocultar la comunicación, al hacer que las llamadas a procedimientos remotos se parezcan a las locales. Las fallas que pueden surgir son:
· El cliente no puede localizar al servidor.
· Se pierde el mensaje de respuesta del cliente al servido.
· Se pierde el mensaje de respuesta del servidor al cliente.
· El servidor falla antes de recibir una solicitud.
· El cliente falla después de enviar una solicitud.
Los procedimientos remotos son apropiados para los modelos de cliente/servidor de cálculo distribuido.
COMUNICACIÓN EN GRUPOS
En muchos casos las comunicaciones se dan entre el cliente-servidor, pero no siempre. A veces existen ciertas circunstancias en que la comunicación se debe dar entre varios procesos. Un grupo es una colección de procesos que actúan juntos en cierto sistema o alguna forma determinada por el usuario. 
La propiedad fundamental de todos los grupos es que cuando un mensaje se envía al grupo todos los miembros del mismo lo reciben.
Es una forma de comunicación uno (emisor) muchos (receptores).
Los grupos son dinámicos, se pueden crear nuevos grupos y destruir grupos anteriores. Un proceso se puede unir a un grupo o dejar otro. Un proceso puede ser miembro de varios grupos a la vez, en consecuencia, se necesitan mecanismos para el manejo de los grupos y la membresía de los mismos.
La finalidad de presentar los grupos es permitir a los procesos que trabajen con colecciones de procesos como una abstracción. Así un proceso puede enviar un mensaje a un grupo de servidores sin tener que conocer su número o su localización.
RPC se limita a aquellas situaciones en la que un cliente desea comunicarse con un servidor. Cuando una colección de procesos tiene que comunicarse con otra como grupo, se necesita algo más. Los sistemas como ISIS promocionan una nueva abstracción con este fin: la comunicación con este grupo.
PLANIFICACION DE SISTEMAS DISTRIBUIDOS
Por lo general cada procesador hace su planificación local, sin preocuparse por lo que hacen los demás procesadores. Generalmente este método funciona, sin embargo, si un grupo de procesos relacionados entre sí se ejecutan en distintos procesadores, la planificación independiente no es el mejor camino.
Se propusieron varios algoritmos en base a un concepto llamado coplanificación, el cual toma en cuenta los patrones de comunicación entre los procesos durante la planificación para garantizar que todos los miembros de un grupo se ejecuten al mismo tiempo.
Gestión de procesos distribuidos
Ordenación de sucesos
En un sistema distribuido no hay memoria ni relojes comunes, por lo que es imposible determinar qué suceso ocurrió primero (información muy importante en muchas aplicaciones).
Solución: marcación de tiempo (time stamping). Esta técnica ordena los sucesos en un sistema distribuido sin usar relojes físicos (sucesos: acciones tales como que un proceso entre o salga de su región crítica). En un sistema distribuido, los procesos actúan mediante mensajes, por lo que es lógico asociar los sucesos con ellos.
En este esquema, se intenta ordenar los sucesos según la transmisión de mensajes. En cada sistema de la red se mantiene un contador que funciona como reloj. Cada vez que se transmite un mensaje, primero se incrementa en uno el contador y luego se envía el mensaje con el formato:
(mensaje, marca de tiempo, identificador numérico del sistema)
Cuando se recibe un mensaje, el sistema receptor suma uno al máximo entre su valor actual de reloj y el valor de la marca de tiempo del mensaje:
Valor del reloj = 1 + max(valor actual, marca de tiempo)
El orden de los sucesos se determina por su marca de tiempo y, en caso de que sean iguales, se ordenan por el número de sus sistemas (identificador menos primero).
Esta técnica es sencilla y eficaz, por lo que se utiliza en muchos algoritmos para la exclusión mutua y el bloqueo.
Exclusión Mutua
Cuando dos o más procesos compiten por el uso de los recursos de un sistema es necesario un mecanismo que imponga la exclusión mutua. Los algoritmos propuestos para garantizarla pueden ser tanto centralizados como distribuidos.
· Algoritmo completamente centralizado
· Se define un nodo coordinador que controla el acceso a todos los objetos compartidos.
· Recibe solicitudes, envía respuestas cuando el recurso está disponible y recibe mensajes de liberación.
· Dos propiedades claves:
· Sólo un nodo coordinador toma las decisiones sobre la asignación de recursos.
· Toda la información necesaria se centra en el nodo coordinador.
· Ventaja: método sencillo.
· Desventajas:
· Si el nodo coordinador falla, el mecanismo entero falla.
· Toda asignación/liberación de recursos requiere de un intercambio de mensajes con el nodo coordinador, lo que lo convierte en un cuello de botella para el sistema.
· Algoritmos distribuidos
· En promedio, todos los nodos tienen igual cantidad de información, tienen igual responsabilidad y asignan el mismo esfuerzo en tomar una decisión.
· Cada nodo tiene una representación parcial del sistema total y toma las decisiones basándose sólo en ella.
· El fallo de un nodo no colapsa todo el sistema.
· No existe un único reloj global para regular el tiempo de los sucesos.
Algoritmos distribuidos para implementar la exclusión mutua:
· Colas distribuidas
Requiere la existencia de un orden total de todos los sucesos del sistema (puede usar la marcación de tiempo).
Cuando un proceso quiere entrar en su región crítica, envía una solicitud a todos los procesos del sistema, quienes pueden enviar o diferir su respuesta. Si el proceso recibe respuesta de todos, entra a su región crítica, colocando en una cola todas las
solicitudes que reciba y respondiéndolas en orden al salir.
Desventajas: 
· Cada proceso necesita conocer la identidad de todos los demás.
· Si falla un proceso, el esquema falla.
· Los procesos que no han entrado en su región crítica deben efectuar pausas frecuentes para responder mensajes de otros.
· Paso de testigo
Testigo: tipo especial de mensaje que pasa de un proceso a otro en el sistema. Su posesión permite entrar en la región crítica. Cuando un proceso sale de su región crítica, pasa el testigo al siguiente.
Se necesitan dos estructuras: una para el testigo y otra de cada proceso, que mantiene las peticiones recibidas.
Cuando un proceso quiere entrar a su región crítica, entra si tiene el testigo y, si no, envía un mensaje de petición a los demás procesos y espera. Cuando un proceso sale de su región crítica, transmite el testigo a otro proceso que se elige observando la lista de peticiones. No se permite entrar a una segunda región crítica con el mismo testigo.
Posibles fallos:
· Si el testigo se pierde, es necesario hacer una elección para generar uno nuevo.
· Si falla un proceso, debe establecerse un nuevo anillo lógico.
Bloqueos
Dos clases:
· Bloqueos de recursos
· Bloqueos de comunicación
Entre las estrategias utilizadas, es muy popular ignorarlos. También se emplea la detección y recuperación, debido a que es muy difícil prevenirlos y evitarlos. Si bien es complicado, es posible la prevención. Lo que normalmente no se hace es evitar los bloques, debido a su dificultad.
Prevención
Dos algoritmos basados en el uso de marcas de tiempo, cuya comparación posibilita la prevención de las condiciones de esperas circulares y de posesión y espera: Espera-Muerte (wait-die) y Herida-Espera (wound-wait).
En estos esquemas, lo que se tiene en cuenta son las transacciones entre los procesos, en las cuales estos se tienen que poner previamente de acuerdo en la operación a realizar. Cada transacción lleva la marca de tiempo de su creación, lo que establece un orden estricto. Los conflictos por posesión se resuelven comparando las marcas de tiempo. 
Si una transacción T1 tiene un recurso R que solicita T2, entonces:
· Algoritmo Espera-Muerte
· Si T2 es más viejo, se bloquea hasta que T1 libere el recurso.
· Si T2 es más joven, se aborta y se vuelve a arrancar, pero con la misma marca de tiempo (lo que le permite envejecer y aumentar su prioridad).
· Algoritmo Herida-Espera
· Si T2 es más viejo, se aborta T1 y se reinicia con la misma marca de tiempo.
· Si T2 es más joven, se bloquea hasta que T1 libere el recurso.
Detección
Es después de que ocurre un interbloqueo cuando se determina su existencia. Cuando se detecta, se debe seleccionar uno de los procesos involucrados para que libere el recurso necesario para romper el bloqueo. 
Existen diferentes esquemas para resolver el problema, dependiendo el enfoque:
· Enfoque centralizado
· Un nodo es responsable de la detección de bloqueos. Todos los mensajes de solicitud/liberación de recursos se envían a él además de transmitirlo al proceso que controla el recurso.
· Inconveniente: aumento en el número de mensajes, posible fallo del coordinador.
· Ventajas: algoritmos sencillos, los bloqueos se resuelven de forma óptima.
· Enfoque jerárquico
· Los nodos se organizan en una estructura arborescente, donde cada uno tiene información de los recursos asignados a todos los nodos que dependen de él.
· Inconveniente: dificultad de configurar al sistema para localizar los posibles bloqueos.
· Ventajas: no son vulnerables al fallo de un nodo, posibles bloqueos relativamente localizados.
· Enfoque distribuido
· Todos los procesos cooperan para detectar bloqueos, lo que implica un gran intercambio de información.
· Desventaja: algoritmos difíciles de diseñar.
· Ventajas: no son vulnerables al fallo de un nodo, ninguno está agobiado con los algoritmos de detección.
SISTEMA DE ARCHIVOS DISTRIBUIDOS
Mucho de los aspectos de los sistemas distribuidos de archivos son similares a los de los sistemas convencionales. Nos centraremos en aquellos aspectos del sistema de archivos distribuido distintos al caso centralizado.
Los sistemas de archivos distribuidos son sistemas de archivos cuyos clientes, servidores y dispositivos de almacenamiento se encuentran dispersos entre varias máquinas y el servicio se tiene que hacer mediante una red.
Hay varias formas de implementar un sistema de archivos distribuido. Su objetivo básico es parecer a sus clientes un sistema de archivos convencional, sin distinguir entre archivos locales o remotos. Uno de los mayores problemas es conseguir que el tiempo necesario para satisfacer las solicitudes de servicio sea equiparable a los de un sistema convencional.
En el caso de un sistema distribuido, es muy importante distinguir entre los conceptos de servicios de archivos y el servidor de archivos. El servicio de archivos es la especificación de los servicios que el sistema de archivos ofrece a sus clientes. Para los clientes, el servicio de archivo define con precisión el servicio con que pueden contar, pero no dice nada con respecto a su implementación.
Por el contrario, un servidor de archivos es un proceso que se ejecuta en alguna máquina, y ayuda a implantar el servicio de archivos. Un sistema puede tener uno o varios servidores de archivos, pero los clientes no deben conocer el número de servidores de archivos, su posición o función. De hecho, lo clientes ni siquiera deben saber que el servicio de archivos es distribuido. Lo ideal es que se vea como un sistema de archivos normal de un procesador.
Diseño de los sistemas distribuidos de archivos: Por lo general un sistema distribuido de archivos tiene dos componentes: 
· El verdadero servicio de archivos: Se encarga de las operaciones en los archivos individuales, como la lectura, la escritura y la adición.
· Servicio de directorios: Se encarga de crear y administrar directorios, añadir y eliminar archivos de los mismos, etc.
Un sistema comercial de archivos distribuidos: NFS (Network File System)
El SO de red más conocido y aceptado es el NFS. Este solo trata el sistema de archivos y no hace referencia a otros aspectos, como la ejecución de un proceso. 
Cada computadora puede ejecutar su propio SO, solo se dispone de un sistema compartido de archivos y el tráfico cliente - servidor debe obedecer los protocolos NFS.
La idea fundamental de NFS es permitir que un conjunto de computadores compartan un sistema de archivos común. Es posible implementarlo tanto en conexiones LAN como en WAN.
Se consideran computadores clientes y servidores (pueden ser ambos). Los servidores soportan físicamente el sistema de archivos compartido, mientras que los clientes sólo lo utilizan. Los servidores exportan (permiten el acceso al directorio y su contenido en computadores remotos) uno o varios de sus directorios. Los clientes pueden montar los directorios exportados como un directorio más en su jerarquía de directorios.
La sencillez de su arquitectura es una de sus mejores cualidades: los directorios de distintas máquinas se pueden leer y escribir como si fueran locales y forman parte de la jerarquía de directorios.
Protocolos NFS
Para poder soportar un sistema heterogéneo en donde los clientes y servidores podrían ejecutar distintos S.O. en hardware diverso, NFS define dos “protocolos cliente - servidor” (protocolo: conjunto de solicitudes y respuestas entre los clientes y los servidores).
Un protocolo de NFS maneja el montaje.
Un cliente puede enviar el nombre de una ruta de acceso a un servidor y solicitar permiso para montar ese directorio. Si el nombre de la ruta de acceso es válido y el directorio especificado ha sido exportado, el servidor regresa un manejador de archivo (file handle) al cliente, con la información relativa al archivo (las llamadas posteriores de lectura/escritura utilizan ese manejador).
Algunos SO soportan la alternativa del automontaje, que permite que un conjunto de directorios remotos quede asociado con un directorio local. Estos no se montan durante el arranque del cliente, sino
que la primera vez que se abra un archivo remoto, el SO envía un mensaje a los servidores y se monta su directorio. Se usa frecuentemente en sistemas de archivos de sólo lectura.
El automontaje tiene dos ventajas: 
· Se evita contactar servidores y montar directorios que no son requeridos de inmediato.
· Al disponer de varios servidores, se permite una mayor tolerancia a fallos y un mejor rendimiento.
El otro protocolo de NFS es el relativo al acceso a los directorios y archivos.
Para leer, escribir y tener acceso a los atributos de los directorios y archivos, los clientes pueden enviar mensajes a los servidores. Para leer un archivo, el cliente envía un mensaje al servidor y éste devuelve un manejador que lo identifica.
No es necesario abrir ni cerrar los archivos para utilizarlos. La ventaja de este esquema es que el servidor no tiene que recordar las conexiones abiertas, por lo que, si falla, al volver a arrancar no pierde información acerca de los archivos abiertos, porque no existen.
Arquitectura NFS
Consiste en tres capas:
· Interfaz del sistema de archivos Unix: soporta las llamadas al sistema (open, read, write, close).
· Sistema Virtual de Archivos (VSF, Virtual File System): mantiene una tabla con una entrada por cada archivo abierto, que se llama nodo-v (nodo-i virtual). Los nodos-v se utilizan para indicar si el archivo es local o remoto.
· Capa de servicios NFS: implementa el protocolo NFS.
TENDENCIAS EN LOS SISTEMAS DE ARCHIVOS DISTRIBUIDOS
Consiste en una mirada hacia el futuro de las probabilidades de cambios en sistemas distribuidos de archivos en materia de hardware.
Hardware reciente
En la actualidad todos los servidores de archivos utilizan discos magnéticos para el almacenamiento.
Dentro de unos cuantos años, la memoria se podría volver tan económica que incluso pequeñas organizaciones podrían equipar todos sus servidores de archivos con GB de memoria física (principal). Por lo tanto, el sistema de archivos podría encontrarse en la memoria principal de manera permanente y no existiría la necesidad de los discos. Tal paso mejoraría el desempeño y haría mucho más sencilla la estructura del sistema de archivos.
La mayoría de los sistemas de archivos de la actualidad organizan los archivos como una colección de bloques, ya sea mediante una estructura de árbol o una lista enlazada.
No obstante, este mecanismo presentaría un serio problema. En caso de que la computadora pierda su fuente de alimentación, todos los archivos en memoria principal se perderían de manera inmediata.
Otro avance importante en materia de hardware son las redes de fibra óptica. La cual permite una mayor velocidad de transmisión cliente/servidor.
Escalabilidad
Implica una tendencia hacia sistemas distribuidos cada vez más grandes. Separa el sistema en unidades más pequeñas, e intenta que cada una de ellas sea relativamente independiente de las demás.
Redes de Área amplia
La mayoría del trabajo actual relativo a los sistemas distribuidos se centra en los sistemas basados en LAN. En el futuro, muchos sistemas distribuidos basados en LAN serán conectados entre sí, para formar sistemas distribuidos transparentes a través de países y continentes.
Así, un sistema distribuido de área amplia necesitara enfrentarse a la heterogeneidad. Esto hace que surjan preguntas tales como la forma de almacenar un archivo de caracteres si no todos los sistemas utilizan ASCII. Esto impulsa al desarrollo de protocolos.
Multimedia
Las nuevas aplicaciones, en partículas las que implican video en tiempo real o multimedia, tendrán un efecto enorme en archivos distribuidos futuros. Los archivos de texto ocupan unos pocos MB de longitud, no obstante, los de video pueden exceder fácilmente el GB. Para controlar las aplicaciones se necesitarán sistemas de archivos totalmente diferentes.
19

Otros materiales

Materiales relacionados

28 pag.
unidad_06

Escuela Universidad Nacional

User badge image

Diana Milena Bastidas

Unidad 4

ESTÁCIO

User badge image

Manuel Musso