[Primer parcial 2016] Posibles errores en la solución (2c y 3.2)

[Primer parcial 2016] Posibles errores en la solución (2c y 3.2)

de Juan Ramirez -
Número de respuestas: 3

Buenas, me parece que hay algunos inconsistencias en la solución del 1er parcial de 2016.

En el ejercicio 2, parte c:


Se pide realizar un esquema en el tiempo que muestre los procesos asignados a cada CPU y la cola de procesos listos, tomando como estrategia de planificación un Round Robin con quantum = 20.

  1. A los 20ms se le quita el procesador al proceso P1, sin embargo, la solución refeleja que este proceso pase a la Ready Queue.
  2. A los 160ms todos los procesos pasan a la Ready Queue al mismo tiempo. Sin embargo, sin P1 y P3 los que ganan el recurso procesador mientras que P2 queda en la cola de espera. 
  • Se aceptan soluciones que contemplen asignar el CPU a P2 y que P3 quede en la cola de espera? 
  • Si se quiere hilar fino, se puede ver que, por un lado, P1 hace mucho que no utiliza el procesador, y que el siguiente CPU Burst de P3 es menor que el de P2. 
  • Sin embargo, la letra no aclara nada al respecto por lo que, a mi entender, todos los procesos tendrían la misma chance de obtener el CPU porque no es posible saber que proceso entró primero a la cola de espera.
Desde los 175ms a los 215ms solo se ejecutan P1 y P2. La solución plantea que P1 ejecute todo este tiempo en el CPU1 y P2 ejecute en el CPU2. Dado que el sistema es simetrico y que el nucleo corre en cualquier CPU:
  • Son aceptables soluciones que intercalen el CPU para cada proceso? 
  • Se debe considerar que un sistema expropiativo debe quitar el recurso CPU solo si hay procesos en la cola de espera? (Lo veo como una optimización razonable pero no se dió en el  teórico).

----

Luego, en el ejercicio 3, la solución tiene, valga la redundancia, un problema de concurrencia:


Semaphore S;
begin
  init(S,0);
  A
  cobegin
    begin
      cobegin
        begin B; E end
        begin P(S); C; F end
      coend
      cobegin
        begin H; K; end
        begin I; end
      coend
      M
    end
    begin D; G; J; V(S); L; end
  coend
end
Según ese código, M se ejecuta en paralelo con L, y no existe ningún tipo de control al respecto. Sin embargo, M depende de L por lo que la solución no sería correcta.


Una forma de arreglar eso sería simplemente poner M al final del cobegin principal pues en ese caso la sincronización sería automática.


---

Perdón por el largo del post, pero me pareció que debía plantear esto antes del parcial, aunque sea sobre la hora.


Saludos!


En respuesta a Juan Ramirez

Re: [Primer parcial 2016] Posibles errores en la solución (2c y 3.2)

de Juan Ramirez -
Corrijo un error, donde dice:


la solución refeleja que este proceso pase a la Ready Queue

En realidad debía decir


la solución NO refleja que este proceso pase a la Ready Queue