miércoles, 24 de octubre de 2012

PVM (Parallel Virtual Machine, Maquina Virtual Paralela)

 Consiste en un software y un conjunto de librerias, que permiten establecer una coleccion de uno o mas sistemas de computacion, con el fin de poder integrar dichos sistemas en un esquema de una sola maquina virtual.

Opera sobre diferentes plataformas de UNIX y Windows. Puede establecerse en cualquier esquema de red heterogenea, sobretodo en el ambiente de Internet.

Brinda rutinas en lenguajes C y en Fortran para procesos como paso de mensajes asincronicamente y para el control de procesos. Ademas de ofrecer un paralelismo escalable, entre otras muchas ventajas.

Es muy utilizado para realizar y desarrollar aplicaciones cientificas complejas que requieren un esquema de programacion en paralelo, dada su compatibilidad entre sistemas operativos, es muy portable y facil de instalar.

Actualmente PVM esta en la version 3.4.6. Pero para exponer los ejemplos nos basaremos en la version 3.0.

Ventajas

Es una de las librerías de paso de mensajes más fáciles de usar.

Flexible: Control arbitrario de dependencia de estructuras.

 La aplicación decide:
  • Donde y cuando ejecutar o terminar las tareas.
  • Que maquinas se añaden o se eliminan desde la máquina virtual paralela.
  • Que tareas se pueden comunicar y/o sincronizar con otras.

Desventajas

Al ser un esquema heterogéneo de ordenadores, el rendimiento depende de la capacidad de procesamiento de los ordenadores vinculados al esquema de la máquina virtual (lo que era una ventaja tiene una su desventaja).

Es algo deficiente en cuanto al paso de mensajes se refiere.

Configuración

Para configurar la MV utilizamos el programa “pvm” en cualquiera de los ordenadores que forman parte de la MV.

Nos aparecerá un promt donde podremos introducir comandos para interactuar con la MV.

Los comandos mas interesantes son:
  • add/delete hostname: Añade/Quita el ordenador con nombre hostname a la maquina virtual.
  • conf: Para ver la configuracion actual.
  • ps –a: Para ver los procesos en ejecución en la maquina virtual.
  • quit: Para salir de la consola pero dejar la maquina virtual activa.
  • halt: Para detener la maquina virtual y salir de la consola.

Áreas de Aplicación

  • Simulación a gran escala.
  • Computación en tiempo crítico.
  • Diseño e ingeniería asistida por computadora.
  • La industria manufacturera.
  • Visualización de datos científicos.
  • Tecnología de interfase hombre-computadora.


Ejemplos de Programas PVM.

  Ejemplo de Fork Join.
/*
    Ejemplo de Fork Join
    Demuestra como engendrar proceso e intercambiar mensajes.
*/

/* definiciones y prototipos para la libreria de PVM  */
#include <pvm3.h>

/* Numero maximo de hijos que engendrara este programa  */
#define MAXNCHILD   20
/* Etiqueta que usara el menaje de join */
#define JOINTAG     11

