jueves, 23 de mayo de 2013

Actividad 6 - Implementación del Algoritmo Distribuido

La sincronización en sistemas distribuidos 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.

Esta sincronización, en sistemas distribuidos, se hace más compleja que en los sistemas centralizados puesto que la información y el procesamiento se mantienen en diferentes nodos. La sincronización de relojes en sistemas distribuidos nos permite garantizar que los procesos se ejecutan cronológicamente y además respetar el orden de los eventos dentro del sistema.


Luego de esta pequeña introducción a la sincronización vamos a hablar acerca del Algoritmo de Lamport. Y es que en este post hablaremos de la propuesta que hizo el científico en computación Dr Leslie Lamport.

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.

Y es aquí dónde aparece el concepto de reloj lógico. Un reloj lógico de Lamport es un contador software que se incrementa monótonamente, cuyos valores no necesitan tener ninguna relación particular con ningún reloj físico.

Para sincronizar los relojes lógicos, Lamport definió la relación ocurre antes de(happens-before):

Si “a” y “b” son eventos en el mismo proceso y “a” ocurre antes de “b”, entonces “a –> b” es verdadero.
“Ocurre antes de” es una relación transitiva:
Si “a –> b” y “b –> c”, entonces “a –> c”.
Si dos eventos “x” e “y” están en procesos diferentes que no intercambian mensajes, entonces “x –> y” no es verdadero, pero tampoco lo es “y –> x”:
Se dice que son eventos concurrentes.

Necesitamos una forma de medir el tiempo tal que a cada evento “a”, le podamos asociar un valor del tiempo “C(a)” en el que todos los procesos estén de acuerdo:

Se debe cumplir que:
o Si “a –> b” entonces “C(a) < C(b)”.
o El tiempo del reloj, “C”, siempre debe ir hacia adelante (creciente), y nunca hacia atrás (decreciente).

El algoritmo de Lamport asigna tiempos a los eventos.


Para la implementación  se ejemplifica con el paso de mensajes entre 3 "procesos, con un tiempo especifico cada uno, dando como resultado el envio de un mensaje con su tiempo de envio.


En la interfaz, observamos el "time", que es tiempo que transcurre desde que inicia el proceso, el "message" que es el mensaje que queremos enviar, "to:" en esta area seleccionamos a que proceso queremos enviar el mensaje, "received" que es la variable que escucha el mensaje enviado por cualquier otro proceso, aqui es donde recibimos el mensaje y el tiempo en el cual fue enviado el mensaje.


Otras referencias:
http://exa.unne.edu.ar/depar/areas/informatica/SistemasOperativos/SO9.htm
http://rubmarin.galeon.com/algoritmolamport.htm
http://blog.rolandopalermo.com/2009/12/algoritmo-de-lamport-para-la.html
http://tele.informatik.uni-freiburg.de/lehre/ws01/dsys/Lectures/Lecture10.pdf


martes, 16 de abril de 2013

Actividad 5 - Algoritmo Distribuido

Una subclase de los algoritmos paralelos, los algoritmos distribuidos son algoritmos diseñados para trabajar en entornos tipo clusters y de computación distribuida, donde se usan otras técnicas, fuera del alcance de los algoritmos paralelos clásicos.

Estado Global


Estado global: estado local de cada proceso + estado de cada canal.
Estado de cada proceso: sólo las variables que nos interesen.
Estado de cada canal: mensajes enviados y todavía no entregados.
  • Usos del estado global: 
  • Detección de terminación.
  • Depuración distribuida.


Algoritmo de Chandy-Lamport


El algoritmo de Chandy y Lamport, bajo determinadas suposiciones, permite determinar el estado global de un sistema distribuido



Conceptos previos

Una instantánea distribuida refleja el estado que pudo haberse alcanzado en el sistema.
Las instantáneas reflejan sólo estados consistentes.
Si el estado de P, dice que P ha recibido un mensaje de Q, en la instantánea, Q envió antes un mensaje a P.
La noción de estado global se refleja por el concepto de corte.

  • Cualquier proceso inicia el algoritmo.
  • Sea P el proceso iniciador.
  • P guarda su estado local, luego envía un mensaje de marca a todos los demás procesos.
  • Cuando un proceso recibe el mensaje de marca:
  • Si no ha guardado su estado local: guarda su estado local y envía marca a todos los demás procesos. A partir de este momento almacenará lo que llegue por los canales entrantes.
  • Si ha guardado su estado local, guarda los mensajes recibidos por el canal (desde que el proceso guardó su estado local, hasta que recibió marca por este canal).
  • Un proceso termina, cuando ha recibido marca por todos los canales.
  • Cuando termina, envía su estado y el de sus canales al iniciador.





