Diferencia entre revisiones de «Práctica Semáforos (Sistemas Operativos)»
Sin resumen de edición |
|||
(No se muestran 31 ediciones intermedias de 3 usuarios) | |||
Línea 1: | Línea 1: | ||
Ejercicio 01[*]: | {{Back|Sistemas Operativos}} | ||
a. | |||
A | ==Ejercicio 01[*]:== | ||
<br>a)ABCABC.. | |||
<pre> | |||
A B C | |||
P( A ) P( B ) P( C ) | P( A ) P( B ) P( C ) | ||
... | ... ... ... | ||
V( B ) V( C ) V( A ) | V( B ) V( C ) V( A ) | ||
Inicio | Inicio | ||
A = n > 0 | |||
A=n > 0 | |||
B = 0 | B = 0 | ||
C = 0 | C = 0 | ||
</pre> | |||
b. | <br>b)ABACABAC.. | ||
A | <pre> | ||
P( A ) | A B C | ||
P( A ) P( B ) P( C ) | |||
... | P( msg ) P( msg ) | ||
... ... ... | |||
V( msg ) | V( A ) V( A ) | ||
V( msg ) V( C ) V( B ) | |||
Inicio | Inicio | ||
A = n > 0 | |||
A=n > | |||
B = 1 | B = 1 | ||
C = 0 | C = 0 | ||
msg = 0 | |||
</pre> | |||
c. | <br>c)(AoB)C(AoB)C.. | ||
A | <pre> | ||
A B C | |||
P( A ) P( A ) P( C ) | P( A ) P( A ) P( C ) | ||
... | ... ... ... | ||
V( C ) V( C ) V( A ) | V( C ) V( C ) V( A ) | ||
Inicio | Inicio | ||
A = n > 0 | |||
C = 0 | |||
</pre> | |||
A | ==Ejercicio 02:== | ||
A(BoC)A(BoC).. | |||
<pre> | |||
A B C | |||
P( X ) P( Y ) P( Y ) | |||
... ... ... | |||
V( Y ) V( X ) V( X ) | |||
Inicio | |||
X = 1 | |||
Y = 0 | |||
</pre> | |||
Ejercicio | ==Ejercicio 03:== | ||
<br>a) | |||
Ejercicio 04: | <br>b) | ||
Ejercicio 05[*]: | ==Ejercicio 04:== | ||
a | ==Ejercicio 05[*]:== | ||
Hay un deadlock, porque Z espera que se incremente B, y B nunca se va a incrementar, porque eso lo hace Y (que no se va a ejecutar) | <br>a) Hay un deadlock, porque Z espera que se incremente B, y B nunca se va a incrementar, porque eso lo hace Y (que no se va a ejecutar) | ||
<br>b) Se podrian invertir los primeros dos P's, tanto en Y como en Z | |||
<br>c) Me parece que anda bien (por algo lo di como solucion del b :P) | |||
<br>d) | |||
==Ejercicio 06[*]:== | |||
<br>a) | |||
<pre> | |||
S R B C Signal Wait | |||
1 0 0 1 | |||
0 1 0 1 R X | |||
0 1 -1 1 B Z | |||
1 0 0 0 B B Y | |||
1 -1 0 0 B Y | |||
1 -1 0 -1 B/C X | |||
0 0 0 -1 B B/C X | |||
1 0 0 0 C C | |||
0 -1 0 0 C | |||
-1 -1 0 0 C/S | |||
</pre> | |||
?? | |||
<br>b) | |||
==Ejercicio 07[*]:== | |||
Al ejecutarse V(T) se produce un signal de T, entonces el PT selecciona un proceso que requiere T que se encuentra en la cola de bloqueados y lo coloca en la de listos. Luego se ejecuta V(S) y sucede lo mismo y luego V(R). En la ejecucion de V(R) no se produce ningun signal | |||
Ejercicio | ==Ejercicio 08:== | ||
Existe un caso en el cual tiene bastante sentido que el procesador se quede ciclando sobre un semáforo, y no que se produzca un Wait. Este es el caso en el cual se tiene, por ejemplo, dos procesadores que quieren acceder a la cola de listos para seleccionar el próximo proceso a ejecutar. En un momento dado está uno de ellos seleccionando por tanto se está ejecutando el planificador de procesos, y en ese mismo instante, también en el otro procesador se quiere ejecutar el planificador de procesos. Uno de los procesadores justamente tiene que ir a la cola de listos para seleccionar el proceso que tiene que ejecutar. Pero el otro está haciendo la selección y tiene el recurso (cola de listos) tomado. Si no puede elegir, no tiene sentido que se espere nada, porque lo que quiere hacer es justamente tomar un proceso para continuar la ejecución. Este sería un caso en el cual uno de los procesadores se quedará loopeando en la pregunta esta de ver cuándo cambia el valor del semáforo. Esos semáforos reciben el nombre de SPIN. | |||
==Ejercicio 09:== | |||
Ejercicio 09: | YXZQYXZQ... | ||
A | ==Ejercicio 10:== | ||
P( A ) | ==Ejercicio 11[*]:== | ||
P( A ) | La secuencia equivale a A(BoC)(BoC)A(BoC)(BoC).. | ||
... | <pre> | ||
V( msg ) V( A ) | A B C | ||
P( A ) P( msg ) P( msg ) | |||
P( A ) | |||
... ... ... | |||
V( msg ) V( A ) V( A ) | |||
V( msg ) | V( msg ) | ||
Inicio | Inicio | ||
A=2 | A=2 | ||
msg=0 | msg=0 | ||
</pre> | |||
==Ejercicio 12[*]:== | |||
ABB AC ABB AC.. | |||
<pre> | |||
A B C | |||
P(X) P(Y) P(Z) | |||
P(X) P(S) P(Z) | |||
... ... ... | |||
V(Y) V(X) P(Y) | |||
V(Y) P(Y) | |||
V(Z) V(X) | |||
V(X) | |||
V(S) | |||
V(S) | |||
Inicio | |||
X=2 | |||
Y=0 | |||
Z=0 | |||
S=2 | |||
</pre> | |||
Ejercicio | ==Ejercicio 13[*]:== | ||
A | ABBCBBABBCBB.. | ||
P( | <pre> | ||
P( | A B C | ||
P(X) P(b) P(Y) | |||
P(s) P(s) | |||
... | P(s) P(s) | ||
V( | ... ... ... | ||
V( | V(Y) V(s) V(X) | ||
V(b) V(b) | |||
V(b) V(b) | |||
Inicio | Inicio | ||
X=1 | |||
Y=0 | |||
s=2 | |||
b=0 | |||
</pre> | |||
[[Category:Prácticas]] |
Revisión actual - 20:22 17 jul 2016
Ejercicio 01[*]:
a)ABCABC..
A B C P( A ) P( B ) P( C ) ... ... ... V( B ) V( C ) V( A ) Inicio A = n > 0 B = 0 C = 0
b)ABACABAC..
A B C P( A ) P( B ) P( C ) P( msg ) P( msg ) ... ... ... V( A ) V( A ) V( msg ) V( C ) V( B ) Inicio A = n > 0 B = 1 C = 0 msg = 0
c)(AoB)C(AoB)C..
A B C P( A ) P( A ) P( C ) ... ... ... V( C ) V( C ) V( A ) Inicio A = n > 0 C = 0
Ejercicio 02:
A(BoC)A(BoC)..
A B C P( X ) P( Y ) P( Y ) ... ... ... V( Y ) V( X ) V( X ) Inicio X = 1 Y = 0
Ejercicio 03:
a)
b)
Ejercicio 04:
Ejercicio 05[*]:
a) Hay un deadlock, porque Z espera que se incremente B, y B nunca se va a incrementar, porque eso lo hace Y (que no se va a ejecutar)
b) Se podrian invertir los primeros dos P's, tanto en Y como en Z
c) Me parece que anda bien (por algo lo di como solucion del b :P)
d)
Ejercicio 06[*]:
a)
S R B C Signal Wait 1 0 0 1 0 1 0 1 R X 0 1 -1 1 B Z 1 0 0 0 B B Y 1 -1 0 0 B Y 1 -1 0 -1 B/C X 0 0 0 -1 B B/C X 1 0 0 0 C C 0 -1 0 0 C -1 -1 0 0 C/S
??
b)
Ejercicio 07[*]:
Al ejecutarse V(T) se produce un signal de T, entonces el PT selecciona un proceso que requiere T que se encuentra en la cola de bloqueados y lo coloca en la de listos. Luego se ejecuta V(S) y sucede lo mismo y luego V(R). En la ejecucion de V(R) no se produce ningun signal
Ejercicio 08:
Existe un caso en el cual tiene bastante sentido que el procesador se quede ciclando sobre un semáforo, y no que se produzca un Wait. Este es el caso en el cual se tiene, por ejemplo, dos procesadores que quieren acceder a la cola de listos para seleccionar el próximo proceso a ejecutar. En un momento dado está uno de ellos seleccionando por tanto se está ejecutando el planificador de procesos, y en ese mismo instante, también en el otro procesador se quiere ejecutar el planificador de procesos. Uno de los procesadores justamente tiene que ir a la cola de listos para seleccionar el proceso que tiene que ejecutar. Pero el otro está haciendo la selección y tiene el recurso (cola de listos) tomado. Si no puede elegir, no tiene sentido que se espere nada, porque lo que quiere hacer es justamente tomar un proceso para continuar la ejecución. Este sería un caso en el cual uno de los procesadores se quedará loopeando en la pregunta esta de ver cuándo cambia el valor del semáforo. Esos semáforos reciben el nombre de SPIN.
Ejercicio 09:
YXZQYXZQ...
Ejercicio 10:
Ejercicio 11[*]:
La secuencia equivale a A(BoC)(BoC)A(BoC)(BoC)..
A B C P( A ) P( msg ) P( msg ) P( A ) ... ... ... V( msg ) V( A ) V( A ) V( msg ) Inicio A=2 msg=0
Ejercicio 12[*]:
ABB AC ABB AC..
A B C P(X) P(Y) P(Z) P(X) P(S) P(Z) ... ... ... V(Y) V(X) P(Y) V(Y) P(Y) V(Z) V(X) V(X) V(S) V(S) Inicio X=2 Y=0 Z=0 S=2
Ejercicio 13[*]:
ABBCBBABBCBB..
A B C P(X) P(b) P(Y) P(s) P(s) P(s) P(s) ... ... ... V(Y) V(s) V(X) V(b) V(b) V(b) V(b) Inicio X=1 Y=0 s=2 b=0