lunes, 21 de junio de 2010

Algunos Sistemas Operativos Distribuidos

Para continuar un poco con este tema, voy a mencionar algunos de los sistemas operativos distribuidos que existen.

Lo malo, es que yo no los he probado, asi que no podria hablar de ellos como experiencia propia

Bueno, estos son algunos:

Saludos

COMUNICACION EN UN SISTEMA DISTRIBUIDO (Comunicacion en Grupo)

La comunicacion en grupo es necesaria para los sistemas operativos distribuidos, esta depende de surcar los problemas de sincronizacion de reloj y encontrar soluciones que posiblemente no son necesarias para un sistema operativo normal.


Sincronización

La sincronización en sistemas de un único ordenador no requiere ninguna consideración en el diseño del sistema operativo, ya que existe un reloj único que proporciona de forma regular y precisa el tiempo en cada momento. Sin embargo, los sistemas distribuidos tienen un reloj por cada ordenador del sistema, con lo que es fundamental una coordinación entre todos los relojes para mostrar una hora única. Los osciladores de cada ordenador son ligeramente diferentes, y como consecuencia todos los relojes sufren un desfase y deben ser sincronizados continuamente. La sincronización no es trivial, porque se realiza a través de mensajes por la red, cuyo tiempo de envío puede ser variable y depender de muchos factores, como la distancia, la velocidad de transmisión o la propia saturación de la red, etc.

El Reloj

La sincronización no tiene por qué ser exacta, y bastará con que sea aproximadamente igual en todos los ordenadores. Hay que tener en cuenta, eso sí, el modo de actualizar la hora de un reloj en particular. Es fundamental no retrasar nunca la hora, aunque el reloj adelante. En vez de eso, hay que ralentizar la actualización del reloj, frenarlo, hasta que alcance la hora aproximadamente.

Existen diferentes algoritmos de actualización de la hora, tres de ellos son:

Algoritmo de Lamport

Este algoritmo se encarga exclusivamente de mantener el orden en que se suceden los procesos. En cada mensaje que se envía a otro ordenador se incluye la hora. Si el receptor del mensaje tiene una hora anterior a la indicada en el mensaje, utiliza la hora recibida incrementada en uno para actualizar su propia hora.

Algoritmo de Cristian

Consiste en disponer de un servidor de tiempo, que reciba la hora exacta. El servidor se encarga de enviar a cada ordenador la hora. Cada ordenador de destino sólo tiene que sumarle el tiempo de transporte del mensaje, que se puede calcular de forma aproximada.


Algoritmo de Berkeley


La principal desventaja del algoritmo de Cristian es que todo el sistema depende del servidor de tiempo, lo cual no es aceptable en un sistema distribuido fiable.El algoritmo de Berkeley usa la hora de todos los ordenadores para elaborar una media, que se reenvía para que cada equipo actualice su propia hora ralentizando el reloj o adoptando la nueva hora, según el caso.

COMUNICACION EN UN SISTEMA DISTRIBUIDO

La comunicación entre procesos en sistemas con un único procesador se lleva a cabo mediante el uso de memoria compartida entre los procesos. En los sistemas distribuidos, al no haber conexión física entre las distintas memorias de los equipos, la comunicación se realiza mediante la transferencia de mensajes.

Existen diferentes formas en que se comunican los sistemas distribuidos los cuales son:

Estandar ISO OCI

Para el envío de mensajes se usa el estándar ISO OSI (interconexión de sistemas abiertos), un modelo por capas para la comunicación de sistemas abiertos. Las capas proporcionan varias interfaces con diferentes niveles de detalle, siendo la última la más general. El estándar OSI define las siguientes siete capas:


Modo de Transmicion Asincrona (ASM)

El modo de transmisión asíncrona o ATM proporciona un rápido modo de transmisión. Las altas velocidades se alcanzan prescindiendo de la información de control de flujo y de control de errores en los nodos intermedios de la transmisión. ATM usa el modo orientado a conexión, y permite la transmisión de diferentes tipos de información, como voz, vídeo, datos, etc.














RPC (Remote Procedure Control)


Es un protocolo que permite a un programa de ordenador ejecutar código en otra máquina remota sin tener que preocuparse por las comunicaciones entre ambos. El protocolo es un gran avance sobre los sockets usados hasta el momento. De esta manera el programador no tenía que estar pendiente de las comunicaciones, estando éstas encapsuladas dentro de las RPC.

