11 de abril de 2018

Sistemas Operativos Distribuidos


Es aquel que consiste en facilitar el acceso y la gestión de los recursos distribuidos en la red. Es donde los usuarios pueden acceder a recursos remotos de la misma manera en que lo hacen para los recursos locales Permitiendo distribuir trabajos, tareas o procesos, entre un conjunto de procesadores. Puede ser que este conjunto de procesadores esté en un equipo o en diferentes, lo cual es transparente para el usuario.


Sistemas Distribuidos:
Los sistemas distribuidos suponen un paso más en la evolución de los sistemas informáticos, entendidos desde el punto de vista de las necesidades que las aplicaciones plantean y las posibilidades que la tecnología ofrece. Antes de proporcionar una definición de sistema distribuido resultará interesante presentar, a través de la evolución histórica, los conceptos que han desembocado en los sistemas distribuidos actuales, caracterizados por la distribución física de los recursos en máquinas interconectadas. Utilizaremos aquí el término recurso con carácter general para referirnos a cualquier dispositivo o servicio, hardware o software, susceptible de ser compartido. 
Características:
Transparencia
El objetivo esencial de un sistema distribuido es proporcionar al usuario y a las aplicaciones una visión de los recursos del sistema como gestionados por una
sola máquina virtual. La distribución física de los recursos es transparente.
Pueden describirse diferentes aspectos de la transparencia:
  • De identificación. Los espacios de nombres de los recursos son independientes de la topología de la red y de la propia distribución de los recursos.


Deben entenderse como propiedades deseables. Como veremos reiteradamente, el compromiso con el rendimiento provoca en la práctica que algunas de las ropiedades se relajen.
  • De la ubicación física de los recursos. Ni los usuarios ni las aplicaciones conocen en qué nodo reside el recurso accedido, o si éste es local o remoto. Esto implica también que los recursos pueden migrar entre nodos sin que las aplicaciones se vean afectadas. La diferencia entre transparencia de ubicación e identificación se resume en diagrama Transparencia de identificación y transparencia de ubicación.
  • De replicación. Ni los usuarios ni las aplicaciones conocen cuántas unidades hay de cada recurso, ni si se añaden o eliminan copias del recurso.
  • De paralelismo. Otra consecuencia de la replicación de recursos es que una aplicación puede ejecutarse en paralelo, sin que la aplicación tenga que especificarlo, y sin consecuencias sobre la ejecución, salvo por cuestiones de rendimiento.
  • De compartición. El que un recurso compartido intente ser accedido simultáneamente desde varias aplicaciones no tiene efectos sobre la ejecución de la aplicación.
  • De rendimiento. Inevitablemente, implementar las propiedades de los sistemas distribuidos será a costa de una pérdida de rendimiento. Por ejemplo, conseguir identificación y ubicación transparentes implica muchas veces resolver nombres remotamente, con el consiguiente incremento de la latencia. Por lo tanto, es necesario buscar soluciones de compromiso cuando la degradación del rendimiento hace impracticable implementar alguna de las propiedades.Transparencia_de_identificación_y_transparencia_de_ubicación.JPG

Escalabilidad
Una de las características de los sistemas distribuidos es su modularidad, lo que le permite una gran flexibilidad y posibilita su escalabilidad, definida como la capacidad del sistema para crecer sin aumentar su complejidad ni disminuir su rendimiento. Uno de los objetivos del diseño de un sistema distribuido es extender la escalabilidad a la integración de servicios.La escalabilidad presenta dos aspectos. El sistema distribuido debe (1)proporcionar espacios de nombres suficientemente amplios, de forma que no supongan una limitación inherente, y (2) mantener un buen nivel de rendimiento en el acceso a los recursos cuando el sistema crece.


  • Espacios de nombres. Los espacios de nombres, al igual que en los sistemas centralizados, pueden identificar objetos de diferente naturaleza, como ficheros, procesos, variables, o incluso direcciones de memoria (en los sistemas de memoria compartida distribuidaDSM). En el caso de los espacios lineales, como la memoria, existe una limitación inherente asociada al tamaño del nombre, de forma que hoy en día es razonable plantear la insuficiencia de los espacios de direcciones de 32 bits. En otros casos, los espacios de nombres son jerárquicos y por lo tanto escalables por naturaleza.
  • Complejidad/rendimiento. El crecimiento de un sistema distribuido puede introducir cuellos de botella y latencias que degradan su rendimiento. Además del incremento de los costes de comunicación por el aumento de la distancia física entre los componentes del sistema, la complejidad estructural de los algoritmos distribuidos es a menudo más que lineal con respecto al tamaño del sistema, como iremos comprobando a lo largo del curso. Es necesario, por tanto, establecer compromisos entre tamaño del sistema, rendimiento y complejidad.

