miércoles, 27 de noviembre de 2013

Resultados

                                            la maquina que sera el servidor pide un mensaje





se introduce el mensaje cifrado



                                    la maquina con cliente empieza a ejecutare





           la maquina dos al igual que la uno se ejecuta  hasta que la maquina uno o dos encuentre la respuesta como vemos en la imagen la maquina dos encontró la respuesta







muestra los resultados en la terminal del servidor







Conclusiones 

La distribución es una herramienta muy útil cuando se trabaja con grandes cantidades de datos, nos ayuda a que los trabajos se resuelvan en mucho menor tiempo y gastando menos recursos que si lo hubiéramos hecho en una sola maquina.

Presentación del Caso de Aplicación y Detalles

Objetivo:

Implementar un sistema distribuido en 3 o mas computadoras.

Herramientas
Para realizar este proyecto se utilizaron una serie de herramientas, las cuales son las siguientes:
  • 3 máquinas con ubuntu instalado
  • Modem
  • Cables ethernet
  • Interprete de python

    Descripción
    Para este proyecto lo que hicimos fue implementar un sistema distribuido con tres máquinas que tenían instalado el sistema operativo Ubuntu conectados a una red local a través de un Modem.
    Se implementó un algoritmo llamado cifrado de Vernam el cual es un cifrado de flujo en el que el texto en claro se combina, mediante la operación XOR, con un flujo de datos aleatorio o pseudoaleatorio del mismo tamaño, para generar un texto cifrado.
    Nuestra idea es hacer un ataque de fuerza bruta para obtener la clave que se utilizo para encriptar un mensaje utilizando el mensaje y el mensaje cifrado.
    La computadora que tomaba la decisión de repartir los trabajos era la que porta o la que se comporta como el Servidor, las otras dos son Clientes, por eso el servidor toma la decisión de cuanto trabajo le tomara a cada una incluyéndose.
    Este programa de Cifrado de Vernam, se realizó en el lenguaje Python.

jueves, 10 de octubre de 2013

ACTIVIDAD 5 :ALGORITMO DISTRIBUIDO ALGORITMO BULLY

El algoritmo de Bully es un metodo distribuido es un coordinador dinamico  por procesos numero ID.

Explicacion

Aqui explicamos de una manera mas sencilla de como funciona este algorimo.

vamos a asumir que tenemos 7 nodos:


En este momento actual en el tiempo, el nodo '7 'es el coordinador, debido a que el nodo es el número más alto. Pero entonces las hojas nodo '7 ', por lo que ahora es el coordinador? Digamos nodo '4 'decide que quiere ser el coordinador, entonces tenemos:


En este caso, el nodo '4 'ha enviado una elección a los nodos '5', '6 'y '7', esto es debido a que ninguno de los nodos conocen ese nodo '7 'ha salido todavía. En este caso, el nodo '7 'no puede responder, sin embargo, los nodos '5' y '6 'todavía están aquí, para que responda a '4' que todavía están aquí:

Ahora tenemos nodos '5 'y '6' el envío de las elecciones. En este caso, el nodo '5 'envía una elección al nodo '6' y '7 '. Considerando que el nodo '6 'sólo envía una elección al nodo '7':


Ahora bien, como nodo de '6 'todavía está aquí, a continuación, el nodo '6' dice nodo '5 'que aún está aquí:


Finalmente, desde el nodo '7 'no ha respondido a nodo '6', esto implica que el nodo '7 'ya no existe, lo que significa que el nodo '6' es el nuevo coordinador. Así nodo '6 'le dice a todos los otros nodos.








Codigo del algortimo de bully 


martes, 27 de agosto de 2013

Actividad #2 - Algoritmo en Paralelo