DIFERENCIA ENTRE SISTEMA OPERATIVO DISTRIBUIDO Y SISTEMA DISTRIBUIDO

Para empezar podemos decir que una diferencia completa no existe, pero para quedar claros con estas 2 definiciones que por lo general cuando se investiga acerca de este tema se tiende a confundir un poco tendremos lo siguiente:

Sistema Distribuido: Un sistema en el que los componentes de hardware y/o sofotware son ubicados en computadores en red, se comunican y coordinan sus acciones intercambiando mensajes.

Sistema Operativo Distribuido: Muestra al sistema distribuido subyacente como una colección de recursos, abstrayendo su complejidad física (computadoras, redes, nodos) y lógica (protocolos, dominios), que permite a las aplicaciones interactuar de forma protegida y ordenada.

En conclusion:

Podemos decir que un sistema distribuido es el conjunto de medios con los cuales se pueden intercambiar informacion entre varios componentes y el sistema operativo distribuido es el que los maneja y abstrae para su correcto uso.

Ahora algunas personas podrian pensar que entonces los sistemas distribuidos pueden ser redes que creemos con Windows o Unix, y esto es completamente erroneo, Debido a que la frontera entre los recursos está claramente definida.

SISTEMA OPERATIVO DISTRIBUIDO

Los sistemas operativos distribuidos desempeñan las mismas funciones que un sistema operativo normal, pero con la diferencia de trabajar en un entorno distribuido.

En un sistema operativo distribuido los usuarios pueden acceder a recursos remotos de la misma manera en que lo hacen para los recursos locales.

Un sistema operativo distribuido permite diseñar aplicaciones que se ejecutan sobre el sistema distribuido subyacente.

Presenta a los recursos como abstracciones orientadas al dominio del problema:
  1. Canales de comunicación <=> redes

  2. Procesos <=> procesadores

Un sistema operativo distribuido es una colección de kernels y procesos servidores que brindan la abstracción fisica y logica.

Existen basicamente 2 Esquemas de Sistemas Operativos Disribuidos:
  1. Fuertemente Acoplados

  2. Debilmente Acoplados
Fuertemente Acoplados: Son aquellos que comparte la memoria y un reloj global, cuyos tiempos de acceso son similares para todos los procesadores.

Debilmente Acoplados: Son los que los procesadores no comparten ni memoria ni reloj, ya que cada uno cuenta con su memoria local.

domingo, 20 de junio de 2010

Adentrándonos en la Computación Distribuida (Clusters)

Cuando se habla de computación distribuida es difícil no escuchar términos como clusters o grids entre otros, en lo personal estos términos son muy nuevos para mi, y de los cuales he escuchado mención a lo lejos del concepto de cluster, cuando nos referimos a clusters hacemos referencia a un conjunto de computadoras (que podrían ser como las desktops que tenemos en casa) que comparten recursos de hardware y que todo el conjunto de computadoras es visto como uno solo, y al igual que en el concepto general de computación distribuida estos deben estar conectados por algún medio de comunicación(una red por mencionar algo), otra definición que podemos aplicar a los cluster es la que nos proporciona la toda sapiente wikipedia:

“El término cluster se aplica a los conjuntos o conglomerados de computadoras construidos mediante la utilización de componentes de hardware comunes y que se comportan como si fuesen una única computadora.”

Con ellos podemos llegar a obtener los recursos y la capacidad computacional para realizar tareas y la ejecución de algoritmos complejos, disponiendo de recursos de hardware que son de bajo costo.

Todo aquí se escucha muy bonito, pero de lo anterior queda de forma muy vaga lo que podemos hacer con los cluster, por eso le volvemos a preguntar a wikipedia quien nos da una idea generalizada, pero un poco mas extensa:

“La tecnología de clusters ha evolucionado en apoyo de actividades que van desde aplicaciones de supercómputo y software de misiones críticas, servidores web y comercio electrónico, hasta bases de datos de alto rendimiento, entre otros usos.”

A los clusters se les ha dado una clasificación según el uso que desempeñaran, y los servicios que estos presten, y esta clasificación se divide en 3 grupos, de los cuales tenemos:

