Diferencia entre revisiones de «Solución ejercicio 1»

De Wiki de Sistemas Operativos
Saltar a: navegación, buscar
m
 
(No se muestran 11 ediciones intermedias de 7 usuarios)
Línea 2: Línea 2:
 
       X = El proceso pasa a estado bloqueado.
 
       X = El proceso pasa a estado bloqueado.
 
       / = El proceso pasa a estado preparado.
 
       / = El proceso pasa a estado preparado.
 +
      > = Fin de su ejecución.
  
  
 
+
       |  |  | #1| #2| #3| #4| #5| #1|  |  |  | #2| #3| #4|  | #5| #1|  |  |   |
       |  |  | #1| #2| #3| #4| #5| #1|  |  |  | #2| #3| #4|  |  |  | #5| fin de ejecucion
+
     p1|  |  |---|---|---|---|---|---|  |  |  |---|---|---|  |---|---|  |  |
     p1|  |  |---|---|---|---|---|---|  |  |  |---|---|---|  |   |  |---|  |  |
 
 
       |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
 
       |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
       | #1| #2|  |  |  |  |  |  | #3| #4| #1|  |  |  | #2| #3| #4| fin de ejecucion
+
       | #1| #2|  |  |  |  |  |  | #3| #4| #1|  |  |  | #2|  |  | #3| #4| #1|
     p2|---|---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
  
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
+
Observaciones:
p1: <source lang="c">
+
* El proceso P2 bloquea al hacer down sobre el semáforo s2 cuyo contador vale 0.
for (int i=0; i<2; i++) {  #1
+
* En el instante 15, el proceso P2 bloquea de nuevo pues hace down sobre el semáforo s2 cuyo contador vale 0.
    down(s1);              #2
+
* En los semáforos no se vuelve a comprobar la condición que hizo que el proceso bloqueara, a diferencia de los cerrojos.
    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
 
  
 +
--[[Usuario:Pneira|Pneira]] 08:59 10 may 2011 (UTC)
  
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|
 
    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.
+
'''Duda sobre el ejercicio:'''
  
--[[Usuario:Josmorgav1|Josmorgav1]] 15:32 9 may 2011 (UTC)
+
He realizado varias veces la traza de los procesos y en el instante 15 el semáforo de s2 me sale 1,no sé si me estaré pasando algún detalle por alto.S2 empieza en 0,en el instante 7 P1 realiza un up en s2 (valor s2=1), y se realiza un down en el instante 15 por lo que volvería a valer 0, ¿qué estoy pasando por alto? :S --[[Usuario:Josedelfer|Josedelfer]] 11:00 13 dic 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]]  
+
--[[Usuario:Albsolnog|Albsolnog]] 11:36 13 dic 2011 (UTC) Fijate que para t=6 p2 estaba bloqueado y por tanto almacenado en la lista, justo aqui p1 realiza un up(S2) '''en el instante 6 no en el 7''' lo que implica que p2 pasa a estado preparado pero su contador no se toca (mira el codigo de up())
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)
+
--[[Usuario:Josedelfer|Josedelfer]] 13:24 13 dic 2011 (UTC) Es cierto,cuando esta bloqueado al hacer el up no aumenta el contador,era el detalle que estaba pasando por alto. Gracias
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. y contestando a [[Usuario:Jmf bsk|Jmf bsk]], no habria que ejecutarlo de nuevo puesto que bloqueo despues de realizar el down y el up de p1 ya lo que hace es ponerlo en estado activo no ponerle el contador a 1 (sigue siendo 0 durante toda la ejecución).
+
--[[Usuario:Josleamat|Josleamat]] 12:28 6 dic 2017 (UTC) Hola, en el instante 17, el proceso p1, debería de continuar con su quantum hasta agotarlo, donde se debe de bloquear en la linea de codigo 2, donde hace un down y pasa ha estado bloqueado.

Revisión actual del 12:50 7 dic 2017

     X = El proceso pasa a estado bloqueado.
     / = El proceso pasa a estado preparado.
     > = Fin de su ejecución.


     |   |   | #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 diferencia de los cerrojos.

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


Duda sobre el ejercicio:

He realizado varias veces la traza de los procesos y en el instante 15 el semáforo de s2 me sale 1,no sé si me estaré pasando algún detalle por alto.S2 empieza en 0,en el instante 7 P1 realiza un up en s2 (valor s2=1), y se realiza un down en el instante 15 por lo que volvería a valer 0, ¿qué estoy pasando por alto? :S --Josedelfer 11:00 13 dic 2011 (UTC)

--Albsolnog 11:36 13 dic 2011 (UTC) Fijate que para t=6 p2 estaba bloqueado y por tanto almacenado en la lista, justo aqui p1 realiza un up(S2) en el instante 6 no en el 7 lo que implica que p2 pasa a estado preparado pero su contador no se toca (mira el codigo de up())


--Josedelfer 13:24 13 dic 2011 (UTC) Es cierto,cuando esta bloqueado al hacer el up no aumenta el contador,era el detalle que estaba pasando por alto. Gracias

--Josleamat 12:28 6 dic 2017 (UTC) Hola, en el instante 17, el proceso p1, debería de continuar con su quantum hasta agotarlo, donde se debe de bloquear en la linea de codigo 2, donde hace un down y pasa ha estado bloqueado.