Wednesday, September 23, 2009

laboratorio con lagortimos Dekker y Peterson

En este día  en laboratorio  se creo  el programa de los esquimales y  del  jardín  que son  problemas  de  exclusión  mutua  que se implementaron  con del algoritmo de   Dekker.

También se realizo la practica  de   hacer la diferencia del algoritmo de  Dekker y el de  Peterson

Monday, September 21, 2009

Exclusion Mutua algoritmo Dekker

El día de hoy  vimos  lo que es   exclusión mutua así como  el algoritmo de   Peterson  y  el de  Dekker  los que es  previo  temas para  empezar a ver lo que es  semáforos y  monitores que la maestra el día de  hoy   nos   ha  dejado investigar para  la próxima clase, pero regresando  a  lo que se  hizo el día de  hoy  fue    seguir   viendo  las diapositivas de los apuntes que lleva la  maestra como apoyo de  clase,  en la cual  explicaba  el algoritmo de  Dekker,   en que consistía  y cual es la manera de  funcionar el  cual  es una solución al problema de exclusión mutua  de   procesos  en sistemas  con  memoria común en el cual  tienen  acceso  a un recurso compartido, q es conocido como  problema de  exclusión mutua, ya que  de este de deriva  la necesidad de  plantear  algoritmos o  maneras de solución  a este  problema.  En general  se puede  decir que  se  pretende evitar que   2 o mas procesos   concurrentes   se  encuentren   ejecutando su sección   critica al mismo  tiempo.

 

A este  algoritmo   se llega mediante  varios intentos de   resolver    la  exclusión mutua,  que  este algoritmo funciona  al  intento de   que cada proceso  tiene su  propia variable para  evitar  los problemas   en ausencia  de  contención, pero en presencia de ella ningún proceso tenia derecho a  insistir p ara entrar  en su sección critica, experto   que  incorpora  a este método el  derecho  explicito de   insistir  para   entrar  en su sección  critica.  Donde las variables  individuales  de  los procesos permitirán  conseguir la exclusión mutua, pero se  usará   una variable de  turno común a  ambos procesos, de manera que en  presencia de  contención entre  en su sección critica el proceso que  tenga el  turno.

 

El  algoritmo  es correcto  y satisface  los requerimientos  de  exclusión  mutua y ausencia de  bloqueos, en l cual ningún  proceso se  vuelve ansioso, y en ausencia de contención de  un proceso  entra en sus  sección  inmediatamente  si lo desea.

 Aquí  se muestra  el algoritmo  para   su mejor comprensión:






Ahora    veremos el  algoritmo  generalizado  ya no para 2 proceso  si no  para  n procesos. En este algoritmo cada proceso que desea  ejecutar su sección crítica toma un número. El proceso que tiene el número menor es el que accede a su sección crítica. De ahí el nombre del  algoritmo.



Monday, September 14, 2009

uuffff!! dial de examen!!! :P

Este día se nos aplico  un examen en el cual   lo realizamos  aparte para  observar nuestros  errores, el cual  no  estaba tan difícil ya que  hubo preguntas de todo un poco así como  un programa por realizar ya que   seria  obviamente de   hilos en java ejecutando   un mensaje  si  en  una lista de calificaciones  el numero corresponda   a  aprobado excelente  bueno  regular o  reprobado.

Wednesday, September 9, 2009

miercoles de laboratioro

El día de hoy   en laboratorio   reviso   un programa que  dejo de unas copias en la cual se trata del tema   como repaso  de   “Quick sort, ordenamiento por  burbuja,  Mergesort”   así como  el decir en que tiempo se tardo el  programa  al  ejecutarlo en  nano segundos, también de un applet  el cual  dibuja  unas  pelotas rebotando en  la cual se  crean   las pelotas que  uno desee mediante la creación de  hilos en la cual  lo hicimos en equipo ya que  es una   ventaja el trabajar en equipo un poco   difícil el coordinar el equipo pero   es mejor.

Friday, September 4, 2009

El día de hoy vimos  un poco mas de la historia de lo que  es la programación concurrente de unas copias   que se titulan  “Introducción a la Computación Distribuida”    que  ella nos dio para  que   complementáramos la  clase en el cual se tocaron los  subtemas de:

                *historia de  la computación distribuida

                               -Tendencia Histórica

