Documentos de Académico
Documentos de Profesional
Documentos de Cultura
ESPECIFICACIÓN FORMAL DE
SISTEMAS CONCURRENTES
Sentencias Concurrentes
! Ahora es necesario, dado un programa concurrente,
saber que secciones del código son concurrentes y
cuáles no, además es indispensable especificarlo en un
lenguaje de programación.
! EnIesteIcasoIlasIinstruccionesInoIpuedenIejecutarseIdeIformaI
independiente.
Sentencias Concurrentes
! Consideremos ahora:
" x:=1
" y:=2
" z:=3
! Si>se>tuvieran>3>procesadores>en>cada>uno>se>colocaría>cada>
instrucción.
! Aunque>la>intuición>nos>indique>cuando>ejecutar>concurrentemente>
Bernstein definió>condiciones>para>garantizar>la>concurrencia.
Condiciones de Bernstein
! Para determinar si dos conjuntos de instrucciones se
pueden ejecutar de forma concurrente se definen:
! Usando'las'condiciones'de'Bernstein,'construir'la'
tabla'de'concurrencia.
1 3
5
Ejercicio
! Usando'las'condiciones'de'Bernstein,'construir'la'
tabla'de'concurrencia.
! Grafo(de(precedencia
! Sentencias(cobegin:coend
Grafos de precedencia
! Es#una#notación#gráfica.
! Se#representa#como#un#grafo#dirigido#acíclico.
! Cada#nodo#representa#una#parte#del#sistema#
(conjunto#de#instrucciones).
! Una#flecha#desde#A#hasta#B#representa#que#B#
sólo#se#puede#ejecutar#cuando#A#haya#finalizado.
! Si#aparecen#dos#nodos#en#paralelo,#significa#que#
se#pueden#ejecutar#concurrentemente.
Ejemplo de grafo de precedencia
I1 I2 I3 I4
I1 #### Si No Si
S1
S1
I1 S2
S2
I2
I2 #### #### No Si
FORK:L1:
S3
S3
I3
I2:
I3 #### #### #### No GOTO:L3:
L1:I1: I1!a:=x+y1
L3::JOIN:2: I2!b:=z#11
I3:
I4 #### #### #### #### I3!c:=a#b1
I4 S3
S4
I4
I4!w:=c+11
Sentencias COBEGIN-COEND
! Aquellas(instrucciones(que(puedan(ejecutarse(
concurrentemente(se(introducen(entre(el(par(
cobegin/coend.(
! Las(instrucciones(en(el(bloque(pueden(ejecutarse(
en(cualquier(orden,(el(resto(de(manera(secuencial.
Begin
! Ejemplo: cobegin
" S1#a:=x+yA a:=x+y
" S2#b:=zD1A b:=z01
" S3#c:=aDbA
coend
c:=a0b;
" S4#w:=c+1A
w:=c+1;
end
Ejercicios
1. Construir+un+programa+concurrente,+utilizando+
el+par+cobegin /+coend,+del+siguiente+grafo+de+
precedencia. Begin+ S1
S1 FORK+L2
Cobegin+ S3
Begin+ GOTO+L7
S2+ L2:S2
S4
S4+ FORK+L5
Cobegin+ S6
S5+ GOTO+L7+
S6+ L5:S5
Coend+ GOTO+L7+
End+ L7:+JOIN+3
S7
S3+
Coend+
S7
End
Solución
! S1#
! Cobegin
" S3
" begin
! S2#
! S4
! Cobegin
# S5#/
# S6#
! Coend#
" end#
! Coend#
! S7#
Ejercicio
! Dato%el%siguiente%código%obtener%el%grafo%de%precedencia
Begin
" S07
" Cobegin
! S17
! Begin
" S27
" Cobegin
# S37%S4
" Coend7
" S5
! End7
! S6
" Coend7
" S7
End
Solución
! S0#
! Cobegin
" S1#
" Begin
! S2#
! Cobegin
# S3#/S4
! Coend#
! S5
" End#
" S6
! Coend#
! S7
Solución
S0
Fork'L1'
Fork'l2'
S6'
Goto'L7'
L1:'S1'
Goto'L7'
L2:S2'
Fork'L3'
S4'
Goto'L5'
L3:S3'
L5:'join'2'
S5'
L7:'join'3'
S7
Paralelo
FORK2L12
! Cobegin FORK2L22
FORK2L32
" P1 P42
GOTO2L2
" P2 L1:P12
GOTO2L2
" P3 L2:P22
GOTO2L2
" P4 L3:P32
L:JOIN24
! Coend
Serie/Paralelo
Begin&
p1&
cobegin&
begin&
cobegin&
p2-p3&
coend&
p4&
end&
p6
coend&
p7&
end
Serie/Paralelo
! Begin
" P1
" Cobegin
! P6
! Begin
" Cobegin
# P2
# P3
" Coend
" P4
! End
" Coend
" P7
! End
Ejercicio
! Construir)dos)programas)concurrentes,)usando)cobegin/coend,)que)
correspondan)con)los)siguientes)grafos)de)precedencia.
begin) Begin)
s1) s1)
cobegin) begin)
s5) cobegin)
begin) s3)
s2) begin)
cobegin) s2)
s3)s4) s4)
coend) end)
end) coend)
coend) cobegin)
s6) s5)
end s6)
coend)
end)
s7)
End)
Ejercicio
! Usando'las'condiciones'de'Bernstein,'construir'el'
grafo'de'precedencia'del'siguiente'código'y'el'
programa'concurrente'correspondiente'usando'el'
par'cobegin/coend.
L4:
L7:
Ejercicio
! Modele&el&siguiente&grafo&usando&fork1join
S1&
FORK&L2&
S3&
GoTo&L&
L2:S2&
L:&Join&2&
S4
Solución
Ejercicio
P1
Fork'L2
Fork'L5
P7
Goto'L8
L2:P2
Fork'L3
P4
Goto'L6
L3:'P3
Goto'L8
L5:'P5
L6:Join'2
P6
L8:Join'3
P8
Ejercicio
S1
FORK'L1'
FORK'L2'
S2'
FORK'L3'
Goto'L4'
L2:'S4'
Goto'L4'
L1:'S3'
FORK'L3'
Goto'L4'
L3':'Join'2'
S5'
Goto'L5'
L4:'Join'3'
S6'
Goto'L5'
L5':'Join'2'
S7