Alta Disponibilidad(HA): este tipo de clusters que se enfocan el la alta disponibilidad de servicios para los cual fueron implementados con lo que garantiza una continuidad de ellos.

Alta Eficiencia(HT): estos son cluster diseñados para la realización de tareas en el menor tiempo posible, tarea que en los clusters de alta disponibilidad no es relevante.

Alto Rendimiento(HPC): en estos se realizan tareas que requieren una gran cantidad de recursos y capacidad de computo.

El tema de la computacion distribuida es de muy amplio estudio, este es solo una pequeña introduccion enfocada en clusters, tratando de explicarla de la mejor manera y así seguir adentrándonos en este tema tan interesante.

Soporte para Programacion Distribuida

El soporte para programación distribuida está compuesto por los soportes de ejecución de los lenguajes para aplicaciones distribuidas, junto con los servicios de comunicación de difusión (multicast) y con las RPC’s o interfaces de los servicios ofrecidos por máquinas remotas.

Para hablar sobre esto, debemos estar concientes que un proceso es una actividad que resulta al ejecutarse un algoritmo, utilizando recursos de la pc, como la memoria ram, dispositivos E/S, etc.

En un sistema operativo centralizado (en este caso, podemos decir que posee solo un procesador), la gestión de procesos, se encarga de repartir un procesador entre diversos procesos de usuario, utilizando un tiempo muy pequeño para cada uno de los procesos, tan pequeño, que no nos damos cuenta de que varios procesos están ejecutándose al mismo tiempo en un solo procesador.

El objetivo de la gestión de procesos en los sistemas operativos distribuidos es compartir todos los recursos de proceso (distribuidos por toda la red) entre todos los procesos de toda la red del sistema distribuido.

Para conseguir esto, es necesario proporcionar mecanismos y políticas para realizar operaciones con los procesos tanto locales como remotos, para gestionarlos, comunicarlos y sincronizarlos.

Estos mecanismos van a tener que ampliar los ya existentes en los sistemas distribuidos centralizados, para poder tratar con la distribución de recursos y la distribución de la información del estado de los recursos por toda la red.

Entonces, cuando ejecutamos un proceso en un sistema operativo distribuido, en que procesador vamos a ejecutar el proceso? (sabemos que tenemos varios procesadores, a travéz de la red). La política se llama Reparto de Carga de Trabajo.

El reparto de Carga de Trabajo, se puede realizar en 2 momentos:
  1. Cuando se van a crear los Procesos
  2. Reasignando los procesadores a los procesos, durante su ejecución mediante la migración de procesos
Existen varias prestaciones que se obtienen en un sistema operativo distribuido, sin embargo, la mejora de cada una de ellas, depende del objetivo del sistema operativo

El
rendimiento se define como la cantidad de trabajo realizada por unidad de tiempo. El rendimiento se maximiza, minimizando la sobrecarga, el tiempo de comunicación y el tiempo de espera. Sobrecarga es el tiempo que se dedica el SO a la planificación y a los cambios de contexto. El tiempo de comunicación, es el tiempo que pasan los procesos esperando recibir datos o eventos de E/S, para continuar su ejecución. El tiempo de espera, es el tiempo que pasan los procesos en la cola de "Listos", para que haya un procesador disponible.

El
tiempo de respuesta es el tiempo que pasa desde la entrada de datos, hasta la salida de resultados.

Si se mejora el rendimiento o los tiempos de respuesta, es posible que en algún momento algún proceso nunca llegue a ejecutarse. Para esto es necesario que haya "justicia" en decidir que procesos pueden utilizar un procesador.

Los buenos planificadores de los sistemas distribuidos, además de intentar conseguir un equilibrio entre estos tres factores deben tener muy en cuenta que la asignación del procesador influye mucho en el tiempo de comunicación, pues cuando dos procesos con mucha comunicación se asignan a equipos muy separados, los procesadores pueden quedarse ociosos esperando a que los mensajes viajen por la red, y además cuando un proceso que produce datos para otros consumidores no se ejecuta, los procesos consumidores quedan bloqueados en espera, lo cual afecta negativamente a los tiempos de comunicación.

Mas adelante, voy a mencionar como es que arranca la ejecución de un proceso en un nodo remoto, y de como es que un proceso que se esta ejecutando en un nodo, puede trasladarse a otro para continuar ahí su ejecución.

Saludos =D