jueves, 15 de abril de 2010

UNIDAD 2
Comunicación en los Sistemas Operativos Distribuidos
2.1 Comunicación SOD

Para lograr la distribución de procesos se requiere de mecanismos que permitan coordinar y controlar la ejecución de procesos en ambientes no centralizados, ya sean de manera local y remota.

Los primeros protocolos para la distribución de procesos remotos fueron para máquinas homogéneas
Otra forma de comunicación fue la estandarización de sistemas heterogéneos con interfaz común UUCP (Unix to Unix Copy Protocol) que dio origen a los comandos R (rcopy, rlogin, rsh).

La comunicación entre procesos (IPC) es parte fundamental de las primitivas de sincronización de un sistema distribuido.
Los mecanismos de comunicación entre procesos no sólo aplican a aplicaciones distribuidas sino a cualquier tipo.

El mecanismo de comunicación entre procesos más famosos es el IPC (Inter Process Comunication) de Unix System V.
El otro punto a tratar es sobre los mecanismos de intercomunicación entre entidades de procesamiento diferentes con diferentes sistemas operativos: POSIX.
2.1.1 Comunicación Sockets

Los sockets son el mecanismo de sincronización distribuida más importante.
Se les denomina conectores por que pueden unir un proceso cliente y un proceso servidor, de manera semejante a como se puede unir un enchufe de un dispositivo eléctrico con su respectivo zócalo

El mecanismo de sockets más conocido es el referente a la API de Berkeley.
Está API está implementado en prácticamente todos los sistemas Unix, por lo que se maneja C, pero también está portado a otras arquitecturas como Windows (WinSock) y a otros lenguajes como Java
Los sockets trabajan sobre capa 4 (Transporte) del modelo OSI, aunque algunos autores la ubican en la capa 5 (Sesión).
Para la comunicación de procesos remotos se necesita conocer la dirección de la máquina destino y el puerto donde se va a escuchar
2.1.2 COMUNICACIÓN RPC

Las llamadas a procedimientos remotos (RPC) fue el primer intento por obtener un middleware para la construcción de sistemas distribuidos.
Su funcionamiento se basa en la arquitectura cliente/servidor siendo totalmente transparente para el usuario.

El problema del manejo de procesos distribuidos con sockets radica en que se basa en el flujo de E/S, haciendo los programas más difíciles de estructurar.
En 1984 Birelly y Nelson idearon el modelo de RPC a semejanza del llamado de procedimientos locales (LPC).

El nivel de transparencia en RPC es muy alto ya que el usuario no tiene que ver con detalles de conexión.
La simplicidad de toda esta heterogeneidad en el llamado a un procedimiento remoto es realizado por los stubs (resguardos) tanto en el cliente como en el servidor.
Para la transferencia de datos entre los stubs, se necesita de un proceso de empacar desempacar los parámetros y resultados. Dicho proceso recibe el nombre de marshalling.
Los stubs se comunican con los núcleos de cada proceso logrando una transparencia muy alta
2.1.3 Comunicación en Grupo

Se define a un grupo como un conjunto de procesos que actúan entre ellos encierto sistema.

Los grupos son dinámicos, ya que pueden aceptar nuevos procesos o estos pueden dejar a su grupo.

Los grupos pueden ser abiertos o cerrados dependiendo de cómo es el paso de mensajes entre los elementos del grupo.
Una de las mayores problemáticas con respecto a la comunicación en Sistemas Distribuidos es la forma en como podemos comunicar varios procesos distribuidos a la vez.

La comunicación tradicional es del tipo puntual (unicast) o bien hacia todos con el uso de la difusión (broadcast). El problema radica en que al hacer un broadcast los mensajes llegan hacia todas las máquinas y no hay forma alguna de discriminar hacia un grupo determinado de procesos. Por otra parte, el hacer broadcast está limitado en muchas redes como Internet donde no existe, por este motivo suele utilizarse la técnica de multicast.
2.1.4 Tolerancia a fallos

La tolerancia a fallas es considerada la principal característica que debe de tener un sistema distribuido para alcanzar el principio de transparencia.
Para lograr la tolerancia a fallos se necesita de una buena comunicación entre procesos distribuidos y sobretodo de una correcta coordinación entre procesos

Un Sistema Distribuido en base a la coordinación de sus procesos puede ser:

