Edición de «Práctica Programación Concurrente (Sistemas Operativos)»
De Cuba-Wiki
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: | ||
===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 S5 | ||
===Ejercicio 2*=== | ===Ejercicio 2*=== | ||
a) | a) | ||
<pre> | <pre> | ||
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 | |||
Join6: | |||
join Count6 | |||
S6 | |||
</pre> | </pre> | ||
b) | b) | ||
Línea 70: | Línea 73: | ||
===Ejercicio 3*=== | ===Ejercicio 3*=== | ||
<br>La | <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> | <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 | 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 | 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> 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: | ||
T0 Tarea1 encuentra C1 = 0, T1 Tarea2 encuentra C2 = 0 | |||
===Ejercicio 9=== | ===Ejercicio 9=== | ||
Línea 231: | Línea 224: | ||
Procedure Pi | Procedure Pi | ||
Do | Do | ||
while(TestAndSet(lock)); | |||
while( | |||
seccion critica | seccion critica | ||
lock = F; | lock = F; | ||
Línea 246: | Línea 237: | ||
End | End | ||
</pre> | </pre> | ||
<br>b) | <br>b) | ||
<pre> | <pre> | ||
Procedure Pi | Procedure Pi | ||
Do | Do | ||
while( | key = T; | ||
while(key) | |||
Swap(lock, key); | |||
seccion critica | seccion critica | ||
lock = F; | lock = F; | ||
Línea 264: | Línea 256: | ||
End | End | ||
</pre> | </pre> | ||
<br> | |||
===Ejercicio 12*=== | ===Ejercicio 12*=== | ||
Línea 270: | Línea 263: | ||
===Ejercicio 13=== | ===Ejercicio 13=== | ||
<br>Si alguien llega al puente, y no hay nadie esperando de ninguno de los dos lados, se lo pone a cruzar. Si hay alguien cruzando o esperando, y alguien llega, esa persona espera. Cuando una persona termina de cruzar el puente, si hay alguien esperando del lado que llego, le dice che, ahora cruza vos. Y si no, mira para atras, y si del otro lado hay alguien esperando para cruzar le grita cheeeeeeeeeee cruza vooooooooosss. | <br>Si alguien llega al puente, y no hay nadie esperando de ninguno de los dos lados, se lo pone a cruzar. Si hay alguien cruzando o esperando, y alguien llega, esa persona espera. Cuando una persona termina de cruzar el puente, si hay alguien esperando del lado que llego, le dice che, ahora cruza vos. Y si no, mira para atras, y si del otro lado hay alguien esperando para cruzar le grita cheeeeeeeeeee cruza vooooooooosss. | ||
<br> | <br> | ||
===Ejercicio 14*=== | ===Ejercicio 14*=== | ||
<pre> | <pre> | ||
Línea 415: | Línea 374: | ||
//leo el archivo | //leo el archivo | ||
P(X) | P(X) | ||
if (CantLectores == 0) then V(Escr) | if (CantLectores == 0) then V(Escr) | ||
V(X) | V(X) | ||
Línea 439: | Línea 397: | ||
===Ejercicio 17=== | ===Ejercicio 17=== | ||
<br> (Hay que darle prioridad a un solo lado del puente) | <br> (Hay que darle prioridad a un solo lado del puente) | ||
===Ejercicio 18=== | ===Ejercicio 18=== | ||
Línea 657: | Línea 584: | ||
===Ejercicio 22*=== | ===Ejercicio 22*=== | ||
< | <br>(Tendria que salir con Lectores-Escritores) | ||
<br> | |||
< | |||
===Ejercicio 23*=== | ===Ejercicio 23*=== | ||
Línea 687: | Línea 593: | ||
<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> | ||