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)  =





Monday, August 24, 2009

precentacion del curso

Hola que tal amigos compañeros y publico en general hoy iniciamos este blog de comentario respecto a la materia de programacion Concurrente y Paralela en la cual sera un curso prometedor ya que veremos la forma de programar concurrentemente, sus algoritmos formas e implementacion ya que este curso sera mas para programacion en lenguaje java. Se mostrarán programas que se fueron haciendo en las clase de laboratorio en el cual es cuando hacemos practica la teoria vista en clases, este blog sera también un tipo de diario ya que cada dia que tengamos clase redactaré a grandes rasgos lo que se hizo dentro de ella asi como de explicar que temas se vieron y en que consistieron, si hubo alguna actividad o que fue lo que sucedió en clase etc.


En este dia se hizo la precentacion de la maestra al grupo maestra al  grupo  ya que para los  alumnos que no la conociamos  se  precento  explico un poco de lo queseria    el curso  y asi   del como  se valuaria la materia,  al  igual  los temas   que se tratarian  en  clase como son:


  1. Introcuccion a la Programacion Paralela y Concurrente.
  2. Procesos e  Hilos.
  3. Primitava en  java.
  4. Exclusion  mutua.
  5. Semaforos.
  6. Monitores.
  7. Sockets.
En los cuales confomre  vallamos viendo clases  se iran detallando que puntos  se  fueron viendo en general de los temas  expuestos.