Diferencia entre revisiones de «Solución ejercicio 1»

De Wiki de Sistemas Operativos
Saltar a: navegación, buscar
(revisión del profesor)
Línea 3: Línea 3:
 
       / = El proceso pasa a estado preparado.
 
       / = El proceso pasa a estado preparado.
  
 
+
       |  |  | #1| #2| #3| #4| #5| #1|  |  |  | #2| #3| #4|  | #5| #1|  |  |  |
 
+
     p1|  |  |---|---|---|---|---|---|  |  |  |---|---|---|  |---|--->  |  |  |
       |  |  | #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.
 
 
 
--[[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,  /: 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 --[[Usuario:David|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|
 
       | #1| #2|  |  |  |  |  |  | #3| #4| #1|  |  |  | #2|  |  | #3| #4| #1|
     p2|---|---X  |  |  |  |  /  |---|---|---|  |  |  |---X  /  |---|---|---|
+
     p2|---|---X  |  |  |  |  /  |---|---|---|  |  |  |---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
 
 
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.
 
 
 
--[[Usuario:Josmorgav1|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
 
 
 
--[[Usuario:Jherrera|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.
 
  
--[[Usuario:Jorcalmar|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.
 
  
--[[Usuario:Jmf bsk|Jmf bsk]] 18:13 9 may 2011 (UTC)
+
Observaciones:
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.
+
* El proceso P2 bloquea al hacer down sobre el semáforo s2 cuyo contador vale 0.
 +
* En el instante 15, el proceso P2 bloquea de nuevo pues hace down sobre el semáforo s2 cuyo contador vale 0.
 +
* En los semáforos no se vuelve a comprobar la condición que hizo que el proceso bloqueara, a difencia de los cerrojos.
  
--[[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. y contestando a [[Usuario:Jmf bsk|Jmf bsk]], no habria que ejecutarlo de nuevo puesto que bloquea despues de realizar el down y el up de p1 lo que hace es ponerlo en estado preparado no ponerle el contador a 1 (sigue siendo 0 durante toda la ejecución).
+
--[[Usuario:Pneira|Pneira]] 08:59 10 may 2011 (UTC)

Revisión del 09:59 10 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| #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


Observaciones:

  • El proceso P2 bloquea al hacer down sobre el semáforo s2 cuyo contador vale 0.
  • En el instante 15, el proceso P2 bloquea de nuevo pues hace down sobre el semáforo s2 cuyo contador vale 0.
  • En los semáforos no se vuelve a comprobar la condición que hizo que el proceso bloqueara, a difencia de los cerrojos.

--Pneira 08:59 10 may 2011 (UTC)