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


    s1
Join5:
    fork L1
join Count5
    fork L2
s5
    s2
jump Join6
    goto L3
 
L2: s3
L4:
L3: join Count5
s4
    s5
jump Join6
    goto L4
 
L1: s4
Join6:
        L4: join Count6
join Count6
            S6
        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 instrucción Join es indivisible porque debe ser atómica. 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 atómica, podría funcionar mal, y por ejemplo "matar" a, los dos o mas procesos que tenían que unirse ahi.  
<br>
<br>
La definición de ''' join var''' es:
La definición de ''' join var''' es:
Línea 200: Línea 203:
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 <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.


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 212:
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 279:
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 690:
<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: