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 01:== | |||
{| class="wikitable" style="text-align:center" | {| class="wikitable" style="text-align:center" | ||
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 02:[*]== | |||
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 | |||
</pre> | </pre> | ||
b) | b) | ||
Línea 69: | Línea 71: | ||
</pre> | </pre> | ||
==Ejercicio 03:[*]== | |||
<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> | ||
==Ejercicio 04:[*]== | |||
<br>a) Es el tipo de grafos que no pueden ser representados con parbegin/parend, ya que no se puede dividirlo en subgrafos disjuntos concurrentes. | <br>a) Es el tipo de grafos que no pueden ser representados con parbegin/parend, ya que no se puede dividirlo en subgrafos disjuntos concurrentes. | ||
<br>b) | <br>b) | ||
< | <br> | ||
==Ejercicio 05:== | |||
<br>a) Aca lo tienen: | <br>a) Aca lo tienen: | ||
<pre> | <pre> | ||
Línea 115: | Línea 94: | ||
</pre> | </pre> | ||
<br>b) Se puede construir el grafo de manera "secuencial", es decir, S1-S2-S3-S5-S4-S6-S7 (Claramente no tiene el mayor grado de concurrencia posible). | <br>b) Se puede construir el grafo de manera "secuencial", es decir, S1-S2-S3-S5-S4-S6-S7 (Claramente no tiene el mayor grado de concurrencia posible). | ||
<br>c) | <br>c) | ||
<pre> | <pre> | ||
Count5 = Count7 = 2 | Count5 = Count7 = 2 | ||
s1 | |||
fork L3 | fork L3 | ||
fork L4 | fork L4 | ||
s2 | |||
jump Join5 | jump Join5 | ||
L3: | L3: | ||
s3 | |||
jump Join5 | jump Join5 | ||
L4: | L4: | ||
s4 | |||
s6 | |||
jump Join7 | jump Join7 | ||
Join5: | Join5: | ||
join Count5 | join Count5 | ||
jump Join7 | |||
Join7: | Join7: | ||
join Count7 | join Count7 | ||
</pre> | </pre> | ||
==Ejercicio 06:== | |||
a) Si no lo hice mal, es una cosa mas o menos asi: | a) Si no lo hice mal, es una cosa mas o menos asi: | ||
<pre> | <pre> | ||
Línea 192: | Línea 168: | ||
s11 | s11 | ||
</pre> | </pre> | ||
c) | c) | ||
==Ejercicio 07:== | |||
'''NOTA 1: Preguntar ejercicios del 7 al 10... Tienen pinta de entrar seguro :) ''' | |||
'''NOTA 2: PREMISAS DE DIJKSTRA:''' | |||
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. | |||
1) No deben hacerse suposiciones sobre las instrucciones de máquina ni la cantidad de | |||
2) No deben hacerse suposiciones sobre la velocidad de los procesos. | 2) No deben hacerse suposiciones sobre la velocidad de los procesos. | ||
Línea 208: | Línea 184: | ||
4) La decisión de qué procesos entran a una parte crítica no puede ser pospuesta indefinidamente. | 4) La decisión de qué procesos entran a una parte crítica no puede ser pospuesta indefinidamente. | ||
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 después que un proceso haya hecho su pedido. | |||
==Ejercicio 08:== | |||
<br> | |||
==Ejercicio 09:== | |||
<br> | |||
==Ejercicio 10:== | |||
<br> | |||
==Ejercicio 11:== | |||
<br> | |||
<br>a) | <br>a) | ||
< | <br>b) | ||
<br> | <br> | ||
==Ejercicio 12:[*]== | |||
<br>Porque como cambian el valor del semaforo y despues lo evalua, al haber concurrencia se pueden quedar en WAIT dos ejecuciones de P. Ver Test-And-Set | <br>Porque como cambian el valor del semaforo y despues lo evalua, al haber concurrencia se pueden quedar en WAIT dos ejecuciones de P. Ver Test-And-Set | ||
<br> | <br> | ||
==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:[*]== | |||
<pre> | <pre> | ||
Monitor ej14 | Monitor ej14 | ||
Línea 327: | Línea 225: | ||
</pre> | </pre> | ||
ver pag 19 al final | |||
==Ejercicio 15:[*]== | |||
a) | a) | ||
<pre> | <pre> | ||
Línea 353: | Línea 251: | ||
programa Productor_Consumidor; | programa Productor_Consumidor; | ||
MAX = ......; | MAX = ......; | ||
monitor M; | |||
buffer : Array (0..MAX-1); | |||
in, out, n; enteros; | in, out, n; enteros; | ||
buff_lleno, buff_vacío: condición; | buff_lleno, buff_vacío: condición; | ||
Línea 402: | Línea 299: | ||
</pre> | </pre> | ||
==Ejercicio 16:[*]== | |||
La idea es que cuando hay alguien escribiendo no puede haber nadie leyendo. (Multiples Lectores, un solo escritor) | La idea es que cuando hay alguien escribiendo no puede haber nadie leyendo. (Multiples Lectores, un solo escritor) | ||
<pre> | <pre> | ||
Línea 415: | Línea 312: | ||
//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 437: | Línea 333: | ||
</pre> | </pre> | ||
==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:== | |||
a) | a) | ||
<pre> | <pre> | ||
Línea 501: | Línea 366: | ||
Procedure Romanos | Procedure Romanos | ||
Begin | Begin | ||
P(excl)//este semaforo no se si hace falta | P(excl)//este semaforo no se si hace falta ay que analizarlo | ||
P(w) | P(w) | ||
P(x) | P(x) | ||
Línea 554: | Línea 419: | ||
c) | c) | ||
==Ejercicio 19:[*]== | |||
<pre> | <pre> | ||
Monitor PeruanosLocos | Monitor PeruanosLocos | ||
Línea 601: | Línea 466: | ||
</pre> | </pre> | ||
==Ejercicio 20:== | |||
<br>La b) ya que siempre uno llega primero y "espera" y el otro sigue de largo. | <br>La b) ya que siempre uno llega primero y "espera" y el otro sigue de largo. | ||
<br>La c) tambien, por la misma razon. | <br>La c) tambien, por la misma razon. | ||
==Ejercicio 21:[*]== | |||
<pre> | <pre> | ||
Monitor Lectores-Escritores | Monitor Lectores-Escritores | ||
Línea 656: | Línea 521: | ||
</pre> | </pre> | ||
==Ejercicio 22:[*]== | |||
< | <br>(Tendria que salir con Lectores-Escritores) | ||
<br> | |||
==Ejercicio 23:[*]== | |||
<br>Porque estamos diciendo que se puede ejecutar en paralelo: | <br>Porque estamos diciendo que se puede ejecutar en paralelo: | ||
<br>a = b + c y | <br>a = b + c y | ||
Línea 687: | Línea 531: | ||
<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> | ||