viernes, 1 de junio de 2012

UNIDAD DOS: COMUNICACIÓN EN LOS SISTEMAS OPERATIVOS DISTRIBUIDOS

2.1 COMUNICACIÓN

2.1.1 COMUNICACIÓN CON CLIENTE/SERVIDOR (SOCKETS)

Cliente-Servidor.
Es el modelo que actualmente domina el ámbito de comunicación, ya que descentraliza los procesos y los recursos. En el cual el cliente es una aplicación, en un equipo, que solicita un determinado servicio y existe un software, en otro equipo, que lo proporciona.

Los servicios pueden ser:
a)    Ejecución de un programa. 
b)    Acceso a una Base de Datos. 
c)    Acceso a un dispositivo de hardware.

Socket.
Designa un concepto abstracto por el cual dos programas (posiblemente situados en computadoras distintas) pueden intercambiarse cualquier flujo de datos, generalmente de manera fiable y ordenada.
Los sockets proporcionan una comunicación de dos vías, punto a punto entre dos procesos. Los sockets son muy versátiles y son un componente básico de comunicación entre interprocesos e inter-sistemas. Un socket es un punto final de comunicación al cual se puede asociar un nombre.




Para lograr tener un socket es necesario que se cumplan ciertos requisitos:
1.      Que un programa sea capaz de localizar al otro.
2.      Que ambos programas sean capaces de intercambiarse información.

Por lo que son necesarios tres recursos que originan el concepto de socket:
a)      Un protocolo de comunicaciones, que permite el intercambio de octetos.
b)      Una dirección del Protocolo de Red (Dirección IP, si se utiliza el Protocolo TCP/IP), que identifica una computadora.
c)      Un número de puerto, que identifica a un programa dentro de una computadora. Con un socket se logra implementar una arquitectura cliente-servidor. la comunicación es iniciada por uno de los programas (cliente). Mientras el segundo programa espera a que el otro inicie la comunicación (servidor). Un Socket es un archivo existente en el cliente y en el servidor.

Si el cliente lanza una demanda de conexión y el servidor acepta la conexión, este abre un socket en un puerto diferente, para que pueda continuar escuchando en el puerto original nuevas peticiones de conexión, mientras que atiende a las peticiones del cliente conectado. El cliente y el servidor pu8eden ahora comunicarse escribiendo o leyendo en sus respectivos sockets.


Los tipos de socket definen las propiedades de comunicación visibles para la aplicación. Los procesos se comunican solamente entre los sockets del mismo tipo. Existen cinco tipos de sockets.

El Cliente actúa de la siguiente forma.
1.      Establece una conexión con el servidor (Crea un socket con el servidor).
2.      Mandar mensajes al servidor o Esperar un mensaje de él.(Consultas).
3.      Esperar su respuesta o contestarle (existen casos en que este paso no es necesario).
4.      Repetir los pasos 2 y 3 mientras sea necesario.
5.      Cerrar la conexión con el servidor.

El servidor actúa así.
1.      Inicializa un puerto de comunicación, en espera de clientes que intenten conectarse a él (Crea un serverSocket).
2.      Una vez que se conecta alguien, crea un hilo de ejecución para este usuario mientras que el thread principal vuelve al paso 1. Esto comúnmente se hace para que el servidor puede atender a varios clientes al mismo tiempo.
3.      Se comunica con el cliente mediante el socket creado entre el cliente y él.
4.      Espera que el cliente se vaya o lo bota el mismo servidor (Cierre el socket entre ellos) y elimina el thread de comunicación entre ellos.

Las propiedades de un socket dependen de las características del protocolo en el que se implementan. El protocolo más utilizado es TCP, aunque también es posible utilizar UDP o IPX. Gracias al protocolo TCP, los sockets tienen las siguientes propiedades:

