FUNDAMENTOS DE LOS SISTEMAS DISTRIBUIDOS DEFINICIÓN DE SISTEMAS DISTRIBUIDOS: Colección de elementos de cómputo autónomo que se encuentran físicamente separados y no comparten una memoria común, se comunican entre sí a través del intercambio de mensajes utilizando un medio de comunicación. Los sistemas autónomos pueden tener características no homogéneas. Es una colección de computadoras independientes que aparece ante los usuarios del sistema como una única computadora. 1.1 CARACTERÍSTICAS DE LOS SISTEMAS DISTRIBUIDOS Cada elemento de computo tiene su propia memoria y su propio Sistema Operativo Control de recursos locales y remotos. Sistemas Abiertos (Facilidades de cambio y crecimiento). Plataforma no standard ( Unix, NT, Intel, RISC, Etc.). Capacidad de Procesamiento en paralelo. Dispersión y parcialidad. Medios de comunicación ( Redes, Protocolos, Dispositivos, Etc.). Es una colección de computadoras independientes Los usuarios piensan que es una sola computadora La comunicación se logra al conectarse por cualquier medio físico: cable de alta velocidad, microondas, canales satélites, línea telefónica, etc. Consta de varios procesadores conectados todos mediante redes de alta velocidad Se compone de varios CPU conectados entre si, que trabajan en forma independiente Permite la conexión de un grupo de computadoras que se encuentra aisladas, ya sea a corta o a larga distancias Es una base de datos dispersa en todos los sistemas de computadoras de una red Cada elemento de información esta almacenada en el lugar donde se utiliza con mayor frecuencia Actúan como un sistema de tiempo compartido con un único procesador En los sistemas distribuidos se puede realizar transacciones desde donde sea. Los sistemas distribuidos proporcionan un servicio mejor, más barato y conveniente a sus usuarios 1.1. Características de un sistema distribuido Un sistema distribuido es aquél que se ejecuta como un sistema centralizado, pero que realmente se ejecuta sobre múltiples e independientes unidades centrales de proceso (CPU), haciéndolo de una forma "transparente" para los usuarios. En general, se podría ver a un sistema distribuido como la unión de una tecnología de red y el uso de potentes máquinas multiprocesadores. Además de las características arriba mencionadas, para que un sistema pueda ser catalogado como distribuido, este debe cumplir con las siguientes características: ·Múltiples elementos de procesamiento. Estos elementos de procesamiento o nodos, no son otra cosa que una unidad de proceso con memoria propia. · Mecanismos de intercomunicación. Debido a que los diferentes nodos de procesamiento deben comunicarse entre sí, deben existir mecanismos que permitan que los procesos que se ejecuten en paralelo puedan sincronizarse y comunicarse entre sí; además, éstos mecanismos deben ser globales a todo el sistema, ya sea para comunicación local o remota. · Independencia a fallos en los nodos de procesamiento. Un sistema distribuido no puede fallar en su totalidad si uno de sus nodos falla, aunque esto implica que los sistemas de intercomunicación no son del todo confiables. ·Estado de compartición. Previendo el caso de fallos en el sistema, se debe de contar con mecanismos de recuperación, así que en caso de una falla (o caída del sistema), éste no debe perder su estado funcional. ·Esquema de protección. El sistema debe contar con instrumentos que vean por la seguridad de la información de uso en el sistema. CARACTERISITICAS CLAVES Soporte para compartir los recursos Confianza Concurrencia Escalabilidad Tolerancia a fallas Transparencia CONFIANZA Uno de los objetivos originales de la construcción de sistemas distribuidos fue el hacerlo mas confiable que los sistemas de un procesador. La idea es que si una máquina falla, alguna otra maquina se encargue del trabajo. En otras palabras, en teoría, la confiabilidad global del sistema podría ser el OR booleano de la confiabilidad de los componentes. Un sistema ampliamente confiable debe ser muy disponible, pero eso no es suficiente. Los datos confiados al sistema no deben perderse o mezclarse de manera alguna; si los archivos se almacenan de manera redundante en varios servidores, todas las copias deben ser consistentes. En gral. Mientras se tengan mas copias, será mejor la disponibilidad, pero también aumentará la probabilidad de que sean inconsistentes, en particular si las actualizaciones son frecuentes. Los diseñadores de todos los sistemas distribuidos deben tener en mente este dilema en todo momento. Otro aspecto de la confiabilidad es la seguridad. Los archivos y otros recursos deben ser protegidos contra el uso no autorizado. ESCALABILIDAD La mayor parte de los sistemas distribuidos están diseñados para trabajar con unos cuantos cientos de CPU. Es posible que los sistemas futuros tengan mayores ordenes de magnitud y la soluciones que funcionen bien para 200 máquinas fallen de manera total para 200 millones de máquinas. Después vendrá el acceso interactivo a todo tipo de bases de datos y servicios, desde la banca electrónica hasta la reservación de aviones, trenes, hoteles, teatros y restaurantes, por solo nombrar unos pocos. Antes de que pase mucho tiempo, tendremos un sistema distribuido con decenas de millones de usuarios. La cuestión es si los métodos que se desarrollan en la actualidad podrán escalarse hacia tales grandes sistemas. Aunque se sabe poco de los enormes sistemas distribuidos, es claro un principio guía: evitar los componentes, tablas y algoritmos centralizados. Las tablas centralizadas son casi tan malas como los componentes centralizados. Los algoritmos centralizados también son mala idea en un sistema distribuido de gran tamaño una enorme cantidad de mensajes debe tener una ruta a través de muchas líneas. Desde un punto de vista teórico, la vía óptima para hacer esto es recolectar la información completa relativa a la carga de todas las máquinas y todas las líneas, para después ejecutar un algoritmo de teoría de gráficas para calcular todas las rutas óptimas. TOLERANCIA A FALLAS Existen diferentes fallas, entre las cuales podemos encontrar: •Fallas de componentes: Los sistemas de computo pueden fallar debido a una falla en algún componente, como procesadores, la memoria, un dispositivo de entrada/salida, un cable o el Software. Una falla es un desperfecto causado tal vez por un error de diseño, un error de fabricación, un error de programación, etc. Las fallas se clasifican por lo general como transitorias, intermitentes o permanentes. Las fallas Transitorias ocurren una vez y después desaparecen si la operación se repite, la falla ya no se presenta. Si ocurre una falla Intermitente, esta desaparece, reaparece, etc. Un mal contacto de un conector causa con frecuencia una falla intermitente, las cuales son graves por su difícil diagnostico. Una falla Permanente es aquella que continua existiendo hasta reparar el componente con el desperfecto. Los circuitos quemados, los errores del software y el rompimiento de la cabeza del disco provoca con frecuencia fallas permanentes. El objetivo del diseño y construcción de sistemas tolerantes de fallas consiste en garantizar que el sistema continué funcionando de manera correcta como un todo, e incluso en la presentación de fallas. Este propósito es muy diferente al de garantizar que los componentes individuales sean muy confiables, pues permite que el sistema falle si alguno de los componentes lo hace. En un sistema distribuido crítico, con frecuencia nos interesa que el sistema pueda sobrevivir a las fallas de los componentes, en vez de hacer que las fallas sean poco probables. La confiabilidad de un sistema es en particular importante en un sistema distribuido, debido a la gran cantidad de componentes presentes; de ahí la mayor posibilidad de que falle uno de ellos. La replica activa es una técnica muy conocida para proporcionar la tolerancia de fallas mediante la redundancia física. La Tolerancia de fallas en general y la replica en particular, en muchos sistemas, los servidores actúan como grandes máquinas de estado finito: Aceptan solicitudes y producen respuestas. La lectura de solicitudes no altera el estado del servidor pero la escritura si lo hace. Si cada solicitud cliente se envía a cada servidor y todo son recibidos y procesados en el mismo orden entonces, después de procesar cada una todos los servidores que no han fallado tendrán con exactitud el mismo estado y darán las mismas respuestas. Tolerancia de fallas mediante respaldo primario La idea esencial del método de respaldo primario es que en cualquier instante, un servidor es el primario y realiza todo el trabajo. Si el primario falla, el respaldo ocupa de su lugar. En forma ideal, el reemplazo debe cubrir de manera limpia y ser notado únicamente por el sistema operativo cliente no por los programas de aplicación. TRANSPARENCIA La transparencia se divide en distintos tipos en un sistema distribuido: La transparencia de localización: Se refiere al hecho de que en un verdadero sistema distribuido, los usuarios no pueden indicar la localización de los recursos del hardware y software, como los CPU, impresoras, archivos y bases de datos. Transparencia de migración: Significa que los recursos deben moverse de una posición a otra sin tener que cambiar sus nombres. Transparencia de replica: Entonces el sistema operativo es libre de fabricar por su cuenta copias adicionales de los archivos y otros recursos sin que lo noten los usuarios. La Transparencia con respecto al paralelismo: En principio se supone que un sistema distribuido debe aparecer ante los usuarios como un sistema tradicional de tiempo compartido con un procesador. Factores que han afectado el desarrollo de los Sistemas Distribuidos. •Avances Tecnológicos. •Nuevos requerimientos. •Globalización •Aspectos Externos ( Culturales, Políticos, Económicos ). I•ntegración. 1.2 OBJETIVOS DE LOS SISTEMAS DISTRIBUIDOS •La carga de trabajo se puede dividir en varias máquinas en unas forma eficaz. •Comparten datos, además de mantenerlos actualizados en cualquier momento •Cada una de las localidades puede participar en la ejecución de transacciones que acceden a datos de una o varias localidades. •Mostrar flexibilidad. •Compartir toda clase de periféricos costosos. •Compartir la información, Fiabilidad, Disponibilidad y agilizar el procesamiento de consulta. Es común que la información generada en una parte sea requerida en otra, así que se ha logrado un ambiente de trabajo en el cual estaciones de trabajo se conectan a servidores para así poder compartir información y otros recursos. Otro de los objetivos de los sistemas distribuidos es el de economizar el rendimiento en cuanto a respuesta de procesamiento y almacenamiento. El costo de las computadoras depende en su rendimiento y la cantidad de almacenamiento que ésta posea; el costo de un sistema de comunicaciones depende el ancho de banda y en la longitud del canal de comunicación. Aún más; las aplicaciones actuales que incluyen animación en tiempo real y sonido, distan mucho de las aplicaciones tipo texto de hace varios años, por lo que se puede resumir que ninguna computadora centralizada ofrecerá a los usuarios todas las capacidades de procesamiento y de comunicación, por lo que los sistemas distribuidos se han hecho necesarios. Dado que las necesidades de los usuarios por lo general son cambiantes y cada vez más exigentes, un sistema distribuido debe ser capaz de permitir un crecimiento incremental; tanto en capacidades de proceso como de almacenamiento. Por lo general, cuando un sistema centralizado falla, se pierde toda la disponibilidad de procesamiento y sobre todo de la información confiada al sistema. Un sistema distribuido debe mantener disponibilidad de esos dos elementos en el caso de algún problema imprevisto. La disponibilidad se refiere a la fracción de tiempo en que se puede utilizar el sistema. Uno de los objetivos primordiales de los sistemas distribuidos es el de hacer a los sistemas de información más confiables que los sistemas centralizados. La idea general es que si una máquina llega a fallar, otra máquina ejecutará el trabajo. Entre estos objetivos se encuentran los siguientes: •Transparencia •Localización •Acceso •Concurrencia •Replicación •Fallo •Migración •Desempeño •Escalabilidad •Consistencia •Modulo de Fallo Independiente •Acceso simultaneo desde procesadores independientes •Interfaz del usuario •Replicación •Uso de la memoria caché •Eficiencia 1.3. VENTAJAS Y DESVENTAJAS DE LOS SISTEMAS DISTRIBUIDOS Los sistemas distribuidos tienen más de una década de haber surgido pero son tan complicados en su construcción tanto como una red de transporte público como el metro, y pasará más tiempo para que podamos entenderlos correctamente y construir uno de la manera más apropiada. La fuente básica de la complejidad de los sistemas distribuidos recae en que la interconexión de componentes conocidos puede generar nuevos problemas que no están a la vista en los componentes. En un contexto más general, existen fallas en todos los sistemas de computadoras, sólo que en un sistema distribuido resultan más visibles, dado que existen más componentes, y por lo tanto mayor interferencia e interconexiones, así como más tipos de fallas parciales (en cada componente por individual). Estos problemas causados por la interconexión de componentes pueden ser llamados problemas del sistema. · Un gran número de los problemas del sistema se presentan cuando se interconectan entre sí diferentes componentes que por lo regular trabajan independientemente. Este tipo de falla resulta más claro cuando en tiempo diferente se interconectaron diferentes redes de correo electrónico o sistemas de archivos de computadoras diferentes. ·Pueden existir también fallas de propagación. Esto se refiere a que la falla que sufra un nodo de procesamiento puede echar abajo a toda una red. Por lo general, este tipo de falla resulta de algún error de diseño; y por lo tanto, es mayor el esfuerzo para evitar esta falla al momento de diseñar un sistema distribuido. ·Se pueden tener fallas por el tamaño del sistema. Este problema es causado principalmente por dos factores: algunos componentes no tienen la misma capacidad de crecimiento que el resto de los componentes del sistema, convirtiéndose éste en un cuello de botella; o bien, por el uso de algoritmos que no tienen la capacidad de soportar un mayor crecimiento. Haciendo un poco más claro este concepto, podríamos decir que un sistema que trabaja bien con unos pocos nodos, quizá falle cuando éste incorpore a un ciento de nodos. ·La principal diferencia entre los sistemas distribuidos y los sistemas centralizados es que en los sistemas distribuidos, cuando falle un componente, el sistema en su totalidad no se vendrá abajo. Asimilando esta idea, una aplicación "distribuida" debe ser preparada para cuando se presenten las fallas parciales; lo que representa una complejidad adicional en el diseño de aplicaciones tolerantes a fallas. Si exponemos una comparación entre el diseño de sistemas para una computadora personal (PC), veremos que existe un grado de complejidad en su diseño; comparándolo con el diseño de un sistema de tiempo compartido, el grado de complejidad en su diseño es mucho mayor. En un sistema de tiempo compartido se contemplan temas como autenticación, control de acceso, control de concurrencias a los recursos, etc. Ahora, en un sistema distribuido se observa un incremento en la complejidad de su diseño, ya que aquí se deben de cumplir con otras características que hacen un sistema altamente disponible y tolerante a fallas. Se observan apartados tales como mecanismos para la localización de archivos y para la recuperación de particiones o fallas parciales, así como la coordinación de las réplicas de los estados de los servidores. La base comparativa para obtener las ventajas y desventajas de los sistemas distribuidos se hace con respecto a una computadora aislada. A continuación se anotan las ventajas de los sistemas distribuidos. Procesadores más poderosos y a menos costos •Desarrollo de Estaciones con más capacidades •Uso de nuevas interfaces. Avances en la Tecnología de Comunicaciones. •Disponibilidad de elementos de Comunicación. •Desarrollo de nuevas técnicas. Compartición de Recursos. •Dispositivos (Hardware). •Programas (Software). Eficiencia y Flexibilidad. •Respuesta Rápida. •Ejecución Concurrente de procesos (En varias computadoras). •Empleo de técnicas de procesamiento distribuido. Disponibilidad y Confiabilidad. •Sistema poco propenso a fallas (Si un componente no afecta a la disponibilidad del sistema). •Mayores servicios que elevan la funcionalidad ( Monitoreo, Telecontrol, Correo Eléctrico, Etc.). Crecimiento Modular. •Es inherente al crecimiento. •Inclusión rápida de nuevos recursos •Los recursos actuales no afectan. Con el uso de sistemas distribuidos se logra compartir información entre más de un usuario, información que en un momento dado, resulta de interés común a diferentes usuarios; lo cual no puede llevarse a cabo en sistemas de un sólo usuario. ·Aparte de que los usuarios pueden compartir información, éstos pueden también compartir diferentes dispositivos periféricos, como lo pueden ser impresoras láser o dispositivos de almacenamiento masivo, como una matriz de discos ópticos. ·Los sistemas distribuidos ofrecen más flexibilidad en el sentido en que las cargas de trabajo se pueden difundir entre diferentes computadoras de manera más eficaz, es decir; los trabajos no siempre se ejecutarán en la máquina del propietario. Cuando un nodo de procesamiento falla, el sistema en general sigue funcionando. Entre las desventajas de un sistema distribuido se pueden encontrar las siguientes: Debido a que la tecnología de los sistemas distribuidos aún está siendo explorada, no se tiene la experiencia suficiente en el diseño, implantación y uso del software distribuido. ·Un problema encontrado es el de las redes de comunicación, debido a que éstas llegan a perder mensajes, por lo que es necesario un software especial para controlar mensajes. Un detalle más encontrado en las redes es la saturación que puede sufrir la red por el gran número de mensajes que transitan por ella, y siendo estrictos, esta saturación puede negar algunas de las ventajas de los sistemas distribuidos. ·Otra de las desventajas de los sistemas distribuidos es la vulnerabilidad que puede sufrir la información que puede llegar a estar disponible para un gran número de usuarios del sistema. A continuación se muestran las siguientes desventajas: Requerimientos de mayores controles de procesamiento. Velocidad de propagación de información ( Muy lenta a veces). Servicios de replicación de datos y servicios con posibilidades de fallas. Mayores controles de acceso y proceso ( Commit ). Administración más compleja Costos. 1.4. COMPLEJIDAD DE LOS SISTEMAS DISTRIBUIDOS Conocimiento Global.- Se trata de conocer y actualizar el estado global (global Knowledge) de todos los procesos y recursos del sistema. Características: •Se tiene soluciones mucho más complejas. •No se tiene disponibilidad de una memoria global y un reloj global, no se pueden predecir los retardos y mensajes. •Una sola computadora no puede colectar toda la información del sistema distribuido. •Un problema que se presenta es determinar técnicas eficientes para establecer controles amplio en un sistema descentralizado y donde una sola computadora no conoce el estado actual y completo del sistema global. •Otro problema significativo se presenta debido a la ausencia de un reloj global y no permite tener formas de ordenar y controlar todos los eventos que ocurren en diferentes tiempos y en diferentes computadoras. Nomencaltura.- En ese aspecto se utilizan nombres para referirse a los objetos (Computadoras, impresoras, servicios, archivos y usuarios). Por ejemplo: El servicio de FTP o el servicio de DNS. Características: •En un servidor de nombres se mapea un nombre lógico a una dirección física por medio de tablas. •En un Sistema Distribuido los directivos pueden ser replicados y almacenados en varias lugares para reducir las posibilidades de fallas e incrementar la disponibilidad del servicio. •Se requiere más capacidad de almacenamiento. •Requiere de sincronización para actualizar los directorios de cada localización. •Puede utilizarse partición de directorios en lugar de replicación, pero es mucho más complejo. Escalabilidad. Los sistemas crecen con el tiempo y les puede afectar la poca disponibilidad y la degradación del rendimiento cuando el crecimiento ocurre. Compatibilidad.Se refiere a la interoperabilidad entre los recursos de un sistema. Generalmente existen 3 niveles de compatibilidad aplicados a los sistemas. Nivel binario.- Todos los procesadores ejecutan el mismo conjunto de instrucciones binarias, sin embargo los procesadores pueden diferir en rendimiento y su forma de entrada y salida. Ventajas: 1.Es más fácil el desarrollo de sistemas. 2.No pueden incluirse arquitecturas diferentes de un fabricante o varios. 3.Es raramente soportado por sistemas grandes. Nivel Ejecución.- Se presenta cuando el mismo código fuente puede ser compilado y ejecutado correctamente en cualquier computadora del sistema. Nivel Protocolo.- Es el menos receptivo de todos ya que se obtiene interoperabilidad con el simple requerimiento de los componentes de comunicación de los sistemas, soportan un conjunto común de protocolos por ejemplo las computadoras individuales pueden ejecutar diferentes Sistemas y sacrificar su operatibilidad. Sincronización de Procesos.- Es uno de los más importantes a considerar dentro de los sistemas distribuidos. La sincronización es difícil por la falta de una memoria común al no conocerse las características de los procesos que se ejecutan. Características: 1.Un Sistema Operativo Distribuido tiene que sincronizar los procesos que se están ejecutando en diferentes computadoras cuando estas tratan de accesar concurrentemente un recurso compartido, por ejemplo: un directorio. 2.El recurso compartido debe ser accesado por un proceso a la vez, a esto se le conoce como mutua exclusión. 3.Cuando se tiene acceso concurrentemente a un recurso compartido por diversas peticiones no coordinadas de usuarios, estas deben de seriabilizarse para asegurar la integridad del recurso. 4.Los procesos deben solicitar recursos locales o remotos y posteriormente liberados en cualquier orden que puede ser no conocido. 5.Si la ausencia de asignación de recursos de los procesos no se controla se puede presentar un " Dead Lock " ( Candado muerto o recurso bloqueado ) que degrade al sistema. Administración de Recursos. Se refiere en hacer que los recursos locales y remotos de una manera efectiva y fácil. Esta localización de recursos debe ser transparente para el usuario. Los recursos deben estar disponibles de la siguiente manera: Migración de datos.Los datos son traídos al lugar del sistema donde son necesitados, pueden llegar a ser desde un archivo ( local o remoto ) o hasta el contenido de una memoria física. Características: 1. Si un proceso actualiza un conjunto de datos, la localización original debe de ser también actualizada. 2. Se utiliza normalmente sistemas de archivos distribuidos que son componentes que implementan un sistema común de archivos disponibles para todas las computadoras autónomas del sistema. Su objetivo principal es proveer la misma capacidad funcional de acceso a los archivos sin importar su localización dentro de la red. A esto se le conoce como transparencia. 3. Otro de los elementos utilizados para la migración de datos es la administración de memoria compartida distribuida. Provee de un espacio de direccionamiento virtual que es compartido entre todas las computadoras del sistema distribuido. La mayor complejidad de implementar memoria compartida distribuida es el mantener la consistencia de los datos y reducir los retardos en el acceso de los mismos. Migración de Cálculos. Los cálculos procesados son llevados hacia otra localización y puede ser eficiente bajo ciertas circunstancias, por ejemplo: Cuando se requiere información de un directorio remoto es más eficiente enviar el mensaje solicitando la información necesaria y recibiéndola de regreso. Planeación Distribuida. Los procesos son transferidos de una computadora a otra dentro del sistema distribuido, esto es que un proceso puede ser ejecutado en una computadora diferente de donde fue originado. Este proceso de relocalización puede ser deseable si la computadora donde se origino se encuentra sobrecargada o no posee los recursos necesarios. La planeación distribuida es la responsable de todos los procesos distribuidos que se lleven a cabo entre computadoras sean efectuados con criterio y transparencia para obtener el máximo rendimiento. Seguridad. La seguridad de un sistema es la responsable de la integridad del Sistema Operativo dentro del diseño de un sistema de seguridad se consideren dos aspectos importantes: Autentificación. Es el proceso de garantizar que una entidad es quien debe ser. Autorización. Es el proceso de decidir que privilegios tiene una entidad y hacer que solo esos privilegios se encuentren disponibles. Estructuración. La estructuración de un sistema Operativo define como están organizadas sus partes y que comúnmente especifican el funcionamiento del mismo. En Sistemas Distribuidos Utilizan normalmente los siguientes métodos tradicionales de estructuración de un Sistema Operativo. Es el método tradicional de estructurar Sistemas Operativos, esto se lleva a cabo a través de un gran núcleo monolítico que contiene todas las funciones y servicios provistos por el Sistema Operativo. Existen casos entre los Sistemas Distribuidos donde el uso de un bloque monolítico grande no es de mucha utilidad para los servicios ofrecidos por el Sistema Operativo (Estaciones sin disco, estaciones con medios locales de almacenamiento, estaciones con procesadores matemáticos específicos, etc.). · En esta estructura se tiene una colección de procesos que son ampliamente independientes unos de otros. Los servicios del Sistema Operativo ( Administración de memoria distribuida, sistemas de archivos distribuidos, sincronización distribuida, procesos RPC, administración de tiempos, etc.) son implementados como procesos independientes. El núcleo del Sistema Operativo ( Comúnmente llamado Microkernel ) soporta la interacción entre los procesos que proveen los servicios al Sistema Operativo, también provee los servicios típicamente esenciales para cada computadora tal como la administración de tareas. El microkernel se ejecuta en todas las computadoras del sistema, mientras que los otros procesos pueden o no correr según se requiera. Estos sistemas son estructurados utilizando el concepto de objetos, donde cada uno de los servicios son implementados como un objeto del sistema y que en términos de un ambiente de objeto, se le conoce como colección. Cada objeto encapsula una estructura de datos y define un conjunto de operaciones para ese objeto, de manera que cada uno de estos objetos corresponden a un tipo definido, por ejemplo: Objetos de procesos, directorios o archivos. Este modelo se puede cambiar con la estructura colectiva y las técnicas de separación de funciones y mecanismos. Durante el transcurso de la evolución de los sistemas distribuidos, han surgido diferentes propuestas para clasificar a las computadoras con varios CPU. Es probable que una de las propuestas más aceptadas sea la de Flynn (1972) y en ella, Flynn propone dos características consideradas por él como esenciales: el número de flujos de instrucciones y el número de flujo de datos. Se puede catalogar a los equipos de cómputo de acuerdo a lo anterior de la siguiente forma: ·Una computadora con un sólo flujo de instrucciones y un flujo de datos (SISD, Single Instruction Single Data). Dentro de esta categoría caen todas las computadoras tradicionales con un sólo procesador. ·Computadoras con un flujo de instrucciones y varios flujos de datos (SIMD, Single Instruction Multiple Data). En esta categoría se incluyen aquellas computadoras que pueden instruir a varios procesadores para que, en paralelo, ejecuten instrucciones. ·Computadoras con múltiples flujos de instrucciones y varios flujos de datos (MIMD, Multiple Instruction Multiple Data). Esto significa un grupo de computadoras independientes, cada una con su propio contador de programa y datos. En conjunto, un sistema distribuido recae en esta clasificación. Existe otra propuesta en las que los sistemas MIMD se subdividen en dos grupos: ·Máquinas multiprocesadores. Existe un espacio de direcciones virtuales, compartido por todos los CPU del sistema. ·Computadoras multicomputadoras. Cada máquina tiene su propia memoria en particular. Así mismo, cada una de las dos categorías anteriores puede clasificarse de acuerdo a la red de comunicación con la que se interconectan los CPU, en las dos siguientes categorías. ·Tecnología de bus, en la que existe una sola red, plano de base, cable o cualquier otro medio que conecta a las computadoras. ·La tecnología de conmutador, cuenta con cables individuales que van de una máquina a otra y utilizan diferentes patrones de cableado. Los mensajes van a través de los cables y se hace una decisión de conmutación, para dirigir el mensaje a lo largo de la red. 1.5. TÉCNICAS DE CONSTRUCCIÓN Existen muchas técnicas de construcción de sistemas, pero a continuación sólo se menciona algunos: ·Multiprocesadores con base en buses. Estos sistemas cuentan con un número de CPU, conectados a un bus común, junto con un módulo de memoria, común para todos. El problema que podría existir en este esquema, es que el bus puede sobrecargarse, disminuyendo el rendimiento del sistema en general. Este problema se solucionaría instalando un caché en cada CPU, de tal forma que los CPU actualicen la información del caché y de la memoria, al momento de realizar escrituras. ·Multiprocesadores con conmutador. Este esquema puede usarse en la construcción de máquinas con más de 64 procesadores y conectarlos a una memoria común. Una solución, es dividir la memoria en módulos y conectarlos a los CPU con un conmutador de cruceta, como se muestra en la siguiente figura. Cada CPU y cada memoria cuentan con una conexión y en cada intersección, existe un conmutador del punto de cruce electrónico, que el hardware puede abrir y cerrar, así que cuando un CPU desea tener acceso a un bloque de memoria en particular, cierra momentáneamente al conmutador del punto de cruce. Un punto en contra del conmutador de cruceta es que con n CPU y n memorias, se requieren n2 conmutadores en los puntos de cruce. Se creó la red omega como una solución a este problema. Esta red contiene conmutadores 2 x 2, cada uno de los cuales tienen dos entradas y dos salidas, y cada entrada se puede dirigir a cualquier salida. ·Multicomputadoras con base en buses. La construcción de este sistema implica una conexión directa entre el CPU y una memoria lógica, pero el problema que existe, es lograr que los CPU se comuniquen. Un sistema de este tipo puede ser una LAN de velocidad desde los 10 hasta los 100 Mb/seg. ·Multicomputadoras con conmutador. En esta categoría, se utilizan una retícula y un hipercubo, como base de interconexión entre los CPU del sistema. En todo sistema de cómputo, se sabe que aunque el hardware es importante, el software los es mas, pues el software representa la interfaz con los usuarios. Similarmente al hardware, los sistemas operativos se clasifican en débilmente acoplados y fuertemente acoplados. El software débilmente acoplado permite que las máquinas de un sistema distribuido fundamentalmente sean independientes entre sí, pero que interactúen cuando sea necesario. A continuación se describen tres tipos de software a utilizar en un sistema de multiprocesadores o multicomputadoras. ·Software débilmente acoplado en hardware débilmente acoplado. El ejemplo más común de este tipo es una LAN, en la que cada usuario cuenta con su propia estación de trabajo, con o sin disco duro, además de contar con su propio sistema operativo. Para mejorar la comunicación y la distribución de información, en este modelo se utilizan una o varias computadoras llamadas servidores de archivos, que se encargan de resolver las solicitudes de escritura y lectura de información por los usuarios, a quienes se les llama clientes. ·Software fuertemente acoplado en hardware débilmente acoplado (multicomputadoras). El principal objetivo de este tipo de sistema, es que para los usuarios, toda la red de computadoras, funcione como un sólo sistema, en lugar de un conjunto de máquinas interconectadas entre sí. Los verdaderos sistemas distribuidos recaen en esta clasificación. · Software fuertemente acoplado en hardware fuertemente acoplado. Aunque aquí existen varias máquinas de propósito específico (como los servidores de bases de datos), los ejemplos más comunes a mostrar son los sistemas de tiempo compartido con más de un CPU. Para la ejecución de los procesos, se utiliza una cola de procesos listos para ejecución. La cola de ejecución es una estructura de datos almacenada en la memoria compartida, y existe un planificador para la asignación de cada proceso para uno de los CPU del sistema. El planificador hace uso de monitores o semáforos para la lograr exclusión mutua necesaria, para que un mismo proceso no sea asignado a más de un CPU. 1.7. ARQUITECTURA BASICA Todo software de aplicación se ejecuta sobre un software base (de sistemas) y en la construcción de sistemas distribuidos sucede lo mismo. La arquitectura básica sobre la que se ejecuta una aplicación distribuida se encarga de controlar y lanzar procesos remotos, así como múltiples hilos de comunicación. A continuación se muestran algunos de los requerimientos de aplicaciones distribuidas. ·Disponibilidad y confiabilidad. Una aplicación distribuida debe de poder usar diferentes nodos de procesamiento, para que así pueda continuar su ejecución en el caso de que surjan fallas imprevistas, sin transmitir o almacenar información errónea. Si los nodos de procesamiento son rápidos para recuperarse de las fallas, pueden usarse técnicas de procesamiento de transacciones acopladas con técnicas estándares como la retransmisión de mensajes. La confiabilidad de los componentes de hardware, aunque se asuma que pueda fallar independientemente, motiva la redundancia requerida en el sistema. La autonomía de los nodos de procesamiento incrementa la confiabilidad y disponibilidad del sistema, pues reduce la probabilidad de que cualquier organización puede desactivar un sistema entero, ya sea por malicia o negligencia. ·Seguridad. Una aplicación distribuida puede lograr niveles de seguridad muy altos aislando ciertos procesos o información en ciertos nodos específicos; dicho de otra forma, una arquitectura de hardware base con nodos de procesamiento autónomos, resulta mejor para el desarrollo de aplicaciones distribuidas [Mullender89]. La seguridad se debe extender al aspecto físico de los nodos y de las redes en general, pero cuando la seguridad física no es buena, resulta crucial la implementación eficiente de algoritmos de criptografía. Con el uso de estos algoritmos se asegura la privacidad de la información, más no la protege de ser borrada maliciosamente. ·Desempeño y crecimiento modular. Si una aplicación distribuida puede ser dividida en varios y diferentes hilos de ejecución que se ejecuten simultáneamente (un hilo de ejecución es el ambiente en el que existe un contador de programa y un conjunto de registros); ésta puede lograr cortos tiempos de respuesta y un mayor número de salidas directas. La división de una aplicación distribuida en diferentes hilos de control que se ejecutan en paralelo es el paradigma principal en la programación de sistemas distribuidos. Esta división paralela permite que una aplicación haga uso de diferentes procesadores en un sólo nodo y múltiples nodos de procesamiento en una red; además de que permite un crecimiento modular incrementando el número de procesadores o nodos de procesamiento. Un punto clave en la determinación de como descomponer una aplicación distribuida en diferentes hilos de ejecución en paralelo, depende del análisis del paralelismo del que se pueda tomar ventaja y esté disponible sobre una determinada arquitectura. ·Tiempo de respuesta limitado. Si un programa distribuido fue diseñado para usos de interactividad o de tiempo real, la aplicación puede limitar el tiempo que tomará despachar ciertas peticiones. Para el caso de una aplicación en tiempo real, ésta debe de ser programada para detectar alguna falla tan pronto como sea posible con el mínimo tiempo de espera a la respuesta de procesamiento. Control autónomo. En alguna aplicación distribuida puede ser necesario permitir que organizaciones separadas controlen una cierta cantidad de información y nodos de procesamiento; pero adicionalmente, un nodo puede necesitar la interacción con todos u otros nodos e información, sin importar la entidad que lo controle. Cada nodo de procesamiento por individual requieren ser computadoras separadas en una red, en lugar de ser nodos de propósito especial. ·Compartir recursos físicamente separados. Para que sea posible la compartición de dispositivos remotos, tales como servidores de archivos e impresoras, los componentes de comunicación del sistema deben permitir comunicaciones sobre redes de área extendida. La arquitectura básica se descompone en una capa de hardware, que comprende nodos de procesamiento y una red de comunicaciones para lograr intercomunicar a los nodos de procesamiento; y una capa del kernel del sistema operativo, que soporta múltiples hilos de control, direccionamiento de espacios, comunicación entre procesos. La base del hardware comprende a todos los nodos y una red de comunicaciones. En caso de fallas, los nodos de procesamiento cancelarán su trabajo en lugar de ejecutar operaciones erróneas, y pueden contar con uno o más procesadores, además de almacenamiento volátil y permanente, pudiendo existir diferentes tipos de nodos en un mismo sistema distribuido. Dentro de la capa del hardware que incluye una red de comunicaciones que provee servicios de entrega de punto a punto, la capa del kernel del sistema operativo lleva a cabo el control y direccionamiento de espacios direccionados, sincronización local, y control de comunicación local y remota entre hilos de control. Algunos ejemplos de kernels son Amoeba, Chorus, Mach, Quicksilver . La arquitectura básica se caracteriza por muchos ejes que describen el desempeño, confiabilidad y funcionalidad. A continuación se describen algunos consejos útiles cuando se pretenda construir un sistema distribuido: · Duplicar la información para aumentar la disponibilidad. Cuando se tiene una sola copia de alguna información, ésta no está disponible cuando se apaga la computadora donde reside la información. La única forma de hacer que la información o alguna conexión de red estén disponibles después una caída del sistema y fallas en la red, es duplicarlos. El tener réplicas de la información en el sistema requiere atención especial, pues cuando una copia cambia sin actualizar las otras, la información se torna inconsistente. ·Usar copias locales de la información para permitir una operación autónoma. En 1988 se usó por primera vez el termino stash, que se refiere a mantener copias (en una forma local) de la información que sea considerada como clave, para usarla en el momento en que la información remota no esté disponible. ·Explotar el estado de local con caché. El uso de cachés resulta parecido a la técnica de mantener copias de información clave (stash) y de la misma manera, se mantiene copias locales de la información remota. En ocasiones, la información remota es actualizada más lentamente que la mantenida como caché; en otras ocasiones, ambas son actualizadas simultáneamente. Esto depende en la naturaleza de los datos, la forma en que se comparten y la frecuencia de sus actualizaciones. ·Usar tiempos de espera para revocar. En varios casos, los sistemas bloquean algún recurso mientras hacen uso de él y si sucede alguna falla y el sistema se deshabilita, es posible que el recurso siga siendo inaccesible para otros diferentes procesos. Como una buena práctica en la construcción de sistemas distribuidos, se sugiere que se usen tiempos de espera cuando bloquean algún recurso para usarlo. Los clientes en el sistema deben refrescar sus bloqueos en cierto lapso de tiempo, porque de otra forma los perderían. ·Utilizar técnicas de criptografía para la autenticación y seguridad de la información. Nada de lo que circule en una red será totalmente secreto si no se usa la criptografía. En un ambiente de red, cada estación de trabajo usa una dirección que sirve para que reciba mensajes, pero esta dirección no sirve para autentificar los servicios solicitados. Para agregar una mayor seguridad, se recomienda el uso de algoritmos de autenticación, los cuales deben usar a la encriptación para evitar que la información secreta se vuelva del conocimiento público. |
Instituto Tecnológico de Acapulco Sistemas Distribuidos I |
ftp://[email protected]/www/index.html |
ftp://[email protected]/www/index.html |