Diferencia entre revisiones de «Solución ejercicio 1»

De Wiki de Sistemas Operativos
Saltar a: navegación, buscar
(Aclaración primera propuesta)
m
 
(No se muestran 19 ediciones intermedias de 11 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
 +
 
 +
 
 +
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.
  
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:Pneira|Pneira]] 08:59 10 may 2011 (UTC)
  
--[[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
 
  
 +
'''Duda sobre el ejercicio:'''
  
Nueva solución:
+
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)
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.
 
  
 +
--[[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())
  
  
      |  |  | #1| #2| #3| #4| #5| #1|  |  |  | #2| #3| #4|  | #5| #1|  |
+
--[[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
    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.
+
--[[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 11: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.