1.      Orientado a conexión. Se garantiza la transmisión de todos los octetos sin errores ni omisiones.
2.      Se garantiza que todo octeto llegará a su destino en el mismo orden en que se ha transmitido.
Los tipos de socket definen las propiedades de comunicación visibles para la aplicación. Los procesos se comunican solamente entre los sockets del mismo tipo. Existen tres tipos básicos de sockets.
·         Socket de flujo: da un flujo de datos de dos vías, confiable, y sin duplicados sin límites de grabación. El flujo opera en forma parecida a una conversación telefónica. El tipo del socket es SOCK_STREAM, el cual en el dominio de Internet usa TCP (Transmission Control Protocol).
·         Socket de datagrama: soporta un flujo de mensajes de dos vías. En un socket de datagrama podría recibir mensajes en diferente orden de la secuencia de la cual los mensajes fueron envíados. Los límites de grabación en los datos son preservados. Los sockets de datagrama operan parecidos a pasar cartas hacia adelante y hacia atrás en el correo. El tipo de socket es SOCK_DGRAM, el cual en el dominio de internet usa UDP (User Datagram Protocol).
·         Socket de paquete secuencial: da una conexión de dos vías, secuencial y confiable para datagramas de una longitud fija máxima. El tipo de socket es SOCK_SEQPACKET. No hay protocolo en Internet implementado para este tipo de socket.

POGRAMA CLIENTE

Este se conecta a un servidor indicando el nombre de la máquina y el número puerto (tipo de servicio que solicita) en el que el servidor está instalado. Una vez conectado, lee una cadena del servidor y la escribe en la pantalla:

import java.io.*; import java.net.*; class Cliente
 {
   static final String HOST = “localhost”;
   static final int PUERTO=5000;
   public Cliente( )
  {
    try
        {
          Socket skCliente = new Socket( HOST , Puerto );
          Input Stream aux = skCliente.getInputStream();
          Data Input Stream? flujo = new Data Input Stream( aux );
          System.out.println( flujo.readUTF() );
          skCliente.close();
         }
            catch( Exception e )
           {
             System.out.println( e.getMessage() );
            }
        }
         public static void main( String[] arg )
          {
             new Cliente();
           }
 }
PROGRAMA SERVIDOR

El programa servidor se instala en un puerto determinado, a la espera de conexiones, a las que tratará mediante un segundo SOCKET. Cada vez que se presenta un cliente, le saluda con una frase “Hola cliente N”. Este servidor sólo atenderá hasta tres clientes, y después finalizará su ejecución, pero es habitual utilizar ciclos infinitos (while(true)) en los servidores, para que atiendan llamadas continuamente.Tras atender cuatro clientes, el servidor deja de ofrecer su servicio:

import java.io.* ; import java.net.* ; class Servidor
 {
  static final int PUERTO=5000;
  public Servidor( )
  {
  try
    {
     Server Socket skServidor = new Server Socket( PUERTO );
     System.out.println(“Escucho el puerto “ + PUERTO );
     for ( int numCli = 0; numCli < 3; numCli++; ) {
     Socket skCliente = skServidor.accept(); // Crea objeto
     System.out.println(“Sirvo al cliente “ + numCli);
     Output Stream aux = skCliente.getOutputStream();
     Data Output Stream flujo= new Data Output Stream( aux );
     flujo.writeUTF( “Hola cliente “ + numCli );
     skCliente.close();
    } // Cierra while

    System.out.println(“Demasiados clientes por hoy”);
  }
   catch( Exception e )
    {
    System.out.println( e.getMessage() );
    }
  }
  public static void main( String[] arg ) {
  new Servidor();
 }
}

2.1.2. COMUNICACIÓN CON RPC

El mecanismo general para las aplicaciones cliente-servidor se proporciona por el paquete Remote Procedure Call (RPC). RPC fue desarrollado por Sun Microsystems y es una colección de herramientas y funciones de biblioteca. Aplicaciones importantes construidas sobre RPC son NIS, Sistema de Información de Red y NFS, Sistema de Ficheros de Red.

