Diferencia entre revisiones de «Solución ejercicio 2»

De Wiki de Sistemas Operativos
Saltar a: navegación, buscar
(revisión del profesor)
Línea 2: Línea 2:
 
       / = El proceso pasa a estado preparado.
 
       / = El proceso pasa a estado preparado.
 
       > = Fin de su ejecucion
 
       > = Fin de su ejecucion
 
+
 
+
       | #1| #2| #3|  |  | #4| #1| #2|  |  |  | #3| #4|   |  |  |  |  |  |  |
+
       | #1| #2| #3|  |  | #4| #1| #2|  |  |  | #3| #4| #1|  |  |  |  |  |  |
     p1|---|---|---|  |  |---|---|---X  |  /  |---|--->   |   |  |  |  |  |  |
+
     P1|---|---|---|  |  |---|---|---X  |  /  |---|---|--->  |  |  |  |  |  |
 
       |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
 
       |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |  |
       |  |  |  | #1| #2|  |  |  | #3| #4| #1|  |  | #2| #3| #4|   |  |  |  |
+
       |  |  |  | #1| #2|  |  |  | #3| #4| #1|  |  | #2| #3| #4| #1|  |  |
     p2|  |  |  |---|---X  /  |  |---|---|---|  |  |---|---|--->   |  |   |  |
+
     P2|  |  |  |---|---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 P1 comienza su ejecucion hasta agotar su ventana de tiempo , luego el proceso P2 bloquea al hacer el down(s2) ya que el semaforo s2 tiene el valor 0 , y como sabemos de los semaforos el proceso se bloquea hasta que no se vuelva a hacer un up(s2). P1 comienza y al hacer un up(s2) pasa p2 a estado preparado , luego al final de la ventana bloquea al hacer down(s1) ya que el contador en ese momento vale 0. Comienza la ejecucion p2 que estaba en estado preparado en el instante T = 10 hace un up(s1) por lo tanto p1 pasa a esta preparado. P1 se ejecuta y finaliza su ejecucion , y luego P2 se ejecuta y finaliza su ejecucion.
+
Observaciones:
 
+
* El proceso P1 comienza su ejecucion hasta agotar su ventana de tiempo. Tras esto, el proceso P2 tiene su oportunidad de ejecución pero bloquea al hacer el down del semáforo s2 cuyo contador vale 0 (instante de tiempo 5). El proceso P2 volverá a pasar a estado preparado en cuanto el proceso P1 realice up sobre el semáforo s2.
--[[Usuario:DvS 013|DvS 013]] 15:30 9 may 2011 (UTC) : las ultimas instrucciones #1 de ambos programas deben ejecutarse para poder ver que i==2 y finalizar el bucle for, no?¿
+
* Es correcto, la instrucción #1 se tiene que ejecutar en el intento de tercera iteración para comprobar la condición de fin del bucle.
 
 
      / : bloqueado,  @: preparado, >: fin del programa, X : se ejecuta el planificador
 
 
        |i1=0      |i2=0  |    i1=1  |      i2=1|      i1=2|          i2=2|
 
        | #1| #2| #3|  |  | #4| #1| #2|  |  |  | #3| #4| #1|  |  |  |  |
 
P1    |---|---|---|  |  |---|---|---/  |  @  |---|---|--->  |  |  |  |
 
s1    | 1 | 0                            | 0                        | 1    |
 
        |  |  |  | #1| #2|  |  |  | #3| #4| #1|  |  |  | #2| #3| #4| #1|
 
P2    |  |  |  |---|---/  @  |  |---|---|---|  |  |  |---|---|---|--->
 
s2     | 0                | 0                        | 1    | 0            |
 
planif 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
 
 
 
 
 
--[[Usuario:Josmorgav1|Josmorgav1]] 15:38 9 may 2011 (UTC)
 
Es correcto, la instrucción #1 si no la ejecuta, no hace la comprobación para continuar o salir del bucle, yo también he hecho el ejercicio en papel, y me da la misma solución que a David Martin.
 
 
 
 
 
  
--[[Usuario:Jorcalmar|Jorcalmar]] 16:33 9 may 2011 (UTC)
+
Comentarios de estudiantes:
  
Duda acerca de semáforos:
+
= Duda acerca de semáforos =
  
 
La operación down(s) verifica si el  valor del semáforo es 0, si es así, añade el proceso a la lista de procesos bloqueados que tiene el semáforo y si no, contador--. Ahora bien:
 
La operación down(s) verifica si el  valor del semáforo es 0, si es así, añade el proceso a la lista de procesos bloqueados que tiene el semáforo y si no, contador--. Ahora bien:

Revisión del 10:23 10 may 2011

     X = El proceso pasa a estado bloqueado.
     / = El proceso pasa a estado preparado.
     > = Fin de su ejecucion


     | #1| #2| #3|   |   | #4| #1| #2|   |   |   | #3| #4| #1|   |   |   |   |   |   |
   P1|---|---|---|   |   |---|---|---X   |   /   |---|---|--->   |   |   |   |   |   |
     |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |   |
     |   |   |   | #1| #2|   |   |   | #3| #4| #1|   |   |   | #2| #3| #4| #1|   |   |
   P2|   |   |   |---|---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 P1 comienza su ejecucion hasta agotar su ventana de tiempo. Tras esto, el proceso P2 tiene su oportunidad de ejecución pero bloquea al hacer el down del semáforo s2 cuyo contador vale 0 (instante de tiempo 5). El proceso P2 volverá a pasar a estado preparado en cuanto el proceso P1 realice up sobre el semáforo s2.
  • Es correcto, la instrucción #1 se tiene que ejecutar en el intento de tercera iteración para comprobar la condición de fin del bucle.

Comentarios de estudiantes:

Duda acerca de semáforos

La operación down(s) verifica si el valor del semáforo es 0, si es así, añade el proceso a la lista de procesos bloqueados que tiene el semáforo y si no, contador--. Ahora bien:

¿No sería necesario verificar esta condición por ejemplo en el instante 8? Para verificar si hemos hecho un up que nos permita volver a poner el proceso en preparado. Con verificar me refiero volver a realizar la llamada.


--Josmorgav1 16:57 9 may 2011 (UTC) No entiendo bien tu pregunta, pero como aclaración te digo, que respecto al down(s) es correcta la definición que has dado. Para el caso del instante 8, realizas un up(s) que por definición, si no tiene procesos en la lista de semáforo, incrementa la variable (s++), en caso de tener algún proceso en esa lista, implica que estaría bloqueado, por lo cual, al hacer el up(s), se pone el proceso en modo preparado, y no se incrementa el contador, ya que al hacer up(s) permitimos que entre otro proceso en la sección crítica, pero a la vez, si está en la lista de semáforo, ya estamos "preparando" el proceso que entrará en la sección crítica, por eso se mantiene el semáforo con el valor que tenía antes del up(s). Espero que haya servido de aclaración, aunque el up(s) es un poco enredoso.


Ok gracias, me has respondido a la duda, el hecho de poner el estado en proceso preparado viene implicitamente dentro de la operacion UP. Muchas gracias.--Jorcalmar 17:11 9 may 2011 (UTC)