int
main(int argc, char* argv[])
{

    /* numero de tareas que seran engendradas, se utiliza 3 como default  */
    int ntask = 3;
    /* codigo que regresan las llamadas PVM */
    int info;
    /* mi identificador de tarea */
    int mytid;
    /* el identificador de tarea de mi padre */
    int myparent;
    /* un arreglo con los identificadores de tarea de los hijos */
    int child[MAXNCHILD];
    int i, mydata, buf, len, tag, tid;

    /* se busca mi identificador de tarea */
    mytid = pvm_mytid();

    /* se evalua si hay error */
    if (mytid < 0) {
        /* si hay error, se imprime */
        pvm_perror(argv[0]);
        /* fin del programa .. bye!*/
        return -1;
        }
    /* se busca el identificador de tarea de mi padre  */
    myparent = pvm_parent();

    /* finaliza si encuentra algun error diferente de PvmNoParent */
    if ((myparent < 0) && (myparent != PvmNoParent)) {
        pvm_perror(argv[0]);
        pvm_exit();
        return -1;
        }

    /* si no tengo un padre ... yo soy el padre  */
    if (myparent == PvmNoParent) {
        /* cuantas tareas se van a engendrar? */
        if (argc == 2) ntask = atoi(argv[1]);
        /* aseguramos que ntask sea correcto  */
        if ((ntask < 1) || (ntask > MAXNCHILD)) { pvm_exit(); return 0; }

        /* engendramos las tareas de los hijos */
        info = pvm_spawn(argv[0], (char**)0, PvmTaskDefault, (char*)0,
            ntask, child);
        /* se imprimen los identificadores de los hijos */
        for (i = 0; i < ntask; i++)
            if (child[i] < 0) /* imprimir el codigo de error en decimal */
                printf(" %d", child[i]);
            else  /* imprimir el identificador en hexadecimal  */
                printf("t%x\t", child[i]);
        putchar('\n');

        /* Asegurarnos de que se engendro con exito  */
        if (info == 0) { pvm_exit(); return -1; }

        /* Solo se esperaran respuestas de los hijos que se engendraron
           correctamente */
        ntask = info;
  
        for (i = 0; i < ntask; i++) {
            /* recibe un mensaje de cualquier proceso hijo  */
            buf = pvm_recv(-1, JOINTAG);
            if (buf < 0) pvm_perror("calling recv");
            info = pvm_bufinfo(buf, &len, &tag, &tid);
            if (info < 0) pvm_perror("calling pvm_bufinfo");
            info = pvm_upkint(&mydata, 1, 1);
            if (info < 0) pvm_perror("calling pvm_upkint");
            if (mydata != tid) printf("This should not happen!\n");
            printf("Length %d, Tag %d, Tid t%x\n", len, tag, tid);
            }
        pvm_exit();
        return 0;
        }

   /* soy un hijo ... */
   info = pvm_initsend(PvmDataDefault);
   if (info < 0) {
      pvm_perror("calling pvm_initsend"); pvm_exit(); return -1;
      }
   info = pvm_pkint(&mytid, 1, 1);
   if (info < 0) {
      pvm_perror("calling pvm_pkint"); pvm_exit(); return -1;
      }
   info = pvm_send(myparent, JOINTAG);
   if (info < 0) {
      pvm_perror("calling pvm_send"); pvm_exit(); return -1;
      }
   pvm_exit();
   return 0;
}
        La siguiente figura muestra la salida de correr FORK - JOIN. Notese que el orden en que se recibieron los mensajes no es deterministico. Dado que el ciclo principal del proceso padre es del tipo FIRST-COME FIRST-SERVE, el orden de las salidas es determinado por el tiempo que toma a los mensajes viajar de las tareas hijo al padre.

 % forkjoin
 t10001c t40149  tc0037
 Length 4, Tag 11, Tid t40149
 Length 4, Tag 11, Tid tc0037
 Length 4, Tag 11, Tid t10001c
 % forkjoin 4
 t10001e t10001d t4014b  tc0038
 Length 4, Tag 11, Tid t4014b
 Length 4, Tag 11, Tid tc0038
 Length 4, Tag 11, Tid t10001d
 Length 4, Tag 11, Tid t10001e

Ejemplo de Kill.

/*
    Ejemplo del uso de Kill
    Demuestra como saber si las tareas han finalizado
*/

/* definiciones y prototipos de la libreria PVM */
#include <pvm3.h>

/* Numero maximo de hijos que el programa engendrara  */
#define MAXNCHILD   20
/* Etiqueta que usara la tarea para mandar el mensaje de finalizacion  */
#define TASKDIED        11