La actividad de esta semana constara de realizar un algoritmo en paralelo para posteriormente implementarlo en 3 lenguajes de programación, utilizando hilos y conocimiento básico, buscaremos un problema que pueda ser secuencial y tratar de implementarlo para que sea de forma paralela, a lo que este se refiere es a que, si un problema debe conllevar una cierta cantidad de pasos de forma secuencial, también pueda ser realizada de forma paralela y al final reunir los resultados, obteniendo el mismo resultado pero el tiempo de realización sera menor. 

Algunas Técnicas básicas en las que nos basaremos  para la creación de un algoritmo paralelo. 


Divide and Conquer(Divide y Vencerás):
1. Dividir.- Dividir el problema original en subproblemas mas pequeñas que serán mas fáciles de realizar. 
2. Vencerás.- Resolver los subproblemas
3. Unir.- Combinar las soluciones 

Generalmente este paradigma conduce a algoritmos mas simples y eficientes. 

como generalmente los subproblemas en que se divide son independientes se puede resolver por paralelos.


Multiplicación de Matrices 



Consideraciones iniciales a tener en cuenta


  • Por simplicidad, todo el tiempo trabajaremos con matrices cuadradas de tamaño n x n.
  • Consideramos que el número de procesadores de los que disponen las máquinas paralelas es p.
  • Las matrices a multiplicar serán A y B, ambas tratadas como matrices densas , el resultado lo almacenaremos en la matriz C.
  • Tp se corresponde con el tiempo que emplean p para resolver el problema.
  • En el coste de las comunicaciones el tiempo para transmitir n datos entre dos procesadores conectados es dada por ts + ntw donde ts el el tiempo empleado para establecer la comunicación y tw es el tiempo que tarda para transmitir un dato.


Básicamente está formado por tres bucles for.

Código




División de bloques

Estamos ante una topología lógica en malla de dos dimensiones, donde p(i,j) el procesador de la fila i y columna j y que la matrices están dividas en bloques.

Las matrices serán dividas en bloques de tamaño √n
Cada procesador calculará un bloque de C.
Cada procesador tendrá p submatrices correspondientes a la fila de bloques de la matriz A y otras tantas correspondientes a la columna de bloques de la matriz B para así poder calcular
un bloque de C.

El uso de memoria, aunque mejor que el algoritmo anterior, sigue siendo ineficiente.


Algoritmo de Cannon I


Utiliza una malla con conexiones entre los elementos de cada lado (toro) para desplazar los elementos de A hacia la izquierda y los de B hacia arriba.

El algoritmo sigue los siguientes pasos:
1. El procesador Pij tiene los elementos aij y bij.
2. La fila i-ésima de A se desplaza i posiciones a la izquierda, y la columna j-ésima de B se  desplaza j posiciones hacia arriba, y todo esto teniendo en cuenta que el elemento que sale por un extremo entra por el otro. Con este paso se consigue que el procesador Pij
contenga los elementos aij+i y bi+jj, que son necesarios para calcular cij.
 Cada procesador multiplica su par de elementos.
3. Cada procesador multiplica su par de elementos.
4. Cada fila de A se desplaza una posición a la izquierda, y cada columna de B una posición hacia arriba.
5. Cada procesador multiplica su nuevo par de elementos, y suma el resultado al anterior.
6. Se repiten los pasos 4 y 5 hasta terminar, es decir n – 1 desplazanientos




Datos de Entrada

Se crean 3 matrices y dos se llenan con números aleatorios.


Datos de Salida

La tercera matriz se llena con resultado de la multiplicación de las dos matrices y son los datos de salida.


Diagrama de flujo








martes, 19 de febrero de 2013

Índice

Equipo #2


Integrantes del equipo

Listado de Compromisos

 



Actividades

  
 Descripción
 Bitácora de Seguimiento
 Status
  1. Inicio
  2. En proceso
  3. Fin y Conclusión
  4. Fechas de Finalización
    Calificación

Proyecto:

  1. Descripción
  2. Objetivo
  3. Bitácora
  4. Gráfico Gantt
  5. Implementación
  6. Calificación