jueves, 28 de febrero de 2013

Actividad 3 - Algoritmo Paralelo. Aplicación en 3 Lenguajes de Programación

Para nuestra 3ª actividad, implementaremos el algoritmo paralelo descrito en la Actividad 2, en 3 lenguajes de programación diferentes.

Cabe mencionar que la paralelización como tal sera implementada por medio de hilos, los cuales se ejecutan simultaneamente efectuando las operaciones de "acomodar" los números de nuestro arreglo.

Diagrama de Flujo


Ejemplo en Java 
 Para el ejemplo en java, utilizamos una sola clase, la cual implementa los metodos de la clase Runnable y nos permite instanciarla como un hilo independiente, cada vez que se ejecuta el metodo run()


Para el acomodo de los objetos utilizamos el metodo de ordenamiento QuickSort


Ejemplo en Ruby 
 Implementacion de hilos en Ruby


Metodo de ordenamiento QuickSort en Ruby


Ejemplo en Python 
 Implementacion de hilos en Python


Metodo de ordenamiento QuickSort en Python

jueves, 21 de febrero de 2013

Actividad 2 - Algoritmo Paralelo (QuickSort)

Una de las más importantes utilidades de los multi-computadores es su uso en la computación algorítmica para obtener velocidad y eficacia. Se propone el diseño e implementación de un algoritmo paralelo que implemente las metodologías de Divide y Vencerás aplicado al QuickSort.
Divide y Vencerás 
La estrategia Divide y Vencerás consiste en descomponer un problema en subproblemas más simples del mismo tipo, resolverlos de forma independiente y una vez obtenidas las soluciones parciales combinarlas para obtener la solución del problema original. 


QuickSort
El ordenamiento rápido (quicksort en inglés) es un algoritmo creado por el científico británico en computación C. A. R. Hoare basado en la técnica de divide y vencerás, que permite, en promedio, ordenar n elementos en un tiempo proporcional a n log n.(fuente)

El algoritmo trabaja de la siguiente forma:
  • Elegir un elemento de la lista de elementos a ordenar, al que llamaremos pivote.
  • Re-situar los demás elementos de la lista a cada lado del pivote, de manera que a un lado queden todos los menores que él, y al otro los mayores. Los elementos iguales al pivote pueden ser colocados tanto a su derecha como a su izquierda, dependiendo de la implementación deseada. En este momento, el pivote ocupa exactamente el lugar que le corresponderá en la lista ordenada.
  • La lista queda separada en dos sublistas, una formada por los elementos a la izquierda del pivote, y otra por los elementos a su derecha.
  • Repetir este proceso de forma recursiva para cada sublista mientras éstas contengan más de un elemento. Una vez terminado este proceso todos los elementos estarán ordenados.
Como se puede suponer, la eficiencia del algoritmo depende de la posición en la que termine el pivote elegido.
  • En el mejor caso, el pivote termina en el centro de la lista, dividiéndola en dos sublistas de igual tamaño. En este caso, el orden de complejidad del algoritmo es O(n·log n).
  • En el peor caso, el pivote termina en un extremo de la lista. El orden de complejidad del algoritmo es entonces de O(n²). El peor caso dependerá de la implementación del algoritmo, aunque habitual mente ocurre en listas que se encuentran ordenadas, o casi ordenadas. Pero principal mente depende del pivote, si por ejemplo el algoritmo implementado toma como pivote siempre el primer elemento del array, y el array que le pasamos está ordenado, siempre va a generar a su izquierda un array vacío, lo que es ineficiente.
  • En el caso promedio, el orden es O(n·log n).
No es extraño, pues, que la mayoría de optimizaciones que se aplican al algoritmo se centren en la elección del pivote.
La implementación del método Divide y Vencerás sobre el algoritmo de QuickSort, quedaría representada por la siguiente imagen:


Donde: 

  1. Tendremos un arreglo de números inicial.
  2. Seleccionaremos el primer número de la lista el cual sera nuestro pivote.
  3. Un nuevo proceso acomodara los números menores al pivote en un nuevo arreglo y los mayores al pivote en otro arreglo.
  4. Crearemos nuevos procesos para los siguientes arreglos, siguiendo esta metodología hasta llegar a las "hojas" de nuestro árbol.
  5. Al terminar, los procesos devolverán su correspondiente resultado ya ordenado al proceso principal el cual únicamente los acomodara y dará un resultado.
En la práctica, este algoritmo se maneja de forma iterativa, nosotros buscamos mejorar el tiempo de respuesta en este de por si rápido algoritmo de ordenamiento por medio de la paralelización.


miércoles, 13 de febrero de 2013

Laboratorio


Equipo # 1