Un servidor RPC consiste en una colección de procedimientos que un cliente puede solicitar por el envío de una petición RPC al servidor junto con los parámetros del procedimiento. El servidor invocará el procedimiento indicado en nombre del cliente, entregando el valor de retorno, si hay alguno. Para ser independiente de la máquina, todos los datos intercambiados entre el cliente y el servidor se convierten al formato External Data Representation (XDR) por el emisor, y son reconvertidos a la representación local por el receptor. RPC confía en sockets estandard UDP y TCP para transportar los datos en formato XDR hacia el host remoto. Sun amablemente a puesto RPC en el dominio público; se describe en una serie de RFCs.

La comunicación entre servidores RPC y clientes es un tanto peculiar. Un servidor RPC ofrece una o más colecciones de procedimientos; cada conjunto se llama un programa y es idenficado de forma única por un número de programa. Una lista que relaciona nombres de servicio con números de programa se mantiene usualmente en /etc/rpc.

2.1.3 COMUNICACIÓN EN GRUPO

La comunicación se clasifica de acuerdo al número de usuarios a los que se les ha enviado el mensaje:

ü  BROADCAST O DIFUSION FORZADA un nodo emite todos los escuchan y solo contesta a quien va dirigido el mensaje
ü  MULTICAST se entrega el mensaje a todos los anfitriones HOST que están compuestos de ciertas características.
ü  UNICAST o POINTCAST un nodo emite y otro recibe, solo escucha aquel a quien se dirigió el mensaje.
Una clasificación adicional es la realizada en base a grupos:

ü  LISTAS DE DESTINARIOS se tiene una lista de aquellos a los que se les enviara el mensaje.
ü  IDENTIFICADOR DE GRUPO se forman grupos y el mensaje es dirigido solo a los miembros de ese grupo.
ü  PREDICADOR DE PERTENENCIA se envía y otro recibe, solo escucha aquel a quien se dirigió el mensaje.

2.1.4 TOLERANCIA DE FALLOS

La difusión de los sistemas distribuidos incrementa la demanda de sistemas que esencialmente nunca fallen.
Los sistemas tolerantes a fallos requerirán cada vez más una considerable redundancia en hardware, comunicaciones, software, datos, etc.
La réplica de archivos sería un requisito esencial.
También debería contemplarse la posibilidad de que los sistemas funcionen aún con la carencia de parte de los datos.
Los tiempos de fallo aceptables por los usuarios serán cada vez menores.

2.2 SINCRONIZACIÓN DE RELOJES

El término sincronización se define como la forma de forzar un orden parcial o total en cualquier conjunto de eventos, y es usado para hacer referencia a tres problemas distintos pero relacionados entre sí:

1.      La sincronización entre el emisor y el receptor.
2.      La especificación y control de la actividad común entre procesos cooperativos.
3.      La serialización de accesos concurrentes a objetos compartidos por múltiples procesos. Haciendo referencia a los métodos utilizados en un sistema centralizado, el cual hace uso de semáforos y monitores; en un sistema distribuido se utilizan algoritmos distribuidos para sincronizar el trabajo común entre los procesos y estos algoritmos

2.2.1.      RELOJES FÍSICOS

La idea es proveer de un único bloque de tiempo para el sistema. Los procesos pueden usar la marca física del tiempo provista o leída de un reloj central para expresar algún orden en el conjunto de acciones que inician. La principal ventaja de este mecanismo es la simplicidad, aunque existen varios inconvenientes: el correcto registro del tiempo depende en la posibilidad de recibir correctamente y en todo momento, el tiempo actual desplegado por el reloj físico; los errores de transmisión se convierten en un impedimento para el orden deseado, el grado de exactitud depende de las constantes puestas en el sistema.
·         Los valores de tiempo asignados a los eventos no tienen porqué ser cercanos alos tiempos reales en los que ocurren.
·         En ciertos sistemas 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í.

2.2.2 RELOJES LÓGICOS