*Diferentes Formas de  Computación

-Computación monolítica

-Computación distribuida

-Computación  paralela (solo  fue  una   mención de lo que es)

-Computación  Cooperativa

-  un articulo llamado “Por donde viaja el Internet”

*Virtudes y  Limitaciones de  la Computación Distribuida

 

En el cual  un tema q me llamo la atención  fue  el de  de  “Como viaja el internet” ya que la verdad nunca  me  pregunte ni tuve esa  inquietud del  saber o preguntarme como es  que viaja el internet, en el cual  nos  dio  las copias  como  ejemplo  el  uso del sistema de    “Ebay” de l como interactúa el  paso de  datos  a donde los manda y como los recibe, que  por desgracia solo lo mencionare  por este medio  ya que no lo detallare esa  información  pero  mas adelante   buscare un reportaje  para   ligarlo   a este  blog.

Como investigación  dejo  investigar  la súper computadora  que la  UNAM tiene  llamada “kam-Balam”   del por que  no esta al 100% de  su  uso total el cual esta conformado  por   1368 procesadores   AMD  ( WOOW!!!),  con  3000 GB de  RAM   y  160 TB de   almacenamiento,  claro  la verdad nunca  pensé   que  estuviera tan súper  esa computadora  que  aunque   está   la verdad muy  padre  no esta  a todo su máximo potencial , es mas  por ahí le leí que  ni siquiera   la dejan   usar  al todos los  alumnos  que   la  necesitan, pero en fin  esperemos que  eso solo sea  un rumor ya que si tiene tan tremenda  computadora  se le  debería sacar   todo  el  aprovechamiento  mas que la UNAM  es una de las universidades reconocidas por  sus investigaciones.

 O tu que  piensas ¿?



Wednesday, September 2, 2009

laboratorio de clase de prog Concurrente

El dia de  hoy  como todos los miércoles de  laboratorio  vimos el tema de  los hilos en java y su precedencia, esto como un repaso del  lenguaje de  java en el cual hicimos  unas preguntas que  la maestra nos dejo en la plataforma  moodle  las cuales  no  hacen  preguntas  de  un programa que  el cual   se cran  hilos en  java  utilizando  la interfaz runnable y   creándolo  por medio de la clase   thread.

 

Creando  en laboratorio  el reporte que  todos los miércoles  quiere  con el objetivo de la practica  el código del  programa  así como también  sus corridas del programa.

 

En el  cual aprendí  como se crean los hilos n en java con runnable  y  herendando   de la clase   thread.

Monday, August 31, 2009

2da. clase

Hola que tal aquí  les dejo  unos breves datos de lo que  hicimos  que en  general los puntos que vimos son:

*Breve introducción de concurrencia

*concepto de Programación Concurrente

*Programa y Proceso

*Beneficios

*concurrencia  y arquitecturas Hardware

*Sistemas monoprocesador

*Sistemas  multiprocesador

*Condiciones de Bernstein

*Grafos de  Precedencia

 

 

Breve introducción de concurrencia

La idea de programación concurrente siempre estuvo asociada al mundo de los

Sistemas Operativos (SSOO). No en vano, los primeros programas concurrentes

fueron los propios Sistemas Operativos de multiprogramación en los que un solo

procesador de gran capacidad debía repartir su tiempo entre muchos usuarios.

Para cada usuario, la sensación era que el procesador estaba dedicado para él.

Durante la década de los sesenta y setenta esto fue así.

 

La aparición en 1972 del lenguaje de alto nivel Concurrent Pascal

[Brinch-Hansen, 1975], desarrollado por Brinch Hansen, se encargó de romper

este mito y abrir la puerta a otros lenguajes de alto nivel que incorporaban

concurrencia.

Tres grandes hitos se nos antojan importantes para que la programación

concurrente actualmente sea tan importante:

 

      *La aparición del concepto de  thread o  hilo que hace que los programas

puedan ejecutarse con mayor velocidad comparados con aquellos que

utilizan el concepto de proceso.

      *La aparición más reciente de lenguajes como  Java,  lenguaje orientado a

