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) = ∅
No comments:
Post a Comment