Las computadoras poseen un circuito para el registro del tiempo conocido como dispositivo reloj.
Es un cronómetro consistente en un cristal de cuarzo de precisión sometido a una tensión eléctrica que la cual oscila con una frecuencia bien definida. A cada cristal se le asocian dos registros:
ü  Registro contador.
ü  Registro mantenedor.
Cada oscilación del cristal decrementa en “1” al contador. Pero, cuando el contador llega a “0”:
ü  Se genera una interrupción.
ü  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, a cada interrupción se denomina marca de reloj .
Para una computadora y un reloj no interesan pequeños desfasajes del reloj porque todos los procesos de la máquina usan el mismo reloj y tendrán consistencia interna, lo que importan son los tiempos relativos.
En caso de varias computadoras con sus respectivos relojes es imposible garantizar que los cristales de computadoras distintas oscilen con la misma frecuencia por lo tanto habrá una pérdida de sincronía en los relojes (de software), es decir que tendrán valores distintos al ser leídos.
La diferencia entre los valores del tiempo se llama distorsión del reloj y podría generar fallas en los programas dependientes del tiempo.
Lamport demostró que la sincronización de relojes es posible y presentó un algoritmo para lograrlo.

Lamport señaló que la sincronización de relojes no tiene que ser absoluta:
·         Si 2 procesos no interactúan no es necesario que sus relojes estén sincronizados.
·         Generalmente lo importante no es que los procesos estén de acuerdo en la hora, pero sí importa que coincidan en el orden en que ocurren los eventos.

Para ciertos algoritmos lo que importa es la consistencia interna de los relojes:
·         No interesa su cercanía particular al tiempo real (oficial).
·         Los relojes se denominan relojes lógicos

2.2.3 USOS DE LA SINCRONIZACIÓN MANEJO DE CACHE, COMUNICACIÓN EN GRUPO, EXCLUSIÓN MUTUA, ELECCIÓN TRANSACCIONES ATÓMICAS 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, 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é.
La idea es conservar allí los bloques de disco de acceso mas reciente, para así manejar localmente los accesos repetidos a la misma información y no aumentar el tráfico de la red. La memoria caché con escritura directa equivale a usar el servicio remoto para accesos de escritura y explotar la memoria cache únicamente para accesos de lectura.
Comunicación en grupos
Si una máquina tiene un receptor de UTC, todas las máquinas deben sincronizarse con ella. Si ninguna máquina tiene un receptor de UTC:
          Cada máquina lleva el registro de su propio tiempo.
          Se debe mantener el tiempo de todas las máquinas tan cercano como sea posible.

Exclusión Mutua

Cuando un proceso debe leer o actualizar ciertas estructuras de datos compartidas, primero ingresa a una región crítica para lograr la exclusión mutua y garantizar que ningún otro proceso utilizará las estructuras de datos al mismo tiempo. En sistemas monoprocesadores las regiones críticas se protegen con semáforos, monitores y similares. En sistemas distribuidos la cuestión es más compleja.

Transacciones Atómicas

Las técnicas de sincronización ya vistas son de bajo nivel:
El programador debe enfrentarse directamente con los detalles de:
ü  La exclusión mutua.
ü  El manejo de las regiones críticas.
ü  La prevención de bloqueos.
ü  La recuperación de fallas.
Se precisan técnicas de abstracción de mayor nivel que:
Oculten estos aspectos técnicos y permitan a los programadores concentrarse en los algoritmos y la forma en que los procesos trabajan juntos en paralelo. Tal abstracción la llamaremos transacción atómica, transacción o acción atómica. La principal propiedad de la transacción atómica es el “todo o nada”, es decir; se hace todo lo que se tenía que hacer como una unidad o no se hace nada.

2.3 NOMINACION CARACTERÍSTICAS Y ESTRUCTURAS

Nominación es una correspondencia entre objetos de datos lógicos y físicos. Por ejemplo, los usuarios tratan con objetos de datos lógicos representados por nombre de archivos, mientras que el sistema manipula bloques de datos físicos almacenados en las pistas de los discos. Generalmente un usuario se refiere a un archivo utilizando un nombre, el cual se transforma en un identificador numérico de bajo nivel, que a su vez se corresponde con bloques en disco. Esta correspondencia multinivel ofrece a los usuarios la abstracción de un archivo, que oculta los detalles de cómo y donde se almacena el archivo en disco.