int
main(int argc, char* argv[])
{

    /* numero de tareas a engendrar, utiliza 3 como default  */
    int ntask = 3;
    /* codigo que regresa de las llamadas PVM  */
    int info;
    /* mi identificador de tarea */
    int mytid;
    /* el identificador de tarea de mi padre */
    int myparent;
    /* arreglo de identificadores de tareas de los hijos  */
    int child[MAXNCHILD];
    int i, deadtid;
    int tid;
    char *argv[5];

    /* se busca mi indentificador de tarea  */
    mytid = pvm_mytid();

    /* se verifica que no exista error */
    if (mytid < 0) {
        /* se imprime el error  */
        pvm_perror(argv[0]);
        /* se termina el programa  */
        return -1;
        }
    /* se busca el identificador de tarea de mi padre */
    myparent = pvm_parent();

    /* finaliza si existe algun error diferente de  PvmNoParent */
    if ((myparent < 0) && (myparent != PvmNoParent)) {
        pvm_perror(argv[0]);
        pvm_exit();
        return -1;
        }

    /* si no tengo padre ... entonces yo soy el padre */
    if (myparent == PvmNoParent) {
        /* cuantas tareas voy a engendrar?  */
        if (argc == 2) ntask = atoi(argv[1]);
        /* se asegura que ntask es valido  */
        if ((ntask < 1) || (ntask > MAXNCHILD))
         { pvm_exit(); return 0; }

        /* se engendran las tareas  */
        info = pvm_spawn(argv[0], (char**)0, PvmTaskDebug, (char*)0,
            ntask, child);

        /* nos aseguramos que no ocurrio un error  */
        if (info != ntask) { pvm_exit(); return -1; }

        /* se imprimen los identificadores de tarea  */
        for (i = 0; i < ntask; i++)
            printf("t%x\t",child[i]); putchar('\n');

        /* se pide la notificacion cuando un hijo termina  */
        info = pvm_notify(PvmTaskExit, TASKDIED, ntask, child);
        if (info < 0) { pvm_perror("notify"); pvm_exit(); return -1; }

        /* matamos al hijo de en medio  */
        info = pvm_kill(child[ntask/2]);
        if (info < 0) { pvm_perror("kill"); pvm_exit(); return -1; }

        /* se espera por una notificacion  */
        info = pvm_recv(-1, TASKDIED);
        if (info < 0) { pvm_perror("recv"); pvm_exit(); return -1; }
        info = pvm_upkint(&deadtid, 1, 1);
        if (info < 0) pvm_perror("calling pvm_upkint");

        /* debe de ser el hijo de en medio  */
        printf("Task t%x has exited.\n", deadtid);
        printf("Task t%x is middle child.\n", child[ntask/2]);
        pvm_exit();
        return 0;
        }

    /* soy un hijo ... */
    sleep(63);
    pvm_exit();
    return 0;
}

martes, 23 de octubre de 2012

Tri-Grate


Tri-Gate, un nuevo transistor con estructura tridimensional de Intel

Intel anuncia la creación del primer transistor de tres dimensiones que bautizó con el nombre de Tri-Gate, el cual representaría una evolución de los transistores al ser más pequeño, más veloz y consumir menos energía que su antecesor, el transistor bidimensional o plano... Se inicia una nueva era en el campo de los microprocesadores.

Tri-Gate, nuevo transistor de Intel













Hacerlos cada vez más pequeños, más rápidos, más eficientes en el consumo de energía y con una mejor relación costo/beneficio, al parecer, es el lema principal de los fabricantes de componentes electrónicos, entre los que Intel viene consiguiendo interesantes avances. Esta vez, al introducir un revolucionario diseño de transistores tridimensionales, llamados Tri-Gates.

Según un comunicado de Intel, los transistores tridimensionales Tri-Gate permiten a los chips basados en ellos operar a un voltaje más reducido con menores pérdidas eléctricas, con lo que, si se los compara con los transistores más avanzados de la generación anterior, ofrecen una combinación de prestaciones y eficiencia energética sin precedentes. Estas posibilidades brindan a los diseñadores de chips la suficiente flexibilidad como para elegir diseños de transistores orientados a un menor consumo energético o a alcanzar las máximas prestaciones, dependiendo de la finalidad del chip.

Pero, ¿qué son los transistores Tri-Gates? Según Intel, los transistores tridimensionales Tri-Gate son una reinterpretación del transistor convencional. Así, los tradicionales transistores bidimensionales “planos” se ven reemplazados por conducciones tridimensionales de silicio de un grosor increíblemente reducido, que se alzan en vertical desde el sustrato de silicio.

El control de las corrientes se realiza mediante la implementación de "puertas" a cada uno de los tres lados expuestos de la conducción, dos en cada lado y una tercera en la parte superior, en lugar de una única puerta en la parte superior, como suele ser el caso de los transistores bidimensionales. 


Tri-Gate, nuevo transistor de Intel




















El control adicional que brindan estas puertas permite que la corriente circule con todo el flujo posible cuando el transistor está en el estado "ON" (para un mayor rendimiento), y que esta sea prácticamente nula cuando éste está en su estado "OFF" (para minimizar el consumo energético). Además, este sistema permite al transistor pasar de uno a otro estado con gran rapidez, una vez más, para alcanzar las máximas prestaciones posibles