Integrantes


Listado de Compromisos

Compromisos de entrega de actividades

ActividadFecha EntregaDescripciónEstadoCalificacion
1 14/02/2013 Diseño, estructuración y puesta en linea del Blog Completo 95
2 21/02/2013 Algoritmo en Paralelo Completo 100
3 28/02/2013 Aplicación en 3 Lenguajes de Programación Completo
4 07/03/2013 Análisis y Conclusion de las Aplicaciones Pendiente
5 11/04/2013 Algoritmo Distribuido Pendiente
6 18/04/2013 Manejo de Memoria y Recursos Pendiente
7 25/04/2013 Objetivos del Sistema Distribuido Pendiente
8 02/05/2013 Presentación del Caso de Aplicación y Detalles Pendiente
9 09/05/2013 Fases y Planeación de la Implementación Pendiente
10 16/05/2013 Resultado Final, Evidencias y Conclusión Pendiente

Actividades

Actividad 1
Descripción: Crear Blog de Laboratorio, crear estructura.
Status: Completo
Fecha de Finalización: 14/02/2013
Calificación: 95
Actividad 2
Descripción: Investigar y documentar el uso de un Algoritmo Paralelo.
Status: Completo
Fecha de Finalización: 21/02/2013
Calificación: 100
Actividad 3
Descripción: Aplicación en 3 Lenguajes de Programación.
Status: Completo
Fecha de Finalización: 28/02/2013
Calificación: Pendiente

Proyecto

Descripción
Objetivo
Bitácora
Gráfico Gantt
Implementación
Calificación


    Proyecto


    Proyecto

    Descripción
    Objetivo
    Bitácora
    Gráfico Gantt
    Implementación
    Calificación

      martes, 12 de febrero de 2013

      Alma Dalia Del Angel Castillo



      Fecha de Nacimiento: 29 de Enero de 1992
      Lugar de Nacimiento: Cd. Victoria, Tamp.
      Lugar de Residencia: Monterrey, Nuevo León
      Ocupación: Estudiante










      Intereses personales: Gusto por la Tecnología, especialmente el área de Inteligencia Artificial y Redes Neuronales Artificiales, también gusto por la electrónica y robótica. Me apasionan los videojuegos de género RPG y de estrategia, así como la música y los deportes. Actualmente estudio en la Facultad de Ingeniería Mecánica y Eléctrica, específicamente la carrera de Ingeniería en Tecnología del Software.


      Objetivos particulares con respecto a clases: Conocer, saber diferenciar y saber implementar un sistema distribuido y/o uno paralelo, saber optimizarlo y trabajar con uno para de esta manera poder trabajar con uno de estos sistemas en alguna industria en un futuro no muy lejano.

      Alexis Eliud Villegas Rodríguez

      Alexis Eliud Villegas Rodríguez


      Fecha de Nacimiento: 31 de julio de 1992
      Lugar de Nacimiento: Monterrey, Nuevo León
      Lugar de Residencia: Monterrey, Nuevo León
      Ocupación: Estudiante





      Intereses personales:Sencillo,ocioso y curioso por la tecnología.  Me gusta mucho el desarrollo en dispositivos móviles(Smarthphone) en especial Android. Aficionado al diseño y con una gran creatividad e imaginación para explotarlo.
      Actualmente soy un  estudiante de la Facultad de Ingeniería Mecánica y Eléctrica, en la carrera de Ingeniería de Tecnología  de Software.

      Objetivos particulares con respecto a clases: El uso de un sistema distribuido y paralelo para poder identificar mediante la practica las diferencias notables en dichos sistemas al igual aplicar el uso de una red neuronal inteligente para crear un sistema adaptativo para el uso con 2 sistemas.

      lunes, 11 de febrero de 2013

      Mario Mena

      Mario Mena


      Lugar de Nacimiento: México,D.F.
      Ocupación: Estudiante



      Intereses personales: Gusto por la Tecnología, Biología y un poco de Sociología; me interesa sobre manera el área de desarrollo enfocado a Redes Neuronales Artificiales e Inteligencia Artificial. Aficionado a los videojuegos de contenido artístico y diferente, apasionado de la buena comida y las pláticas interesantes con mucho contenido intelectual.
      Actualmente estudio en la Facultad de Ingeniería Mecánica y Eléctrica, específicamente la carrera de Ingeniería en Tecnología del Software.


      Objetivos particulares con respecto a clases: Mi principal objetivo es obtener los conocimientos básicos y necesarios para desarrollar sistemas que implementen las tecnologías de Distribución y/o Paralelismo, con lo cual pretendo desarrollar a corto plazo soluciones integrales para usos generales en la industria o áreas de investigación.