Estructuras de Nominación: Existen dos conceptos que hay que distinguir en relación con al correspondencia de nombres en un SAD. Transparencia de Nominación. El nombre de archivo no revela ningún indicio sobre de la ubicación del almacenamiento físico del archivo. Independencia de Ubicación, No es necesario modificar el nombre de un archivo cuando cambia su ubicación en el almacenamiento físico.

Esquema de Nominación: Hay tres enfoques principales para los esquemas de nominación en un SAD. En el enfoque mas sencillo, los archivos se nombran con una combinación del nombre de su anfitrión y su nombre local , lo que garantiza un nombre único dentro de todo el sistema. Por ejemplo, en Ibis, un archivo se identifica de manera única con el Nombre Anfitrión Local, donde nombre local es una ruta semejante a las de UNIX.

2.3.2 TIPOS DE NOMBRES USUARIO Y DE SISTEMA

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.

          Identificadores de puertos y procesos.
          Nombres textuales de servicios.
          Identificadores de recursos.
          Nombres de archivos.
          Direcciones físicas y lógicas de redes.
          El nombre de un objeto, por ejemplo un recurso o servidor; especifica lo que busca un proceso.
          Una dirección especifica dónde se encuentra el objeto.
          Una ruta especifica cómo llegar ahí. La modificación no autorizada del iPhone OS constituye una fuente muy importante de inestabilidad, interrupciones de los servicios y otros problemas.

Se pueden clasificar a las violaciones de seguridad en tres categorías:
·         Liberación no autorizada de información. Ocurre cuando una persona no autorizada tiene la posibilidad de leer y tomar ventaja de la información almacenada en una computadora. También se incluye el uso no autorizado de un programa.
·         Modificación no autorizada de información. Este tipo de violación se da cuando una persona tiene la posibilidad de alterar la información almacenada en un sistema computacional.
·         Bloqueo no autorizado de servicios. Se da cuando una persona no autorizada bloquea la capacidad de algún usuario autorizado, a accesar la información almacenada en un sistema computacional.

La seguridad en los sistemas computacionales puede dividirse en dos tipos:
·         Seguridad externa: (llamada comúnmente seguridad física), se encarga de regular el acceso al hardware del sistema, incluyendo: discos, cintas, reguladores y no-breaks, acondicionadores de aire, terminales, procesadores.
·         Seguridad interna: se encarga del acceso y uso del software almacenado en el sistema. A diferencia de la seguridad física, existe el tema de autenticación, en el cual el usuario se registra (login) en el sistema para accesar a los recurso de hardware y software del mismo.

Servidor DNS

·         Traducir su nombre de dominio en una dirección IP
·         Asignar nombres a todas las máquinas de una red y trabajar con nombres de dominio en lugar de IPs.
Un servidor DNS permite acceder a un dominio en internet entre los millones existentes. Básicamente su función es atender a las peticiones hechas por los distintos programas que acceden a internet y resolver la dirección IP asociada al dominio consultado. Cuando el servidor recibe una consulta realiza una búsqueda en caso de que ese servidor no disponga de la respuesta, el servidor comienza la búsqueda a través de uno o varios Servidores DNS hasta encontrar una respuesta positiva o negativa.

2.3.3 RESOLUCION Y DISTRIBUCION

