Diferencia entre revisiones de «Solución ejercicio 1»
Línea 30: | Línea 30: | ||
up(s1); #4 | up(s1); #4 | ||
} </source> | } </source> | ||
+ | |||
+ | X : se ejecuta el planificador, /: El proceso pasa a estado bloqueado. | ||
+ | > : fin del proceso, #nº : número de instrucción, @: El proceso pasa a estado preparado. | ||
− | + | |i2=0 |i1=0 | i1=1| i2=1| | i2=2| i1=2| | |
− | + | | | | #1| #2| #3| #4| #5| #1| | | | #2| #3| #4| | #5| #1| | | | | |
− | + | P1 | | |---|---|---|---|---|---| | | |---|---|---| |---|---> | | | | |
− | + | s1 | 1 | 0 | 1 | 0 | 1 | | |
− | |i2=0 | + | | #1| #2| | | | | | | #3| #4| #1| | | | #2| | | #3| #4| #1| |
− | + | P2 |---|---/ | | | | @ |---|---|---| | | |---/ @ |---|---|---> | |
− | P1 | | | | + | s2 | 0 0 0 0 0 | | | | | |
− | s1 | 1 | + | planif X | X | | X | | X | | X | | X X | X | | X |
− | | #1| #2| | ||
− | P2 |---|---| | ||
− | s2 | | ||
− | planif X | ||
|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___| | |___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___| | ||
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | ||
Línea 77: | Línea 76: | ||
--[[Usuario:Jmf bsk|Jmf bsk]] 18:13 9 may 2011 (UTC) | --[[Usuario:Jmf bsk|Jmf bsk]] 18:13 9 may 2011 (UTC) | ||
No habria que ejecutar otra vez la instruccion down, cuando ésta ha bloqueado anteriormente, por ejemplo en el tiempo 8-9 habria que volver a comprobar si el semaforo esta a 1 ¿no? y si es asi ponerlo a 0. | No habria que ejecutar otra vez la instruccion down, cuando ésta ha bloqueado anteriormente, por ejemplo en el tiempo 8-9 habria que volver a comprobar si el semaforo esta a 1 ¿no? y si es asi ponerlo a 0. | ||
+ | |||
+ | --[[Usuario:DvS 013|DvS 013]] 18:33 9 may 2011 (UTC) : Vale había leído mal lo del contador =P, creo que lo he corregido y me sale la misma solución |
Revisión del 19:33 9 may 2011
X = El proceso pasa a estado bloqueado. / = El proceso pasa a estado preparado.
| | | #1| #2| #3| #4| #5| #1| | | | #2| #3| #4| | | | #5| fin de ejecucion p1| | |---|---|---|---|---|---| | | |---|---|---| | | |---| | | | | | | | | | | | | | | | | | | | | | | | | #1| #2| | | | | | | #3| #4| #1| | | | #2| #3| #4| fin de ejecucion p2|---|---X | | | | / |---|---|---| | | |---|---|---| | | | | | | | | | | | | | | | | | | | | | | | | |___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___| 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
El proceso P2 comienza su ejecucion y al hacer el down al semaforo s2 que vale 0 bloquea , ya que los semaforo es un sincronizacion bloqueante, p1 comienza su ejecucion hasta que se hace up(s2) y agota su ventana de tiempo y p2 puede comenzar su ejecucion.
--DvS 013 15:09 9 may 2011 (UTC) : había conflicto cuando le he dado a subir así que pongo debajo lo que yo estaba editando antes de que se subiera nada
p1: for (int i=0; i<2; i++) { #1
down(s1); #2
f1(); #3
if (get(s1) == 0) #4
up(s2); #5
}
for (int i=0; i<2; i++) { #1
down(s2); #2
f2(); #3
up(s1); #4
}
X : se ejecuta el planificador, /: El proceso pasa a estado bloqueado. > : fin del proceso, #nº : número de instrucción, @: El proceso pasa a estado preparado. |i2=0 |i1=0 | i1=1| i2=1| | i2=2| i1=2| | | | #1| #2| #3| #4| #5| #1| | | | #2| #3| #4| | #5| #1| | | | P1 | | |---|---|---|---|---|---| | | |---|---|---| |---|---> | | | s1 | 1 | 0 | 1 | 0 | 1 | | #1| #2| | | | | | | #3| #4| #1| | | | #2| | | #3| #4| #1| P2 |---|---/ | | | | @ |---|---|---| | | |---/ @ |---|---|---> s2 | 0 0 0 0 0 | | | | | planif X | X | | X | | X | | X | | X X | X | | X |___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___| 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Nueva solución:
Con respecto a la primera, una simple aclaración --David 15:26 9 may 2011 (UTC)
X = El proceso pasa a estado bloqueado. / = El proceso pasa a estado preparado.
| | | #1| #2| #3| #4| #5| #1| | | | #2| #3| #4| | #5| #1| | p1| | |---|---|---|---|---|---| | | |---|---|---| |---|---| | | | | | | | | | | | | | | | | | | | | | | | | | #1| #2| | | | | | | #3| #4| #1| | | | #2| | | #3| #4| #1| p2|---|---X | | | | / |---|---|---| | | |---X / |---|---|---| | | | | | | | | | | | | | | | | | | | | | |___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___|___| 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
Como aclaración: cuando se realiza el up de un semáforo que vale 0, si hay procesos en su lista de semáforos, se coge el primero y se pasa a estado preparado, valiendo el contador del semáforo 0, por eso en el instante 15 al hacer el down de s2 vuelve a bloquear.
--Josmorgav1 15:32 9 may 2011 (UTC) Una aclaración al compañero David Martin, el contador de semáforo s2, en un principio vale 0, y como el primer proceso en ejecutar es P2, al hacer el down(s2); bloquea, creo que en tu solución consideras que s2 vale 1. Desde mi punto de vista, la solución por ahora más correcta, es la del compañero David Suárez
--Jherrera Con respecto a la solución de Dvs no es correcta a partir del instante 2, ya que interpreto que el proceso 2 ejecuta la instrucción nº3 en vez de pasar a bloqueado. He realizado el ejercicio al igual que David (última solución propuesta) y pienso que está totalmente correcto.
--Jorcalmar 16:55 9 may 2011 (UTC) La última solución propuesta coincide con la que me ha salido a mí, espero que esté bien.
--Jmf bsk 18:13 9 may 2011 (UTC) No habria que ejecutar otra vez la instruccion down, cuando ésta ha bloqueado anteriormente, por ejemplo en el tiempo 8-9 habria que volver a comprobar si el semaforo esta a 1 ¿no? y si es asi ponerlo a 0.
--DvS 013 18:33 9 may 2011 (UTC) : Vale había leído mal lo del contador =P, creo que lo he corregido y me sale la misma solución