Fiabilidad y tolerancia a fallos
La fiabilidad de un sistema puede definirse como su capacidad para realizar correctamente y en todo momento las funciones para las que se ha diseñado. La
fiabilidad se concreta en dos aspectos:
  • Disponibilidad. Es la fracción de tiempo que el sistema está operativo. El principal parámetro para medir la disponibilidad es el tiempo medio entre fallos (MTBF), pero hay que considerar también el tiempo de reparación. La disponibilidad se puede incrementar de dos formas: (a) utilizando componentes de mayor calidad, y/o (b) con un diseño basado en la replicación de componentes que permita al sistema seguir operando aún cuando alguno(s) de ellos falle(n). Ambas alternativas incrementan el coste del sistema; sin embargo, en el estado tecnológico actual, la replicación resulta, en general, menos costosa. Los sistemas distribuidos proporcionan inherentemente la replicación de algunos recursos (por ejemplo, unidades de proceso), mientras que otros normalmente compartidos (por ejemplo, un servidor de ficheros) pueden replicarse para aumentar la disponibilidad. Por otra parte, la ausencia de fallos en los componentes de un sistema, tanto hardware como software, nunca puede garantizarse, de modo que, más allá de unos límites, la replicación es necesaria para seguir incrementando la disponibilidad, ya que la probabilidad de fallo disminuye como una función exponencial de la replicación. Por ejemplo, dada una probabilidad de fallo de un 1% en un componente (en un periodo de tiempo dado), si montamos un sistema replicado con cuatro componentes idénticos, la probabilidad de que fallen en ese periodo los cuatro componentes disminuiría a 0,000001%. Este cálculo, sin embargo, debe matizarse: por una parte, la probabilidad de fallo de los componentes individuales suele estar correlacionada debido a varias causas, como errores de diseño o catástrofes naturales; por otra parte, la interconexión de los componentes es una fuente de fallos adicional.


  • Tolerancia a fallos. Aún con una alta disponibilidad, un fallo en un momento determinado puede tener consecuencias desastrosas. Piénsese en sistemas de tiempo real críticos que controlan dispositivos vitales (por ejemplo en medicina, centrales nucleares...). Es decir, aunque la replicación aumenta la disponibilidad, no garantiza por sí sola la continuidad del servicio de forma transparente. La tolerancia a fallos expresa la capacidad del sistema para seguir operando correctamente ante el fallo de alguno de sus componentes, enmascarando el fallo al usuario o a la aplicación. Por lo tanto, la tolerancia a fallos implica (1)detectar el fallo, y (2) continuar el servicio, todo ello de forma transparente para la aplicación (transparencia de fallos).

