Diferencia entre revisiones de «Solución ejercicio 1»
De Wiki de Sistemas Operativos
Línea 15: | Línea 15: | ||
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. | 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. | ||
+ | |||
+ | --[[Usuario:DvS 013|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: <source lang="c"> | ||
+ | for (int i=0; i<2; i++) { #1 | ||
+ | down(s1); #2 | ||
+ | f1(); #3 | ||
+ | if (get(s1) == 0) #4 | ||
+ | up(s2); #5 | ||
+ | } </source> | ||
+ | P2: <source lang="c"> | ||
+ | for (int i=0; i<2; i++) { #1 | ||
+ | down(s2); #2 | ||
+ | f2(); #3 | ||
+ | up(s1); #4 | ||
+ | } </source> | ||
+ | |||
+ | X : se ejecuta el planificador | ||
+ | > : fin del proceso | ||
+ | #nº : número de insturcción | ||
+ | |||
+ | |i2=0 |i1=0 | i2=1 | i1=1 | | i2=2|i1=2 | | ||
+ | | | | | #1| #2| #3| | | | #4| #1| #2| #3| #4| #5| | | | #1| | | ||
+ | P1 | | | |---|---|---| | | |---|---|---|---|---|---| | | |---> | | ||
+ | s1 | 1 | 0 | 1 | 0 | 1 | | | ||
+ | | #1| #2| #3| | | | #4| #1| #2| | | | | | | #3| #4| #1| | | | ||
+ | P2 |---|---|---| | | |---|---|---| | | | | | |---|---|---> | | | ||
+ | s2 | 1 | 0 | 0 | | | | | | | ||
+ | planif 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 |
Revisión del 16:09 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 > : fin del proceso #nº : número de insturcción |i2=0 |i1=0 | i2=1 | i1=1 | | i2=2|i1=2 | | | | | #1| #2| #3| | | | #4| #1| #2| #3| #4| #5| | | | #1| | P1 | | | |---|---|---| | | |---|---|---|---|---|---| | | |---> | s1 | 1 | 0 | 1 | 0 | 1 | | | #1| #2| #3| | | | #4| #1| #2| | | | | | | #3| #4| #1| | | P2 |---|---|---| | | |---|---|---| | | | | | |---|---|---> | | s2 | 1 | 0 | 0 | | | | | | planif 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