objetos de propósito general que da soporte directamente a la programación

concurrente mediante la inclusión de primitivas específicas.

     *La aparición de  Internet que es un campo abonado para el desarrollo y la

utilización de programas concurrentes. Cualquier programa de Internet en el

que podamos pensar tales como un navegador, un chat, etc., están

programados usando técnicas de programación concurrente.

 

Concepto de Programación Concurrente

Pero que es   Programación Concurrente?

Vemos que dice nuestra definición “Acaecimiento o concurso de varios sucesos en un mismo tiempo”.

 Pero  ahora si cambiamos la palabra  “suceso” por  “proceso’”,  pero ahora para poder dar una definición adecuada necesitaremos dar  antes  unos conceptos que nos ayudaran  a enteder mejor  esta definición.

 

Programa y Proceso

Un  programa es un conjunto de instrucciones. Es, simplemente, una secuencia de líneas de código que dicen qué hacer con un conjunto de datos de entrada para producir algún tipo de salida, donde es  considerablemente   “estático”.

 

Un  proceso sería  un programa en ejecución. es algo más que las líneas de código de un

programa. Un proceso es algo  dinámico.

 

Concurrencia

Dos procesos serán concurrentes  cuando  la primera  instrucción  de uno de ellos  se ejecuta después de la primera instrucción del otro y antes de  la última,  no tienen q ejecutarse  exactamente al mismo  tiempo , simplemente  es suficiente con el hecho  de que  exista un intercalado  entre  la ejecución  de sus  instrucciones. Si se ejecutan al mismo tiempo  los dos procesos entonces es “Programacion Paralela”

 

Beneficios

Exixten bastantes motivos  por los  que la programación concurrente es útil la cual uno de  sus beneficios en los cuales mencionaremos 2 de  ellos que son:  VELOCIDAD DE EJECUCION            y  SOLUCION DE  PROBLEMAS  DE NATURALEZA CONRURRENTE.

 

Concurrencia y  arquitecturas  hardware

 

 En cuestión  de   hardware  en los cuales  se ejecutaran  nuestros procesos concurrentes,  que seria obvio pensar que   si dos  procesos van a ejecutarse  de forma concurrente vamos  a necesitar dos procesadores, uno para cada  proceso. Pero no  es así dependerá  aunque no exclusivamente del hardware, disponible y su topología.

Entonces  nos referimos a lo que  es  el numero de procesadores  en el sistema, asi  hacemos una distinción entre los sistemas  donde solo  hay  UN SOLO  PROCESADOR que  son los  “sistemas  monoprocesador”, y aquellos que hay  MAS DE UN PROCESADOR  que es  un  “ Sistema Multiprocesador” en los cuales   en  AMBOS  es  posible tener concurrencia.

 

 

Sistemas monoprocesador

Aquí   todos los procesos pueden estar ejecutándose al mismo  tiempo  sobre el procesador, solo uno de  ello podrá estar  haciéndolo, aunque  la sensación que le da al usurario es  estar  ejecutándose  al mismo tiempo, esto es  debido a que el Sistema Operativo va  alternando el tiempo de procesador entre los distintos procesos. Ala forma de   gestionar los procesos en un sistema monoprocesador  recibe el nombre de  “multiprogramación” q es otro de los beneficios de  la programación  concurrente un mejor aprovechamiento del procesador.

 

Sistemas  multiprocesador

Es aquel  en el que existen  mas de un procesador, esto permite  que exista paralelismo real entre los procesadores. Dentro de este sistema hay una clasificación como lo son:

                *Sistemas Fuertemente acoplados; Donde los  procesadores como otros dispositivos están conectados a un bus que permite que  todos los  procesadores puedan COMPARTIR la misma MEMORIA,  donde  puede ocurrir que cada procesador tenga  su misma memoria local, pero la sincronización y comunicación entre procesos se hará  mediante variables situadas en  la memoria compartida.

                *Sistemas Débilmente acoplados;  Aquí  no existe  una memoria compartida por los procesadores, cada procesador contiene su propia memoria local y esta conectado con otros procesadores mediante algún tipo de enlace de  comunicación. Un tipo de  especial de  estos  sistemas  lo constituyen los sistemas distribuidos, que  están  formados por un conjunto de nodos distribuidos  geográficamente y conectados de alguna forma. Donde  estos  nodos pueden ser a su vez  mono o multiprocesador.

 

