2011-06-06 11 views
5

Estoy teniendo problemas para entender Priority Inversionprioridad de inversión

fragmento del artículo:

consideramos que no es una tarea L, con una baja prioridad. Esta tarea requiere el recurso R. Considere que L se está ejecutando y adquiere el recurso R. Ahora, hay otra tarea H, con alta prioridad. Esta tarea también requiere recursos R. Considere H comienza después de L ha adquirido recursos R. Ahora H tiene que esperar hasta L renuncia recursos R.

Todo funciona como se espera hasta este punto, pero los problemas surgen cuando a nueva tarea M comienza con prioridad media durante este tiempo. `Debido a que R sigue siendo en uso (por L), H no se puede ejecutar. Desde M es la más alta prioridad desbloqueado tarea, que será programada antes de L. Desde L ha sido apropiado por M, L no puede renunciar a R. Así M se ejecutará hasta que está terminado, entonces L se ejecutará - en al menos hasta un punto donde puede renunciar a R - y luego se ejecutará H. Por lo tanto, en la situación anterior, una tarea con prioridad media se ejecutó antes que una tarea con de alta prioridad, lo que nos da una inversión de prioridad .

La pregunta es relevante para la segunda parte del artículo. ¿Por qué un proceso con prioridad H (Superior) no puede adelantarse a un proceso con prioridad L (inferior), pero un proceso con prioridad M (mediana) puede preevaluar? es decir, si H se bloqueó porque R estaba en uso, ¿por qué M tampoco estaba bloqueado?

+0

Esto huele a tarea. Aún así, una buena pregunta. –

+1

No estoy seguro de cómo o por qué ... pero no es ... –

Respuesta

4

Porque M no requiere el recurso R, por lo que puede ejecutarse mientras L todavía lo tiene en uso; H, por otro lado, no se puede ejecutar hasta que L pueda liberar R.

+0

Gracias, sabía que me estaba perdiendo algo tonto :) –