Вы находитесь на странице: 1из 15

LABORATORIO N 01: Conceptos Fundamentales

Pgina 1


CAPTULO 1

OBJETIVOS

Comprender los conceptos bsicos de programacin concurrente.

Determinar mediante las condiciones de Bernstein si dos puntos de
instrucciones se pueden ejecutar de forma concurrente.

Expresar instrucciones secuenciales y concurrentes por medio de grafos de
procedencia.


































LABORATORIO N 01: Conceptos Fundamentales



Pgina 2


CAPTULO 2
FUNDAMENTO TERICO

Concurrencia

La concurrencia es la simultaneidad de hechos. Un programa concurrente es aquel
que en ciertas unidades de ejecucin internamente secuenciales (procesos o
threads), se ejecutan en forma paralela o simultneamente.

Un programa concurrente es aquel que tiene ms procesos en marcha a la vez que
procesadores tiene la mquina.

En un SO multiusuario y multitarea el trmino concurrencia hace referencia a la
independencia de ejecucin de los procesos en dicho sistema. Entonces, diremos
por tanto que dos procesos son concurrentes si son independientes. Dos procesos
son independientes si el resultado de la ejecucin de ambos es siempre el mismo
independientemente del orden en que se ejecutan.


Paralelismo

El paralelismo es una forma de computacin en la cual varios clculos pueden
realizarse simultneamente, basado en el principio de dividir los problemas grandes
para obtener varios problemas pequeos, que son posteriormente solucionados en
paralelo.

El concepto de paralelismo supone la ejecucin simultnea de varios procesos. Para
implementar el paralelismo se necesita un hardware adecuado (se necesitan varios
procesadores). En caso de tener un nico procesador, el paralelismo se puede
simular mediante una ejecucin entrelazada y si el sistema es suficientemente
rpido el usuario no se entera.

Un programa paralelo es el que se ejecuta en varios procesadores a la vez.

El paralelismo indica ejecucin simultnea, por lo tanto, es un caso concreto de
concurrencia. Se pueden sacar las siguientes conclusiones:

Paralelismo Concurrencia
Sin embargo, Concurrencia no implica Paralelismo


LABORATORIO N 01: Conceptos Fundamentales



Pgina 3


Grafos de precedencia

Un grafo de precedencia es un grafo dirigido y sin ciclos donde los nodos
corresponden a instrucciones independientes.

Representacin grfica de un algoritmo en el que se establece el orden de ejecucin
de un conjunto de instrucciones y/o datos.

Grafo acclico orientado cuyos nodos corresponden a sentencias individuales.
Son grafos cclicos, no presentan bucles, donde cada S
1
representa un conjunto de
sentencias que se unen mediante arcos que indican precedencia de orden de
ejecucin.














Cuando se abren dos arcos se indica concurrencia. Cuando se unen dos arcos se
indica un punto de sincronizacin. Las sentencias de S
4
no se pueden ejecutar hasta
que terminen las sentencias S
2
y S
3
.

Las flechas indican secuencialidad. El resultado debera ser el mismo
independientemente del orden de ejecucin. En un algoritmo concurrente no se
puede predecir el orden de ejecucin. Es decir, en el esquema anterior se puede
observar que el orden de ejecucin pude ser:


S
1
S
2
S
3
S
4


S
1
S
3
S
2
S
4





S1
S3 S2
S4
Concurrencia
Puntos de
sincronizacin
LABORATORIO N 01: Conceptos Fundamentales



Pgina 4


Sentencias FORK / JOIN

La sentencia fork indica que a partir de ese momento empieza cdigo concurrente,
por otra parte join indica un punto de sincronizacin.





















El inconveniente que presenta el uso de fork y join viene dado por el uso de la
sentencia GOTO que no sigue las normas de la programacin estructurada. As
tenemos que los programas con fork y join son poco legibles. Se le debemos a
Conway (1963).


Sentencias COBEGIN / COEND

Las propone Dijstra en 1965 para solventar las dificultades del fork y el join. Veamos
un ejemplo y comparemos las sentencias FORK/JOIN con COBEGIN/COEND




S1
S3 S2
S4
BEGIN
cuenta:=2;
S1;
FORK L1;
S2;
GOTO L2;
L1: S3;
L2: JOIN; /*se une el flujo de un lado con el otro*/
S4;
END;

LABORATORIO N 01: Conceptos Fundamentales



Pgina 5













































S1
S3 S2
S6
S4
S5
S7
FORK/JOIN

BEGIN
cuenta:=3;
S1;
FORK L1;
S3;
GOTO L2;
L1: S2;
S4;
FORK L3;
S5;
GOTO L4;
L3: S6;

L4: L2 JOIN cuenta;
S7;
END;

COBEGIN/COEND
BEGIN
S1;
COBEGIN
S3;
BEGIN
S2;
S4;
COBEGIN
S5;
S6;
COEND
END
COEND
S7;
END;
Indica que empieza
cdigo concurrente
LABORATORIO N 01: Conceptos Fundamentales



Pgina 6


CAPTULO 3

PROCEDIMIENTO Y DESARROLLO
Ejercicios:

A. Por medio de la condiciones de Bernstein indique cuales de las siguientes
instrucciones pueden ser ejecutadas de forma concurrente:

S1: a = a + c;
S2: d = b + e;
S3: f = c + e;
S4: g = fun (a, d, f);
S5: f = sen (w);

Solucin:

Debe cumplirse:


L (S1) = {b, c} E (S1) = {a}
L (S2) = {b, e} E (S2) = {d}
L (S3) = {c, e} E (S3) = {f}
L (S4) = {a, d, f} E (S4) = {g}
L (S5) = {w} E (S5) = {f}

















L (S
i
) E (S
j
)=
E (S
i
) L (S
j
) =
E (S
i
) E (S
j
) =
Entre S1 S2
L (S1) E (S2)=
E (S1) L (S2) =
E (S1) E (S2) =

Entre S1 S3
L (S1) E (S3)=
E (S1) L (S3) =
E (S1) E (S3) =

Entre S1 S4
L (S1) E (S4)=
E (S1) L (S4) = a
E (S1) E (S4) =

Entre S1 S5
L (S1) E (S5)=
E (S1) L (S5) =
E (S1) E (S5) =

Entre S2 S3
L (S2) E (S3)=
E (S2) L (S3) =
E (S2) E (S3) =

Entre S2 S4
L (S2) E (S4)=
E (S2) L (S4) = d
E (S2) E (S4) =


LABORATORIO N 01: Conceptos Fundamentales



Pgina 7











Tendramos el siguiente cuadro:











En conclusin se pueden ejecutar concurrentemente:
S1 y S2, S1 y S3, S1 y S5, S2 y S3, S2 y S5.








S1 S2 S3 S4 S5
S1 - Si Si No Si
S2 - - Si No Si
S3 - - - No No
S4 - - - - No
S5 - - - - -
Entre S2 S5
L (S2) E (S5)=
E (S2) L (S5) =
E (S2) E (S5) =

Entre S3 S4
L (S3) E (S4)=
E (S3) L (S4) = f
E (S3) E (S4) =


Entre S3 S5
L (S3) E (S5)=
E (S3) L (S5) =
E (S3) E (S5) = f

Entre S4 S5
L (S4) E (S5)=
E (S4) L (S5) =
E (S4) E (S5) =


LABORATORIO N 01: Conceptos Fundamentales



Pgina 8



B. De los siguientes grafos de precedencia Cules no se pueden representar
con las instrucciones cobegin y coend? Explique detalladamente el
porqu.

a) b)














Solucin:
Los grafos de precedencia b), no pueden ser representados por las
instrucciones cobegin y coend, ya que no pueden ser divididos en
subgrafos disjuntos concurrentes, lo cual no sucede con los grafos de
precedencia de a).





S1
S4
S2
S1
S3
S6
S5
S2 S4
S3
S7 S5
S6
S8
S9
S10
S11
LABORATORIO N 01: Conceptos Fundamentales



Pgina 9


C. Transforme los grafos de precedencia de la figura en un programa usando
instrucciones cobegin y coend.










































P3
P2
P7
P4
P6
P8
P1
P5
S1
S2 S4
S3
S5
S6
Solucin:
Begin
P1;
Cobegin
Begin
P2;
P4;
Cobegin
P6;
P7;
Coend
End;
Begin
P3;
P5;
End;
Coend
End;
Solucin:
Begin
S1;
Cobegin
S4;
Begin
Cobegin
S2;
S3;
Coend
S5;
End;
Coend
S6;
End;
LABORATORIO N 01: Conceptos Fundamentales