Asíncrono: no hay coordinación en el tiempo.
Síncrono: se suponen límites máximos para el retraso de mensajes.

El primer factor a tomar en cuenta es que el canal de comunicación este libre de errores (canal confiable).
Para garantizar que el canal sea confiable se debe de realizar lo siguiente:

Retransmisión de mensajes.
Debe haber redundancia de canales
La entrega de un paquete sea dentro de un tiempo límite especificado

En general, se considera que los canales de comunicación son fiables y que cuando falla la comunicación es debido a la caída del proceso.
Las fallas de partición son las fallas de comunicación más importantes ya que fragmentan la red en pequeñas áreas llamadas particiones haciendo imposible el manejo de la consistencia de los datos.
Son difíciles de detectar ya que no son visibles para todos los nodos de la red.
2.2 Sincronización en los Sistemas Distribuidos

La sincronización de procesos en los sistemas distribuidos resulta más compleja que en los centralizados, debido a que la información y el procesamiento se mantiene en diferentes nodos.
Un sistema distribuido debe mantener vistas parciales y consistentes de todos los procesos cooperativos.
Sincronización es la forma de forzar un orden parcial o total en cualquier conjunto de evento
Se utilizan algoritmos distribuidos para sincronizar el trabajo común entre los procesos y estos algoritmos tienen las siguientes propiedades:
inaceptable que se concentre en un nodo, a toda la información y procesamiento
2.2.1Relojes Físicos

El algoritmo de Lamport proporciona un orden de eventos sin ambigüedades, pero [25, Tanenbaum]:
Los valores de tiempo asignados a los eventos no tienen porqué ser cercanos a los tiempos reales en los que ocurren. En ciertos sistemas (ej.: sistemas de tiempo real ), es importante la hora real del reloj: Se precisan relojes físicos externos (más de uno). Se deben sincronizar: Con los relojes del mundo real. Entre sí. La medición del tiempo real con alta precisión no es sencilla.

Internamente cada computadora contiene un reloj físico, el cual cuenta la frecuencia de las oscilaciones de un cristal para medir el tiempo a través de una estampa o marca de tiempo.

Cada máquina puede interpretar de forma distinta los pulsos de reloj, aunque la diferencia puede ser prácticamente nula, después de un tiempo se pueden ver los efectos.
2.2.2 Relojes Logicos

Las computadoras poseen un circuito para el registro del tiempo conocido como dispositivo reloj [25, Tanenbaum].
Es un cronómetro consistente en un cristal de cuarzo de precisión sometido a una tensión eléctrica que:
• Oscila con una frecuencia bien definida que depende de:
o Al forma en que se corte el cristal.
o El tipo de cristal.
o La magnitud de la tensión.
• A cada cristal se le asocian dos registros:
o Registro contador.
o Registro mantenedor.
• Cada oscilación del cristal decrementa en “1” al contador.
• Cuando el contador llega a “0”:
o Se genera una interrupción.
o El contador se vuelve a cargar mediante el registro mantenedor.
• Se puede programar un cronómetro para que genere una interrupción “x” veces por segundo.
• Cada interrupción se denomina marca de reloj.
Para una computadora y un reloj:
• No interesan pequeños desfasajes del reloj porque:
o Todos los procesos de la máquina usan el mismo reloj y tendrán consistencia interna.
o Importan los tiempos relativos.
Para varias computadoras con sus respectivos relojes:
• Es imposible garantizar que los cristales de computadoras distintas oscilen con la misma frecuencia.
• Habrá una pérdida de sincronía en los relojes (de software), es decir que tendrán valores distintos al ser leidos.
La diferencia entre los valores del tiempo se llama distorsión del reloj y podría generar fallas en los programas dependientes del tiempo.
2.2.3Usos De La Sincronizacion, Manejo De Cache, Comunicacion En Grupo, Exclusion Mutua, Eleccion Transacciones, Atomicas E Interbloqueo

Memoria Caché

En los sistemas de archivos convencionales, el fundamento para la memoria caché es la reducción de la E/S de disco (lo que aumenta el rendimiento), en un SAD el objetivo es reducir el tráfico en la red. Esquema Básico, el concepto de memoria caché es sencillo, si los datos necesarios para satisfacer la solicitud de acceso no se encuentran en la memoria cache, se trae una copia de servicio al usuario y los accesos se llevan a cabo con la copia de memoria caché.