Consistencia
La distribución de recursos introduce importantes beneficios. Por una parte, contribuye al incremento del rendimiento a través del paralelismo y promoviendo el acceso a copias locales del recurso (disminuyendo los costes de comunicación). Por otra, como se acaba de ver, la replicación aumenta la disponibilidad, siendo la base para proporcionar tolerancia a fallos. No obstante, distribuir recursos acarrea algunos problemas. Por una parte, la red de interconexión es una nueva fuente de fallos. Además, la seguridad del sistema es más vulnerable ante accesos no permitidos. Pero el problema de mayor complejidad es el de gestión del estado global para evitar situaciones de inconsistencia entre los componentes del sistema. Este es un aspecto fundamental en el diseño del sistema distribuido, por lo que lo comentaremos a continuación.
El problema radica en la necesidad de mantener un estado global consistente en un sistema con varios componentes, cada uno de los cuales posee su propio estado local. Los nodos del sistema se hallan físicamente distribuidos, por lo que la gestión del estado global depende fuertemente de los mecanismos de comunicación, a su vez soportados por una red sujeta a fallos. Como veremos, la gestión de la consistencia puede basarse en una buena sincronización entre los relojes de los nodos o en mecanismos de ordenación de eventos (relojeslógicos). La distribución física hace, en general, inviable la utilización de un reloj global que aporte referencias absolutas de tiempo, lo que permitiría una ordenación total de los eventos y, por lo tanto, de las transiciones de estado en cada nodo.
Así pues, el mantenimiento de una consistencia estricta requiere un fuerte soporte que implica gran carga de comunicación adicional entre los nodos del sistema, por lo que muchas veces es preferible relajar la consistencia para mantener el rendimiento en un nivel aceptable, de acuerdo a las necesidades de las aplicaciones.

Openess:
Un sistema informático es abierto si el sistema puede ser extendido de diversas maneras. Un sistema puede ser abierto o cerrado con respecto a extensiones hardware (añadir periféricos, memoria o interfaces de comunicación, etc... ) o con respecto a las extensiones software ( añadir características al sistema operativo, protocolos de comunicación y servicios de compartición de recursos, etc... ). La apertura de los sistemas distribuidos se determina primariamente por el grado hacia el que nuevos servicios de compartición de recursos se pueden añadir sin perjudicar ni duplicar a los ya existentes.

Básicamente los sistemas distribuidos cumplen una serie de características:

  • Los interfaces software clave del sistema están claramente especificados y se ponen a disposición de los desarrolladores. En una palabra, los interfaces se hacen públicos.
  • Los sistema distribuidos abiertos se basan en la provisión de un mecanismo uniforme de comunicación entre procesos e interfaces publicados para acceder a recursos compartidos.
  • Los sistema distribuidos abiertos pueden construirse a partir de hardware y software heterogéneo, posiblemente proveniente de vendedores diferentes. Pero la conformidad de cada componente con el estándar publicado debe ser cuidadosamente comprobada y certificada si se quiere evitar tener problemas de integración.

Concurrencia
Cuando existen varios procesos en una única maquina decimos que se están ejecutando concurrentemente. Si el ordenador esta equipado con un único procesador central, la concurrencia tiene lugar entrelazando la ejecución de los distintos procesos. Si la computadora tiene N procesadores, entonces se pueden estar ejecutando estrictamente a la vez hasta N procesos.

En los sistemas distribuidos hay muchas maquinas, cada una con uno o mas procesadores centrales. Es decir, si hay M ordenadores en un sistema distribuido con un procesador central cada una entonces hasta M procesos estar ejecutándose en paralelo.

En un sistema distribuido que esta basado en el modelo de compartición de recursos, la posibilidad de ejecución paralela ocurre por dos razones:

  • Muchos usuarios interactuan simultáneamente con programas de aplicación.

  • Muchos procesos servidores se ejecutan concurrentemente, cada uno respondiendo a diferentes peticiones de los procesos clientes.

El caso (1) es menos conflictivo, ya que normalmente las aplicaciones de interacción se ejecutan aisladamente en la estación de trabajo del usuario y no entran en conflicto con las aplicaciones ejecutadas en las estaciones de trabajo de otros usuarios.

El caso (2) surge debido a la existencia de uno o mas procesos servidores para cada tipo de recurso. Estos procesos se ejecutan en distintas maquinas, de manera que se están ejecutando en paralelo diversos servidores, junto con diversos programas de aplicación. Las peticiones para acceder a los recursos de un servidor dado pueden ser encoladas en el servidor y ser procesadas secuencialmente o bien pueden ser procesadas varias concurrentemente por múltiples instancias del proceso gestor de recursos. Cuando esto ocurre los procesos servidores deben sincronizar sus acciones para asegurarse de que no existen conflictos. La sincronización debe ser cuidadosamente planeada para asegurar que no se pierden los beneficios de la concurrencia.