Pgina 10
























D. Construya el grafo de precedencia para el siguiente segmento de un
programa concurrente.

BEGIN
S1;
COBEGIN
BEGIN
S2;
COBEGIN
S4; S5;
COEND
S7;
END;
BEGIN
S3; S6; S8;
END
COEND
S9;
END.

P3
P2
P5 P4
P6
P7
P1
Solucin:
Begin
P1;
Cobegin
Begin
P3;
Begin
P2;
Cobegin
P4;
P6;
P5;
Coend
End;
Coend
P7;
End;
LABORATORIO N 01: Conceptos Fundamentales



Pgina 11


Solucin:



















E. Construya otro programa para D) usando las instrucciones fork y join.

Solucin:

















S3
S2
S7
S4 S5
S9
S1
S6
Begin
cont1:=2;
cont2:=2;
S1;
Fork L1;
S2;
Fork L2;
S4;
Goto L3;
L2: S5;
L3: join cont1;
S7;
Goto L4;
L1: S3;
S6;
S8;
L4: join cont2;
S9;
End;
S8
LABORATORIO N 01: Conceptos Fundamentales



Pgina 12


F. Transforme los siguientes grafos de precedencia usando instrucciones
fork y join.









































P3
P2
P7
P4
P6
P8
P5
P1
P3
P2
P6
P4
P5
P7
P1
Solucin:
Begin
cont:=3;
P1;
Fork L1;
P2;
P4;
Fork L2;
P6;
Goto L3;
L2: P7;
Goto L3;
L1: P3;
P5;
L3: join cont;
P8;
End;
Solucin:
Begin
cont1:=2;
cont2:=2;
P1;
Fork L1;
P2;
P4;
Fork L2;
P5;
Goto L3;
L1: P3;
L2: join cont1;
P6;
L3: join cont2;
P7;
End;
LABORATORIO N 01: Conceptos Fundamentales



Pgina 13


G. Dado el siguiente programa, construya el grafo de precedencia:

BEGIN
CONT1=3;
CONT2=2;
S1;
FORK L1;
S2;
S4;
FORK L2;
S5;
GOTO L3;
L1: S3;
L2: JOIN CONT1;
S6;
L3: JOIN CONT2;
S7;
END.


Solucin:





















LABORATORIO N 01: Conceptos Fundamentales



Pgina 14


CAPTULO 4

CONCLUSIONES


Comprendimos que la programacin concurrente es la simultaneidad en la
ejecucin de mltiples tareas interactivas, estas tareas se pueden ejecutar
en un solo procesador o en varios procesadores, de forma paralela o
simultnea.

Conocimos las condiciones de Bernstein y pudimos deducir segn estas, si
dos instrucciones se pueden ejecutar de forma concurrente.

Por medio de los grafos de precedencia pudimos expresar instrucciones de
forma secuencial y concurrente, as como tambin utilizamos las
instrucciones de fork/join y cobegin/coend, al interpretar un grafo.




























LABORATORIO N 01: Conceptos Fundamentales



Pgina 15



BIBLIOGRAFA

Aires, Universidad de Buenos. (s.f.). Concurrencia: Procesos y programas.
Obtenido de http://www-2.dc.uba.ar/materias/so/datos2/09-concurrencia.pdf
Fernndez, Y. B. (s.f.). Tema 3: Concurrencia de Procesos. Obtenido de
http://gssi.det.uvigo.es/users/avilas/public_html/SO/diapositivas/3.pdf
Monografas. (s.f.). Los procesos en los Sistemas Operativos. Obtenido de
http://www.monografias.com/trabajos82/procesos-sistemas-
operativos/procesos-sistemas-operativos2.shtml
Vazquez Alcocer, P.-P., Marco Gmez, J., Molinero Albareda, X., & Martn Prat,
. (2006). Programacin en C++ para ingenieros. Madrid: Thompson.
Wikipedia. (s.f.). Paralelismo (informtica). Obtenido de
http://es.wikipedia.org/wiki/Paralelismo_(Informtica)

Вам также может понравиться