Exclusión Mutua

La exclusión mutua garantiza que sólo un proceso esté en una región crítica.
La exclusión mutua en sistemas distribuidos basa su funcionamiento en variantes de sistemas centralizados.
Cuando un proceso distribuido desea entrar a una región crítica debe de enviar la solicitud a todos los demás procesos recibiendo respuestas de todos.
Si otro proceso hace la solicitud al “mismo tiempo” se tomará como criterio de desempate la marca de tiempo o prioridad. Existen varias formas de exclusión mutua
Exclusión mutua en anillo: similar al manejo de redes con topología física y lógica en anillo (TokenRing, TokenBus) teniendo un mensaje especial llamada token para poder entrar a la sección crítica

Transacciones atómicas

Un esquema para garantizar la adecuada sincronización de la información en sistemas centralizados como distribuidos son el uso de transacciones.
Las transacciones manejan 4 propiedades básicas: atómicas, consistentes, aisladas y durables (ACID por sus siglas en inglés).

Interbloqueo

Surge cuando un proceso busca el recurso ocupado por otro proceso y a su vez este proceso busca otro recurso, formado una cadenita que al final se cierra, por lo cual ningún proceso puede avanzar.
Se manejan variantes de algoritmos centralizados para tratar de detectar, prevenir y eliminar interbloqueos.
2.3 Nominación Características y estructuras

 Un nombre es más que una cadena de caracteres. Representa un punto de acceso hacia un objeto.
 La característica principal de un sistema de nombre es que no debe de presentar ambigüedades, para un momento dado, un nombre refiere a uno y sólo un recurso en el sistema.

Características de la nominación

 Los sistemas de nombres deben de almacenarse en un repositorio de datos proveyendo interfaces de acceso.
 Otro nombre que reciben los servicios de nominación son los servicios de directorios. Los cuales permiten compartir información entre diferentes entidades en diferentes directorios (LDAP, X.500, Active Directory, etc.)
 Los nombres pueden enfocarse a ser más simples de localizar o a ser más entendibles por los humanos.
 Los sistemas de nombres deben de ser capaces de localizar al mismo objeto independiente de su ubicación.
 Los sistemas de nombres deben de proporcionar sistemas de comunicación accesibles para todos los procesos.
2.3.2 Tipos de nombres usuario y de sistema

 Los nombres pueden ser absolutos o relativos dependiendo si la dirección a la cual están asociada se realiza de manera directa o bien a partir de la ubicación actual.
 Los nombres pueden tener alias, los cuales son otros nombres con los cuales se referencia al mismo objeto.
 Los nombres también pueden ser de usuario o de sistema. Son de usuario cuando éste les asocia un identificador a un objeto. Son de sistema aquellos que el sistema operativo le asigna internamente a un objeto de usuario.

2.3.3 Resolución y distribución



 La resolución es el proceso de convertir un nombre hacia la ubicación real del recurso.

 La distribución es el proceso por el cual un nombre puede difundirse a través de todo el sistema y ser reconocido por cualquier entidad en cualquier momento.

2.3.4 Servidores y agentes de nombres

Los agentes de nombres son los procesos que permiten actualizar el repositorio de datos con los nombres y la ubicación de cada uno de los recursos en la red.
2.3.5 Mapeo de direcciones

El mapeo de direcciones corresponde en la relación de equivalencia entre un tipo de nombre a otro tipo de nombre; por ejemplo, de un nombre de usuario a un nombre de sistema.

Para poder ejecutar instrucciones, se debe tener un mecanismo de traducción de direcciones virtuales a reales. Para ello, se necesitan dos cosas.
Primero, el compilador manejará una dirección base más un desplazamiento al referirse a las instrucciones.
Segundo, el sistema operativo asignará como dirección base el número de página, al paginar al proceso.
De esta manera, puede buscarse el inicio de una página en memoria, sumarle el desplazamiento y así obtener la dirección real de una instrucción.
2.3.6 MAPEO DE RUTAS

El “Technology Roadmapping” o mapeo de rutas tecnológicas, es un método específicamente desarrollado para la realización de estudios de Prospectiva Tecnológica. El modelo se basa en las directrices dictadas por las necesidades del mercado ayudando a identificar, seleccionar y desarrollar con posterioridad las alternativas de tecnología necesarias para satisfacer un conjunto de necesidades de un producto.