Se le denomina “Multiproceso” a la  gestión  de  varios procesos dentro de un sistema multiprocesador ne la que cada procesador  puede  acceder a una memoria común y  “Procesamiento Distribuido” a la gestión de  varios  procesos en  procesadores, cada uno  con  su memoria local.

 

 

Condiciones de Bernstein

A. J. Bernstein  definió  unas condiciones   para determinar  si dos conjuntos  de instrucciones  pueden ejecutar concurrentemente, esto  surge ya que  no todas las partes de  un programa pueden  ejecutarse de  forma concurrente. En la cual  se define:

*conjunto de lectura   (Sn)={a1,a2,…,an}  en el cual son valores referenciados.

*conjunto de escritura (Sn)={b1,b2,…,bn} en el cual los valores son  actualizados durante  la ejecución de  las instrucciones en  Sn.

 

Para que dos  conjuntos de instrucciones  se puedan ejecutar concurrentemente, se tiene que cumplir que:

1.    L( Si )    E( Sj )  =

2.   E( Si )  L( Sj )  =

3.   E (Si )    E( Sj )  =

Donde  L(S)  pretencece al conjunto de lectura y  E (S )   pertenece al conjunto de lectura

Grafos de presencia

Es una manera de  especificar la ejecución concurrente  instrucciones que  son:

                *una  notación grafica

                *basada en lo que suelen  utilizar diversos lenguajes de programación el  par  cobegin/ coend.

 

Se les muestra un ejercicio  donde se les muestra como  se  utilizar este método.

 

Problema 1:

Usando las condiciones de Bernstein, construir el grafo de precedencia del siguiente trozo de código.

S1: cuad= x*x;

S2;    m1= a* cuad;

S3     m2= b * x;

S4:       z= m1 + m2;

S5:       y=  z + c;

 

SOLUCION:

1.       L( Si )    E( Sj )  =

2.       E( Si )  L( Sj )  =

3.       E (Si )    E( Sj )  =

 

L(S1) = { x }       E(S1) = {cuad}

L(S2) = {a, cuad}               E(S2) = {m1}

L(S3)  = {b, x}      E(S3) = { m2 }

L(S4) = { m1,m2}             E(S4) = { z }

L(S5) = {z, c}       E(S5) = { y }

Aplicando las condiciones:

Entre s1 y s2;                                                    Entre s1 y s3;

1.       L(S1 )    E(S2 )  =                         1. L(S1)     E(S3 )  =

2.       E(S1 )  L(S2 )  =    cuad ≠              2. E(S1)  L(S3)    =

3.        E (S1 )    E(S2)  =                              3. E(S1)    E(S3)   =

 

Entre s1 y s4;                                                       Entre s1 y s5;

1.         L(S1)    E(S4)  =                            1. L(S1)   E(S5)  =   

2.         E(S1)  L(S4)  =                              2. E(S1)  L(S5)  =

3.         E (S1) E(S4)  =                               3. E(S1)  E(S5)  =

 

Entre s2 y s3;                                                     Entre  s2 y s4;

1.       L(S2)    E(S3) =                           1. L(S2)   E(S4) =    

2.       E(S2)  L(S3)  =                           2. E(S2)   L(S4)  = {m1} ≠

3.       E(S2) E(S3)  =                             3. E(S2)  E(S4)  =

 

 

Entre s2 y s5;                                                         Entre s3 y s4;

1.       L(S2)    E(S5)  =                           1. L(S3)   E(S4)  =   

2.       E(S2)  L(S5)  =                          2. E(S3)   L(S4)  = {m2} ≠

3.       E (S2) E(S5)  =                          3. E(S3)   E(S4)  =

 

Entre s3 y s5;                                                          Entre s4 y s5;

1.       L(S3)    E(S5)  =                         1. L(S4)    E(S5)  =   

2.       E(S3)  L(S5)  =                         2. E(S4)   L(S5)  =  { z }≠

3.       E (S3) E(S5)  =                           3. E(S4)   E(S5)  =