Por otro lado, la estructura de los transistores tridimensionales Tri-Gate de Intel ofrece un medio de optimizar la densidad. Dado que estas conducciones son de perfil vertical, pueden colocarse juntas en menor espacio.

Y, ¿cuáles son las ventajas reales de los transistores Tri-Gates? Según Intel, los transistores tridimensionales Tri-Gate permiten a los chips basados en ellos operar a un voltaje más reducido con menores pérdidas eléctricas.

LEY DE MOORE


En 1965, el cofundador de Intel, Gordon Moore, tuvo una visión de futuro. Su predicción, conocida popularmente como la Ley de Moore, plantea que el número de transistores de un chip se duplica cada dos años. Esta observación sobre la integración del silicio, convertida en realidad por Intel, ha avivado la revolución tecnológica mundial.

Archivo:Lei de moore 2006.svg.png



La ley de Moore no es una ley en el sentido científico, sino más bien una observación, y ha sentado las bases de grandes saltos de progreso.

En 2004 la industria de los semiconductores produjo más transistores (y a un costo más bajo) que la producción mundial de granos de arroz, según la Semiconductor Industry Association (Asociación de la Industria de los Semiconductores) de los Estados Unidos.

Gordon Moore solía estimar que el número de transistores vendidos en un año era igual al número de hormigas en el mundo, pero para el 2003 la industria producía cerca de 1019 transistores y cada hormiga necesitaba cargar 100 transistores a cuestas para conservar la precisión de esta analogía.

En 1978, un vuelo comercial entre Nueva York y París costaba cerca de 900 dólares y tardaba 7 horas. Si se hubieran aplicado los mismos principios de la ley de Moore a la industria de la aviación comercial de la misma forma que se han aplicado a la industria de los semiconductores desde 1978, ese vuelo habría costado cerca de un centavo de dólar y habría tardado menos de 1 segundo en realizarse.

GNU Parallel

Modo de instalación:

Para comenzar a trabajar con GNU Parallel en Linux, estos son los pasos.