Se trata de una prospectiva por objetivos que, entre otras funciones, ayuda a identificar necesidades y tecnologías, proporciona información necesaria en la toma de decisiones, identifica tecnologías críticas o vacíos en tecnología que deben llenarse para poder desarrollar productos con desempeños específicos y analiza el proceso a través del tiempo.
2.3.7 Modelo de Terry

 Facilidad centralizada de nombramiento
 Facilidad replegada de nombramiento
 Facilidad descentralizada de nombramiento
 Facilidad distribuida de nombramiento
 Facilidad jerárquica de nombramiento.

A continuación se muestra el caso de ejemplo de un sistema de nombres: el DNS

o DNS se originó para sustituir el viejo esquema de almacenar los nombres de las máquinas en un archivo (/etc./hosts).
o Actualmente existen diversas variantes de DNS como el DDNS o DNS dinámico.
o Procesos como portmap, rmiregistry, orbd y UDDI se les considera servidores de nombres.
o Las operaciones más comunes con los servidores de nombres son la resolución (obtención del nombre real a partir del abstracto) y la resolución inversa (obtención del nombre abstracto a partir del real).
o Se puede utilizar el comando lookup o dig para hacer la resolución de nombres en sistemas DNS.

lunes, 12 de abril de 2010

UNIDAD 1
LOS SISTEMAS OPERATIVOS EN
AMBIENTES DISTRIBUIDOS
1.1 Sistemas Distribuidos

“Sistemas cuyos componentes hardware y software, están en ordenadores conectados en red, se comunican y coordinan sus acciones mediante el paso de mensajes, para el logro de un objetivo. Se establece la comunicación mediante un protocolo prefijado por un esquema cliente-servidor”.

Introducción.- Donde especificamos el preámbulo del tema, el objetivo del trabajo y el contenido del mismo.

Desarrollo.- Donde se describen los aspectos involucrados en los sistemas distribuidos.

Referencias.- Donde especificamos las fuentes que fueron consultadas para el presente estudio.
1.1.1 Ventajas y Desventajas contra Sistemas Centralizados

Ventajas

*Aumento de la disponibilidad
* Mejora del desempeño
* Balanceo en la carga de trabajo
* Compartición de recursos
* Compartición de información
* Confiabilidad, disponibilidad y tolerancia a fallas
* Modularidad en el desarrollo
* Flexibilidad
* Crecimiento incremental
* Reducción de costos
* Mayor capacidad de modelar estructuras organizacionales

Desventajas

* Uso ineficiente de los recursos distribuidos
* Capacidad reducida para administrar apropiadamente grupos de procesadores y
memoria localizada en distintos sitios
* Enorme dependencia del desempeño de la red y de la confiabilidad de la misma.
* Debilitamiento de la seguridad.
* Mayor complejidad en la administración y mantenimiento.
* Mayor complejidad en su construcción.
1.1.2 Modelo Cliente- Servidor

TCP es un protocolo orientado a conexión. No hay relaciones maestro/esclavo. Las aplicaciones, sin embargo, utilizan un modelo cliente/servidor en las comunicaciones.

Un servidor es una aplicación que ofrece un servicio a usuarios de Internet; un cliente es el que pide ese servicio. Una aplicación consta de una parte de servidor y una de cliente, que se pueden ejecutar en el mismo o en diferentes sistemas.
Los usuarios invocan la parte cliente de la aplicación, que construye una solicitud para ese servicio y se la envía al servidor de la aplicación que usa TCP/IP como transporte.

El servidor es un programa que recibe una solicitud, realiza el servicio requerido y devuelve los resultados en forma de una respuesta. Generalmente un servidor puede tratar múltiples peticiones (múltiples clientes) al mismo tiempo.
1.1.3 Características Hardware Sistemas Distribuidos

Todos los sistemas distribuidos constan de varias cpu, organizadas de diversas formas, especialmente respecto de:
• La forma de interconectarlas entre sí.
• Los esquemas de comunicación utilizados.
Existen diversos esquemas de clasificación para los sistemas de cómputos con varias CPU:
• Poseen un único procesador.
SIMD (Single Instruction Multiple Data: un flujo de instrucciones y varios flujos de datos):
• Se refiere a ordenar procesadores con una unidad de instrucción que:
o Busca una instrucción.
o Instruye a varias unidades de datos para que la lleven a cabo en paralelo, cada una con sus propios datos.
MISD (Multiple Instruction Single Data: un flujo de varias instrucciones y un solo flujo de datos):
• No se presenta en la práctica.
MIMD (Multiple Instruction Multiple Data: un grupo de computadoras independientes, cada una con su propio contador del programa, programa y datos)
1.1.4 Características Software de los sistemas distribuidos

