Anda di halaman 1dari 11

Asignatura Arquitectura de Computadores II

PROGRAMACIN CONCURRENTE

Ing. Brbara Briceo

PROGRAMACION CONCURRENTE
Los elementos que constituyen un programa concurrente son mdulos independientes denominados tareas o procesos. La programacin concurrente se encarga fundamentalmente de temas vinculados a la comunicacin y sincronizacin de procesos. La comunicacin permite que los procesos cooperen entre s en la ejecucin de un objetivo global, en tanto que la sincronizacin permite que un proceso contine su ejecucin despus de que un determinado evento ha ocurrido. La comunicacin entre tareas o procesos se puede realizar bsicamente de dos maneras: a) comunicacin a travs de un rea comn de memoria, o b) comunicacin mediante el intercambio de mensajes. En el caso a) es necesario contar con mecanismos de sincronizacin para garantizar la consistencia de los datos almacenados como por ejemplo semforos, monitores, etc. En el caso b) las variables son locales. Un mensaje al llegar a su destino slo es entregado a su tarea cuando sta lo requiere. Si lo requiere y an no est disponible la tarea debe suspenderse y esperar la llegada del mensaje.

Un grafo de precedencia es un grafo sin ciclos donde cada nodo representa una nica sentencia. Un arco que parte del nodo S1 hacia el S2 indica que S2 puede ser ejecutado slo si S1 ha completado su ejecucin.

GRAFO DE NO PRECEDENCIA GRAFO DE PRECEDENCIA

Dos sentencias cualesquiera Si y Sj pueden ejecutarse concurrentemente produciendo el mismo resultado que si se ejecutaran secuencialmente s y slo s se cumplen las siguientes condiciones: 1. R (Si) W (Sj) = (). 2. W (Si) R (Sj) = (). 3. W (Si) W (Sj) = (). Estas condiciones se conocen con el nombre de Condiciones de Bernstein.

CORRUTINAS

La transferencia de control es la instruccin RESUME. Este mecanismo implementa la sincronizacin entre tareas para un nico procesador, luego sirven para un ambiente de multiprogramacin, y no para el caso de procesamiento en paralelo, ya que este sistema permite la ejecucin de una rutina a la vez. Las corrutinas mantienen su estado anterior de ejecucin, esto es, los resultados o modificaciones realizados durante la ltima invocacin permanecen para la prxima vez que se la utilice (debido a que cuentan con una memoria local que permanece).

INSTRUCCIONES FORK Y JOIN S1; count := 2; fork L1; ----S2; go to L2; L1: S3; L2: join count; S4; -----

S1; fork L1; S2; --go to L2 L1: S3; L2: join; S4;

S1; cuenta = 3; fork L1; S2; S4; fork L2; S5; go to L3; L2 : S6; go to L3; L1: S3; L3: join cuenta; S7;

INSTRUCCION DE CONCURRENCIA COBEGIN/COEND

Ejercicio Propuesto

Instruccin Cobegin/Coend expresada mediante Fork/Join


COBEGIN S1; S2; ..............; SN COEND

cuenta = n; fork L2; fork L3; ... fork Ln; S1; go to Lj; L2: S2; go to Lj; ... ... Ln: Sn; Lj: join cuenta;

Anda mungkin juga menyukai