Resolución de nombres de dominio
El mecanismo que consiste en encontrar la dirección IP relacionada al nombre de un ordenador se conoce como "resolución del nombre de dominio". La aplicación que permite realizar esta operación (por lo general, integrada en el sistema operativo se llama "resolución".
Cuando una aplicación desea conectarse con un host conocido a través de su nombre de dominio (por ejemplo, "es.kioskea.net"), ésta interroga al servidor de nombre de dominio definido en la configuración de su red. De hecho, todos los equipos conectados a la red tienen en su configuración las direcciones IP de ambos servidores de nombre de dominio del proveedor de servicios.

Distribución: Los sistemas operativos distribuidos abarcan los servicios de los de red, logrando integrar recursos (impresoras, unidades de respaldo, memoria, procesos, unidades centrales de proceso) en una sola máquina virtual que el usuario aceza en forma transparente. Es decir, ahora el usuario ya no necesita saber la ubicación de los recursos, sino que los conoce por nombre y simplemente los usa como si todos ellos fuesen locales a su lugar de trabajo habitual.

2.3.4 SERVIDORES Y AGENTES DE NOMBRE

Para implantar una nominación transparente se requiere un mecanismo para correspondencia entre un nombre de archivo y la ubicación asociada. Para que esta correspondencia sea manejable, hay que agrupar conjuntos de archivos en unidades componentes y proporcionar la correspondencia según las unidades componentes, no por archivos.

2.3.5 MAPAS DE DIRECCIONES

Existe una coherencia directa entre los accesos y el tráfico que va y viene del servidor. De notar que se presenta una analogía directa entre los métodos de acceso a disco en los sistemas de archivos convencionales y el método de servicio remoto en un SD. El método de servicio análogo efectúa un acceso al disco para cada solicitud de acceso.

Una manera de lograr esta transferencia es a través del método de servicio remoto, con el cual se entregan al servidor las solicitudes de acceso, la maquina servidora lleva a cabo dichos accesos y los usuarios se devuelven al usuario.

2.3.6 MAPAS DE RUTAS

En un sistema distribuido, el usar un nombre para los propósitos de la comunicación no es bastante. Porque los procesos en ejecución se comunican desde diferentes computadoras. El conocimiento de su localización actual es necesario. Esto conduce a los términos básicos en esta área: un nombre, una dirección, y una ruta. El significado de estos términos se puede explicar usando las definiciones intuitivas siguientes:


1.      El nombre de un objeto (por ejemplo, recursos, servidor) específico que el proceso busca (al qué desea tener acceso)
2.      Una dirección especifica donde ésta
3.      Una ruta especifica cómo esta ahí


Cada uno de estos identificadores representa un atascamiento más apretado de la información:
1.                   Los nombres son mapeados en direcciones. Este mapeo es necesario para la aplicación en ejecución, puesto que la sintaxis y la semántica de nombres dependen enteramente de qué tipos de entidades se están nombrando y también qué uso se está haciendo de ellas
2.                   Las direcciones son mapeadas en los routeadores.

2.3.7 MODELO DE TERRY

Los mensajes remitentes entre los procesos y objetos soportados por un sistema operativo precisa la presentación para el sistema operativo de los nombres de los objetos que los procesos quieren ganar acceso a. El problema es cómo localizar objetos nombrados. Esto está directamente conectado a la gerencia del espacio de nombre y las estructuras de la facilidad de nombramiento.

Como ha visto, acto de servidores de nombre como agentes obligatorios distribuidos que amarran el nombre de un objeto para una cierta cantidad de sus propiedades, incluyendo la posición del objeto. Algunos servidores de nombre pueden almacenar información acerca de los objetos particulares. Tales servidores de nombre se llaman las autoridades que nombra o servidores autoritarios de nombre para eso objetan. El problema es cómo distribuir servidores de nombre, esto es, que de las estructuras de una facilidad de nombramiento es el mejor.

Los criterios diferentes pueden ser tomados en cuenta al desarrollar la facilidad de nombramiento para sistemas de cómputo distribuidos. En la etapa de análisis de la estructura de facilidad de nombramiento, usaremos la mayor parte de importante de esos criterios, a saber actuación. Este criterio es importante para un ambiente distribuido porque que hay usualmente un número de redes interconectadas (lo mismo es cierto en caso de una red de área local conectando un número grande de computadoras personales y / o los puestos de trabajo, y los servidores diferentes), lo cual insinúa que el costo de comunicación entre clientes y servidores de nombre es el cuello de botella principal en localizar recursos remotos. En este caso, la actuación de averiguaciones del servidor de nombre es dominada por el número de servidores de nombre que deben ser a los que se ganó acceso y el costo de ganar acceso a esos los servidores de nombre.

No hay comentarios:

Publicar un comentario