1. Descarga la versión más reciente que encuentres en el sitio oficial (http://www.gnu.org/software/parallel/):
  • $ wget http://ftp.gnu.org/gnu/parallel/parallel-20101202.tar.bz2


2. Descomprime e ingresa al directorio

  • $ tar jxf parallel-20101202.tar.bz2
  • cd parallel-20101202/

3. Sigue los tres pasos habituales: configura, compila e instala. Si tienes compiladores y bibliotecas GNU no tendrás ningún problema.

  • $ ./configure
  • $ make
  • $ sudo make install

4. La documentación oficial en línea es extensa e idéntica al manual de usuario:

  • $ man parallel


Modo de Utilización


Su modo de utilización, es poner a trabajar cada uno de los procesadores y/o núcleos con que cuenta el equipo para agilizar el tiempo de realización de cualquier tarea o proceso.

Ejemplo:


Listando con 8 nucleos, 5 de maquina local: (modo remoto)

01 $ seq 1 10 \
02 | parallel -j +0 --sshlogin
:,serverer ‘
03 ‘echo {} $(hostname) ‘
04 5 desktop
05 6 desktop
06 7 desktop
07 8 desktop
08 10 desktop
09 9 desktop
10 1 serverer
11 2 serverer
12 3 serverer
13 4 serverer

Ventajas de utilizar GNU Parallel son:

  • Es software libre
  • Aprovechamiento de los distintos núcleos, pudiendo repartir la carga de trabajo incluso entre otras máquinas de la red.
  • Tiene la capacidad de realizar tareas a través de la red.
  • Facilita la tarea de procesar múltiples archivos simultáneamente en máquinas con más de un núcleo.

viernes, 19 de octubre de 2012

Paralelismo


El cálculo paralelo se define como la práctica de emplear el número de transformadores que cooperaron, la comunicación entre ellos para resolver los grandes problemas rápidamente.

La computación paralela llegó a la edad de mediados de los ochenta, cuando los fabricantes de chips fueron capaces de producir grandes cantidades de chips de procesador económicamente. Por lo tanto, de repente, tener un montón de fichas que contienen los procesadores junto con pequeño local memorias (los elementos de procesamiento de llamadas o PES) no fue un problema.

La última década vio un gran número de nuevas máquinas paralelas de mayor o menor éxito, capacidades, potencia de cálculo y las etiquetas de precios. Existe un informe en curso enumerando el máximo rendimiento de las 500 supercomputadoras en el mundo que se actualiza con regularidad. El funcionamiento máximo es el máximo rendimiento teórico de equipo. (También significa que el rendimiento mínimo que el fabricante asegura que nunca se alcanzará.) De acuerdo con el informe publicado en Julio de 1993, la CM-5 computadoras con procesadores 1024 y 131 pico Gflops actuación fue la computadora más potente del mercado, su precio fue alrededor de $ 25 millones.

A pesar de que el rendimiento de procesamiento de los ordenadores han aumentado considerablemente en los últimos años, de entrada / salida (I / O) dispositivos no se han mantenido con esta tendencia. Mientras que la velocidad del procesador recibe aproximadamente ocho veces más rápido cada diez años, el acceso a la memoria principal y el disco disminución del tiempo de ciclo por sólo un tercio en el mismo período de tiempo. Como te das cuenta, esta se ensancha la brecha entre E / S y los tiempos de procesamiento.



Por lo tanto, nuestra capacidad de utilizar ordenadores muy rápidos eficiente, depende de nuestra capacidad para alimentar con datos suficientemente rápido. Este es el paralelo llamado I / O cuello de botella, la mala noticia se espera que empeore en el futuro, y una gran cantidad de investigación que se está haciendo hoy en esta dirección.

Ley de amdahl


La ley de amdahl evalua el rendimiento de un proceso/computadora o cualquier otra actividad, después de realizarse una mejora. Ademas de que nos define el speedup (o aceleración) que se puede alcanzar al utilizar esa mejora.

El speedup se saca al dividir el rendimiento utilizando la mejora, entre el rendimiento sin la implementación de la mejora, o de manera alternativa, el tiempo de ejecución con la mejora entre el tiempo de ejecución sin la memoria.

jueves, 11 de octubre de 2012


PARALELISMO

El paralelismo en la informática es una función que realiza el procesador para ejecutar varias tareas al mismo tiempo o de forma simultánea, basado en el principio de dividir los problemas grandes para obtener varios problemas pequeños, que son posteriormente solucionados en paralelo.
El paralelismo se ha utilizado para muchas temáticas diferentes, desde bioinformática para hacer el plegamiento de proteínas, hasta economía para hacer simulaciones en matemática financiera.
¿Dónde se aplica el procesamiento en paralelo?
Las aplicaciones que se benefician de una aceleración más significativa son aquellas que describen procesos intrínsecamente paralelos, las simulaciones de modelos moleculares, climáticos o económicos tienen toda una amplia componente paralela, como los sistemas que representan. El hardware de la máquina entra en juego ya que es preciso maximizar la relación entre el tiempo de cálculo útil y el perdido en el paso de mensajes, parámetros que dependen de la capacidad de proceso de las CPU y de la velocidad de la red de comunicaciones.

Tipos de paralelismo.



  • Nivel de bits: Es cuando se aumenta la el tamaño de la palabra en la computadora, hacer esto reduce el número de instrucciones que son necesarias para ejecutar un instrucción en la cual sus operando son más grandes que su tamaño de palabra.
  • Nivel de instrucción: Es cuando un grupo de instrucciones que compone un programa son ejecutadas paralelamente sin cambiar el resultado final del programa.
  • Nivel de datos o nivel de proceso: Es cuando se distribuye los datos a través de diferentes nodos de cómputo para que los procesen en paralelo y las tareas que realizan son comunes y el resultado es uno solo.
  • Nivel de tareas: Cuando cálculos totalmente diferentes se realizan en los mismos o diferentes datos.

 Desventajas de la computación en paralelo.


  • Requiere de un gran número de ciclos de procesamiento o acceso a una gran cantidad de datos.
  • Encontrar un hardware y un software que permita brindar estas utilidades comúnmente proporciona inconvenientes de costos, seguridad y disponibilidad.

Ventajas de la computación en paralelo.


  •  Brinda a las empresa, instituciones y usuarios en general el beneficio de la velocidad.
  • Ventaja competitiva, provee una mejora de los tiempos para la producción de nuevos productos y servicios.
  • Colaboración y flexibilidad operacional.

Clasificación de los sistemas paralelos en los sistemas informáticos.


SISD. Se refiere a las computadoras convencionales de Von Neumann. Ejemplo: PC’s.
En la categoría SISD están la gran mayoría de las computadoras existentes. Son equipos con un solo procesador que trabaja sobre un solo dato a la vez. A estos equipos se les llama también computadoras secuenciales.
SIMD. Arreglo de procesadores. Cada procesador sigue el mismo conjunto de instrucciones; diferentes elementos de información son asignados a cada procesador. Utilizan memoria distribuida. Típicamente tienen miles procesadores simples. Son utilizadas en redes neuronales.
Las computadoras SIMD tienen una sola unidad de control y múltiples unidades funcionales. La unidad de control se encarga de enviar la misma instrucción a todas las unidades funcionales. Cada unidad funcional trabaja sobre datos diferentes. Estos equipos son de propósito específico, es decir, son apropiados para ciertas aplicaciones particulares, como por ejemplo el procesamiento de imágenes.
MISD. Es un tipo de arquitectura de computación paralela donde muchas unidades funcionales realizan diferentes operaciones en los mismos datos.
MIMD. Múltiples computadoras y multiprocesadores. Las piezas de código distribuidas entre los procesadores. Los procesadores pueden ejecutar la misma o instrucción o diferentes instrucciones. Se puede decir que MIMD es un súper conjunto de SIMD.
Diferentes elementos de información se asignan a diferentes procesadores. Pueden tener memoria distribuida o compartida.
Cada procesador MIMD corre casi independientemente de los otros.
Flujo de control: Las instrucciones se van ejecutando según el orden en el que se encuentran en memoria
Flujo de Datos. : El flujo de ejecución es conducido por los datos; una instrucción será ejecutada cuando los operadnos estén disponibles.
Reducción. La ejecución se realiza por demanda: una instrucción será ejecutada cuando otra necesite sus resultados. Son una clase de las de flujo de datos.

jueves, 4 de octubre de 2012

RPC


Implementaciones más comunes de los RPC


Las implementaciones de RPC más populares son:
Sun - RPC (ONC-RPC: Open Network Computing-RPC): RPC muy extendido en entornos Unix, infraestructura sobre la que se ejecuta NFS (servicio de sistema de ficheros en red), NIS (servicio de directorio)
DCE/RPC (Distributed Computing Environmen RPC): RPC definido por la Open Software Foundation
Java-RMI: invocacion de métodos remotos en Java CORBA (Common Object Requesting Broker Architecture): soporta la invocación de métodos remotos bajo un paradigma orientado a objetos en diversos lenguajes SOAP (Simple Object Access Protocol): protocolo RPC basado en el intercambio de datos (parámetros + resultados) en formato XML

Como se asegura las transmisiones basadas en RPC


En un ambiente de computación distribuida la posibilidad de fallo aumenta, considerando que tanto los sistemas local y remoto como la red de datos son potenciales fuentes de fallas. La implementación debe proveer mecanismos para manejar tales situaciones.
Cuando se realiza una llamada a un procedimiento local, uno no se pregunta cuantas veces el procedimiento se ejecutó. Si un procedimiento retorna entonces se ejecutó exactamente una vez. Sin embargo, si se considera un procedimiento remoto del cual no se ha obtenido respuesta después de un intervalo de tiempo, no se puede tener certeza si se ha ejecutado. Si el servidor experimenta un error de ejecución, por ejemplo, antes de que el “stub” del lado del servidor se realice la llamada, entonces ésta no se habrá ejecutado. Si el servidor experimenta un error de ejecución después de haber devuelto su resultado al “stub”, se habrá ejecutado una vez. Si el cliente retransmite una solicitud por no haber recibido una respuesta del servidor, se confunden aún más las cosas. Es posible que la primera solicitud haya sufrido un retraso en algún lugar de la red y finalmente, haya sido ejecutada al igual que la solicitud retransmitida.
Existe tres tipos de semánticas de RPC: exactamente una vez, cuando mucho una vez, y al menos una vez.

Que cuestiones afectan la comunicación por medio de rpc


Errores de Comunicación.
·         No se puede localizar al servidor
·         Pérdida de mensajes de petición
·         Pérdida de mensajes de respuesta.
Fallo en el Servidor
·         Error por parámetros incorrectos, operación no permitida, etc.
Caída del Servidor
Fallo en el Cliente.
Caída del cliente.
 No se puede localizar al servidor.
Cuando se le solicita al binder la dirección del servidor apropiado, puede ocurrir que el servidor esté caído y no se haya registrado, por lo que no está disponible.
Pérdida de mensajes de petición.
Para tratar la posible pérdida de las peticiones, la solución más fácil es que el módulo de comunicaciones ponga una temporización cuando envía el mensaje de petición.
Pérdida de mensajes de respuesta.
La solución obvia a este problema podría estar en apoyarse otra vez en las temporizaciones, de tal forma que si no se recibe la respuesta en un tiempo finito, simplemente se vuelve a enviar la petición.

En una base de datos para que se implementan los rpc


XML-RPC es un protocolo de llamada a procedimiento remoto que usa XML para codificar los datos y HTTP como protocolo de transmisión de mensajes.
Es un protocolo muy simple ya que solo define unos cuantos tipos de datos y comandos útiles, además de una descripción completa de corta extensión.

Que vulnerabilidades presenta el uso de los rpc


Lo que debería saber sobre la vulnerabilidad RPC/DCOM
Microsoft publicó en julio, un boletín de seguridad sobre una vulnerabilidad provocada por el desbordamiento de búfer en el protocolo RPC (boletín MS03-026). Sin embargo, parecen existir no una, sino dos fallas.
La primera, es la que Microsoft describía en el mencionado boletín como capaz de permitir a un atacante remoto la ejecución de código, lo que en las últimas horas ha sido ampliamente demostrado con la aparición del Lovsan.A, que aunque no se trata del primero que se aprovecha del agujero, está claro que ha sido el más notorio.
La nueva falla en cambio, sería capaz de permitir un ataque de denegación de servicio, y poco se sabe de ella, salvo un misterioso boletín de seguridad MS03-032 que solo ha sido publicado por Microsoft España, sin enlaces a ningún parche (existe otro sobre tres fallas del Internet Explorer, en las mismas condiciones).

jueves, 20 de septiembre de 2012

Introducción a las Llamadas a Procedimientos Remotos


Paso por valor:


El paso de parámetros por valor consiste en copiar el contenido de la variable que queremos pasar en otra dentro del ámbito local de la subrutina, consiste pues en copiar el contenido de la memoria del argumento que se quiere pasar a otra dirección de memoria, correspondiente al argumento dentro del ámbito de dicha subrutina. Se tendrán dos valores duplicados e independientes, con lo que la modificación de uno no afecta al otro.

Paso por referencia:


El paso de parámetros por referencia consiste en proporcionar a la subrutina a la que se le quiere pasar el argumento la dirección de memoria del dato. En este caso se tiene un único valor referenciado (o apuntado) desde dos puntos diferentes, el programa principal y la subrutina a la que se le pasa el argumento, por lo que cualquier acción sobre el parámetro se realiza sobre la misma posición de memoria.

ONC.


ONC RPC es una tecnología llamada a procedimiento remoto que se originó en Sun Microsystems a principios de 1980. ONC RPC siguió el modelo de Xerox Correo RPC protocolos. Ha sido ampliamente implementada en plataformas de mayoría de los principales fabricantes de estaciones de trabajo. Se ha implementado en MS-DOS, Microsoft Windows, Microsoft Windows NT, Mac, VMS, MVS, y prácticamente todas las versiones de UNIX, entre otros. Sun Microsystems a cambio delegado el control de los protocolos RPC ONC para los fines de hacer un estándar de Internet para el IETF (vea RFC 1790).

DCE.


El DCE RPC es un protocolo de nivel de aplicación que permite a las aplicaciones OpenGroup hacer llamadas a procedimientos remotos. Es el protocolo de conexión de base de DCOM (Distributed Common Object modelo) de Microsoft.
Este módulo fue motivado por un esfuerzo de ingeniería inversa en un cliente DCOM. Por lo tanto, las funciones que se implementan marcha más hacia la implementación del lado del cliente. Además, la versión inicial sólo admite la versión orientado a la conexión de DCE RPC. También se supone NTLMSSP como protocolo de autenticación subyacente. Esto puede cambiar en función de las aportaciones de los usuarios de estos módulos.

DCOM.


DCOM permite que el programador COM amplié sus componentes a través de la red, dándoles los beneficios de la informática distribuida. Cuando el cliente y el componente residen en el mismo equipo se comunican con la ayuda de procedimientos de llamada local (LPC), pero a través de la red tienen que utilizar el DCOM estándar construido por Microsoft. Los Componentes COM a través de la red se comportan del mismo modo que si estuviesen en la misma máquina con el cliente.

jueves, 13 de septiembre de 2012

Clasificaciones del hardware de los SOD. Clúster, Grid, MMP, SMP, CC-NUMA, Sistemas distribuidos




Clúster:
·         Una colección de estaciones de trabajo o PCs que están conectadas mediante alguna tecnología de red.
·         Para fines de computación paralela estas PCs o estaciones de trabajo estarán conectadas  mediante una red de muy alta velocidad.
·         Un clúster trabaja como una colección integrada de recursos y pueden tener una imagen  simple del sistema abarcando todos sus nodos.

Grid:
·         Un gran conjunto de Sitios que están conectadas mediante una red global de alta velocidad  (10 Gb/s) que tienen una alta capacidad de procesamiento (entre 1000 a 10000 GFLOPS)  y un gran capacidad de almacenamiento (entre 1000 a 10000 TB)
·         Los Sitios interconectados utilizan Procesamiento Distribuido y P2P (Peer to Peer  Architecture) con desarrollos de SW novedosos adicionales con interfaces estándar  abiertas.
·         Utiliza nuevas técnicas de Autoadministración, auto escalabilidad y auto reparación (tolerante a fallas)

MPP:
·         Es un gran sistema de procesamiento paralelo con una  arquitectura que no comparte nada.
·         Consiste en cientos de elementos de procesamiento los cuales están interconectados por  un Switch o red de alta velocidad.
·         Cada nodo puede tener una variedad de componentes de hardware, pero generalmente  consisten de una memoria central y de uno o varios procesadores.

SMP:
·         Poseen desde 2 a 64 procesadores y pueden ser considerados como una arquitectura que  comparte todo.
·         En estos sistemas todos los procesadores comparten todos los recursos globales  disponibles (bus del sistema, memoria, sistemas de I/O, etc.);
·         Una copia sencilla del Sistema Operativo corre en estos sistemas.

CC-NUMA:
·       Es un sistema multiprocesador escalable.
·   Como en SMP, cada procesador en un sistema CC-NUMA tiene una vista global de toda la memoria.
·       Este tipo de sistema consigue su nombre (NUMA) a partir de los tiempos no uniformes que  le toma para acceder ya sea a la parte memoria más cercana, así como a la más remota.

Sistemas Distribuidos:
·         Pueden ser considerados redes convencionales de computadores independientes.
·         Los mismos tienen múltiples imágenes del sistema, a partir de que cada nodo tiene su  propio sistema operativo.
·         Cada máquina individual en un sistema distribuido puede ser, por ejemplo, una  combinación de MPPs, SMPs, Clusters, Grids y computadoras individuales.

Diferencia entre un sistema operativo distribuido y un sistema distribuido




Existe una diferencia vital entre los sistemas operativos distribuidos y los sistemas distribuidos. Podríamos llamar a un Sistema Distribuido una capacidad del Sistema operativo Distribuido, es decir: Un sistema distribuido es la relación que existe entre una computadora independiente y un servidor de archivos o dispositivos compartidos. Cada computadora ejecuta sus programas en su memoria propia haciendo uso de su único microprocesador y memoria, este no comparte memoria ni asigna tareas a otros procesadores de la red.
Sin embargo, un Sistema operativo distribuido tiene acceso a todos los dispositivos compartidos de la red incluyendo procesadores y memoria RAM.

Diferencias entre un sistema operativo distribuido, un sistema operativo multiprocesador y un sistema operativo de red



 

Elemento

SO
Distribuido

SO
Multiprocesador

So de
Red

¿Se ve como un uniprocesador virtual?

Si

Si

No

¿Todos ejecutan el mismo SO?

Si

Si

No

¿Cuántas copias del SO existen?

Ninguna

1

Ninguna

¿Cómo se logra la comunicación?

Mensajes

Memoria Compartida

Archivos compartidos/ Mensajes

¿Se requiere un acuerdo en los protocolos de Red?

Si

No

Si

¿Existe una única cola de ejecución?

Si (No)

Si

No

¿Existe una semántica bien definida para los archivos compartidos?

Si

Si

Por lo general