Concurrencia.- Esta característica de los sistemas distribuidos permite que los recursos disponibles en la red puedan ser utilizados simultáneamente por los usuarios y/o agentes que interactúan en la red.
Carencia de reloj global.- Las coordinaciones para la transferencia de mensajes entre los diferentes componentes para la realización de una tarea, no tienen una temporización general, está más bien distribuida a los componentes.
Fallos independientes de los componentes.- Cada componente del sistema puede fallar independientemente, con lo cual los demás pueden continuar ejecutando sus acciones. Esto permite el logro de las tareas con mayor efectividad, pues el sistema en su conjunto continua trabajando.
1.1.5 Direccionamiento Lógico, Físico Sistemas Distribuidos

Una dirección generada por la CPU se denomina dirección lógica en cambio a la que es percibida por unidad de memoria se denomina dirección física.

Los esquemas de vinculación de direcciones durante la compilación y durante la carga dan pie a un entorno en el que las direcciones lógicas y físicas son las mismas. En cambio, la ejecución del esquema de vinculación de direcciones durante la ejecución produce un entorno en el que las direcciones lógicas y físicas difieren. En este caso la dirección lógica suele llamarse dirección virtual.

El proceso desde que los datos son incorporados al ordenados hasta que se transmiten al medio se llama encapsulación. Estos datos son formateados, segmentados, identificados con el direccionamiento lógico y físico para finalmente ser enviados al medio. A cada capa del modelo OSI le corresponde una PDU (Unidad de Datos) siguiendo por lo tanto el siguiente orden de encapsulamiento: DATOS-SEGMENTOS-PAQUETES-TRAMAS-BITS

CAPA TRANSMITE
APLICACIÓN - DATOS
PRESENTACION
SESIÓN
TRANSPORTE - SEGMENTOS
RED - PAQUETES
ENLACE DED DATOS - TRAMAS
FÍSICA - BITS
1.2 Concepto de los Sistemas de Red

Son aquellos sistemas que mantienen a dos o más computadoras unidas a través de algún medio de comunicación (físico o no), con el objetivo primordial de poder compartir los diferentes recursos y la información del sistema.
El primer Sistema Operativo de red estaba enfocado a equipos con un procesador Motorola 68000, pasando posteriormente a procesadores Intel como Novell NetWare. Los Sistemas Operativos de red más ampliamente usados son: Linux, Novell NetWare, Personal, NetWare, LAN Manager, Windows NT Server UNIX
1.3 Conceptos de los sistemas distribuidos

Los sistemas distribuidos están basados en las ideas básicas de transparencia, eficiencia, flexibilidad, escalabilidad y fiabilidad. Sin embargo estos aspectos son en parte contrarios, y por lo tanto los sistemas distribuidos han de cumplir en su diseño el compromiso de que todos los puntos anteriores sean solucionados de manera aceptable.

Transparencia
El concepto de transparencia de un sistema distribuido va ligado a la idea de que todo el sistema funcione de forma similar en todos los puntos de la red, independientemente de la posición del usuario. Queda como labor del sistema operativo el establecer los mecanismos que oculten la naturaleza distribuida del sistema y que permitan trabajar a los usuarios como si de un único equipo se tratara.

Eficiencia
La idea base de los sistemas distribuidos es la de obtener sistemas mucho más rápidos que los ordenadores actuales. Es en este punto cuando nos encontramos de nuevo con el paralelismo. Para lograr un sistema eficiente hay que descartar la idea de ejecutar un programa en un único procesador de todo el sistema, y pensar en distribuir las tareas a los procesadores libres más rápidos en cada momento.

Flexibilidad
Un proyecto en desarrollo como el diseño de un sistema operativo distribuido debe estar abierto a cambios y actualizaciones que mejoren el funcionamiento del sistema. Esta necesidad ha provocado una diferenciación entre las dos diferentes arquitecturas del núcleo del sistema operativo: el núcleo monolítico y el micronúcleo.