Adicional sobre Escalabilidad:
Los sistemas distribuidos operan de manera efectiva y eficiente a muchas escalas diferentes. La escala más pequeña consiste en dos estaciones de trabajo y un servidor de ficheros, mientras que un sistema distribuido construido alrededor de una red de área local simple podría contener varios cientos de estaciones de trabajo, varios servidores de ficheros, servidores de impresión y otros servidores de propósito especifico. A menudo se conectan varias redes de área local para formar internetworks, y éstas podrían contener muchos miles de ordenadores que forman un único sistema distribuido, permitiendo que los recursos sean compartidos entre todos ellos.

Cuando el tamaño y complejidad de las redes de ordenadores crece, es un objetivo primordial diseñar software de sistema distribuido que seguirá siendo eficiente y útil con esas nuevas configuraciones de la red. Resumiendo, el trabajo necesario para procesar una petición simple para acceder a un recurso compartido debería ser prácticamente independiente del tamaño de la red. Las técnicas necesarias para conseguir estos objetivos incluyen el uso de datos replicados, la técnica asociada de caching, y el uso de múltiples servidores para manejar ciertas tareas, aprovechando la concurrencia para permitir una mayor productividad. Una explicación completa de estas técnicas puede encontrarse en [ Colouris 1994 ].

Tolerancia a Fallos:
Los sistemas informáticos a veces fallan. Cuando se producen fallos en el software o en el hardware, los programas podrían producir resultados incorrectos o podrían pararse antes de terminar la computación que estaban realizando. El diseño de sistemas tolerantes a fallos se basa en dos cuestiones, complementarias entre sí: Redundancia hardware (uso de componentes redundantes) y recuperación del software (diseño de programas que sean capaces de recuperarse de los fallos).

VENTAJAS Y DESVENTAJAS DE LOS SISTEMAS DISTRIBUIDOS

VENTAJAS

DESVENTAJAS

Picture
•Una de las ventajas de los sistemas distribuidos es la economía, pues es mucho más barato, añadir servidores y clientes cuando se requiere aumentar la potencia de procesamiento.
•El trabajo en conjunto. Por ejemplo: en una fábrica de ensamblado, los robots tienen sus CPUs diferentes y realizan acciones en conjunto, dirigidos por un sistema distribuido.
•Tienen una mayor confiabilidad. Al estar distribuida la carga de trabajo en muchas máquinas la falla de una de ellas no afecta a las demás, el sistema sobrevive como un todo.
Capacidad de crecimiento incrementa. Se puede añadir procesadores al sistema, incrementando su potencia en forma gradual según sus necesidades.
Con respecto a PCs Independientes.
Se pueden compartir recursos, como programas y periféricos, muy costosos. Ejemplo: Impresora Láser, dispositivos de almacenamiento masivo, etc.
Al compartir recursos, satisfacen las necesidades de muchos usuarios a la vez. Ejemplo: Sistemas de reservas de aerolíneas.
Se logra una mejor comunicación entre las personas. Ejemplo: el correo electrónico.
Tienen mayor flexibilidad, la carga de trabajo se puede distribuir entre diferentes ordenadores.

Imagen
• El principal problema es el software, es el diseño, implantación y uso del software distribuido, pues presenta numerosos inconvenientes. Los principales interrogantes son los siguientes:
+Las computadoras en un sistema pueden ser de diferentes tipos y ejecutar versiones diferentes de sistemas operativos. Esto significa que se requiere mas esfuerzo para gestionar y mantener en funcionamiento el sistema.
+ Puede accederse al sistema desde varias computadoras diferentes, y el trafico en la red, puede estar sujeto a escuchas indeseadas (esto hace mas difícil mantener la integridad de los datos en el sistema y que los servicios no se degraden por ataques).
+ Los sistemas distribuidos son mas complejos, esto provoca que sea mas difícil comprender sus propiedades.
+los sistemas distribuidos tienen un sistema impredecible. Como todos ellos pueden cambiar rápidamente, el tiempo requerido para responder a una petición de usuario puede variar dramáticamente, de una petición a otra.

En general se considera que las ventajas superan a las desventajas, si estas últimas se administran seriamente.