Edición de «Práctica Programación Concurrente (Sistemas Operativos)»

De Cuba-Wiki
Advertencia: no has iniciado sesión. Tu dirección IP se hará pública si haces cualquier edición. Si inicias sesión o creas una cuenta, tus ediciones se atribuirán a tu nombre de usuario, además de otros beneficios.

Puedes deshacer la edición. Antes de deshacer la edición, comprueba la siguiente comparación para verificar que realmente es lo que quieres hacer, y entonces publica los cambios para así efectuar la reversión.

Revisión actual Tu texto
Línea 1: Línea 1:
{{Back|Sistemas Operativos}}
===Ejercicio 1===
===Ejercicio 1===


Línea 27: Línea 25:


<br>Condiciones de Bernstein: R(Si) n W(Sj) = W(Si) n R(Sj) = W(Si) n W(Sj) = {}  
<br>Condiciones de Bernstein: R(Si) n W(Sj) = W(Si) n R(Sj) = W(Si) n W(Sj) = {}  
<br>Se pueden ejecutar concurrentemente:
<br>Se pueden ejecutar concurrentemente S1 y S2, S1 y S3, S1 y S5, S2 y S3, S2 y S5
<br>S1 y S2,  
<br>S1 y S3,  
<br>S1 y S5,  
<br>S2 y S3,  
<br>S2 y S5


===Ejercicio 2*===
===Ejercicio 2*===
a)
a)
<pre>
<pre>
    Count5 = Count6 = 2
Count5 = Count6 = 2
 
s1
fork L3
fork L4
s2
jump Join5
 
L3:
s3
jump Join5
 
Join5:
join Count5
s5
jump Join6
 
L4:
s4
jump Join6


    s1
Join6:
    fork L1
join Count6
    fork L2
         S6
    s2
    goto L3
L2: s3
L3: join Count5
    s5
    goto L4
L1: s4
         L4: join Count6
            S6
</pre>
</pre>
b)
b)
Línea 70: Línea 73:


===Ejercicio 3*===
===Ejercicio 3*===
<br>La instrucción Join debe ser atómica ya que mantiene una cuenta de cuantos procesos esta esperando, y si no fuera atómica, podría funcionar mal, y por ejemplo "matar" a, los dos o mas procesos que tenían que unirse ahi.  
<br>La instruccion Join es indivisible porque debe ser atomica. Es decir, no puede ser interrumpida a la mitad. Esto es necesario ya que join mantiene una cuenta de cuantos procesos esta esperando, y si no fuera atomica, podria funcionar mal, y por ejemplo "matar" a todos los dos o mas procesos que tenian que unirse ahi.  
<br>
La definición de ''' join var''' es:
<br>
1 ) var - - ;
<br>
2 ) if (var =! 0) then wait;
<br>
si justo es interrumpida después de 1) y antes de 2) y para ejecutar otro join con la misma variable. supongamos que var valia 0, y ahora se decrementa y pasa a varler -1, chau
tu programa queda en wait para siempre.
 
<br>
<br>


Línea 200: Línea 193:
PREMISAS DE DIJKSTRA:
PREMISAS DE DIJKSTRA:
1) No deben hacerse suposiciones sobre las instrucciones de máquina ni la cantidad de </br>procesadores. Sin embargo, se supone que las instrucciones de máquina (Load, Store, Test) son ejecutadas atómicamente, o sea que si son ejecutadas simultáneamente el </br>resultado es equivalente a su ejecución  secuencial en un orden desconocido.
1) No deben hacerse suposiciones sobre las instrucciones de máquina ni la cantidad de procesadores. Sin embargo, se supone que las instrucciones de máquina (Load, Store, Test) son ejecutadas atómicamente, o sea que si son ejecutadas simultáneamente el resultado es equivalente a su ejecución  secuencial en un orden desconocido.


2) No deben hacerse suposiciones sobre la velocidad de los procesos.
2) No deben hacerse suposiciones sobre la velocidad de los procesos.
Línea 209: Línea 202:
Los puntos 3) y 4) evitan bloqueos mutuos.
Los puntos 3) y 4) evitan bloqueos mutuos.
5) Debe existir un límite al número de veces que otros procesos están habilitados a entrar a secciones críticas</br> después que un proceso haya hecho su pedido.
5) Debe existir un límite al número de veces que otros procesos están habilitados a entrar a secciones críticas después que un proceso haya hecho su pedido.
</pre>
</pre>


Similar al Alg. 2, no se asegura que un solo proceso este en la zona critica, ej:
Similar al Alg. 2, no se asegura que un solo proceso este en la zona critica, ej:
<br> T0 Tarea1 encuentra C2 = 1,<br>  T1 Tarea2 encuentra C1 = 1,<br>  T2 Tarea2 pone C2 = 0,<br>  T3 Tarea1 pone C1 = 0
<br> T0 Tarea1 encuentra C2 = 1, T1 Tarea2 encuentra C1 = 1, T2 Tarea2 pone C2 = 0, T3 Tarea1 pone C1 = 0


===Ejercicio 8===
===Ejercicio 8===
Similar al Alg. 3, no cumple 4) ya que ambos procesos pueden quedar en espera indefinida, ej:  
Similar al Alg. 3, no cumple 4) ya que ambos procesos pueden quedar en espera indefinida, ej:  
<br> T0 Tarea1 encuentra C1 = 0,<br>  T1 Tarea2 encuentra C2 = 0
T0 Tarea1 encuentra C1 = 0, T1 Tarea2 encuentra C2 = 0


===Ejercicio 9===
===Ejercicio 9===
Línea 276: Línea 269:
Proc CruzarLado1
Proc CruzarLado1
P(exc)
P(exc)
P(X)
P(X)
gentelado1++
gentelado1++
V(exc)
V(exc)
cruzar
cruzar
P(exc)
P(exc)
gentelado1--
gentelado1--
if (gentelado2>0 || gentelado1==0)
if (gentelado2>0 || gentelado1==0)
V(Y)
V(Y)
else
else
V(X)
V(X)
endif
endif
V(exc)
V(exc)


Proc CruzarLado2
Proc CruzarLado2
P(exc)
P(exc)
P(Y)
P(Y)
gentelado2++
gentelado2++
V(exc)
V(exc)
cruzar
cruzar
P(exc)
P(exc)
gentelado2--
gentelado2--
if (gentelado1>0 || gentelado2==0)
if (gentelado1>0 || gentelado2==0)
V(X)
V(X)
else
else
V(Y)
V(Y)
endif
endif
V(exc)
V(exc)
</pre>
</pre>
Línea 687: Línea 680:
<br>y no es lo mismo ejecutarlas en paralelo, que en forma secuencial ya que la 2nda instruccion tiene una dependencia de datos con la primera.  
<br>y no es lo mismo ejecutarlas en paralelo, que en forma secuencial ya que la 2nda instruccion tiene una dependencia de datos con la primera.  
<br>
<br>
[[Category:Prácticas]]
Ten en cuenta que todas las contribuciones a Cuba-Wiki pueden ser editadas, modificadas o eliminadas por otros colaboradores. Si no deseas que las modifiquen sin limitaciones, no las publiques aquí.
Al mismo tiempo, asumimos que eres el autor de lo que escribiste, o lo copiaste de una fuente en el dominio público o con licencia libre (véase Cuba-Wiki:Derechos de autor para más detalles). ¡No uses textos con copyright sin permiso!

Para editar esta página, responde la pregunta que aparece abajo (más información):

Cancelar Ayuda de edición (se abre en una ventana nueva)

Plantilla usada en esta página: