2 votos

¿La herencia prioritaria cura la inversión de prioridad?

En la página de descripción de Mutex de la web de FreeRTOS se puede encontrar la siguiente frase:

La herencia prioritaria no soluciona la inversión de prioridad

Por lo que sé pensaba que la herencia prioritaria era una cura para la inversión de prioridad. Si la tarea de prioridad alta A es bloqueada por la tarea de prioridad baja B, con la herencia de prioridad, la tarea B hereda el nivel de prioridad de la tarea A (alta). Esto significa que ninguna tarea de prioridad media puede retrasar la ejecución de la tarea A. Como consecuencia, no se produce la inversión de prioridad. ¿Qué hay de erróneo en mi razonamiento?

6voto

caveman Puntos 1590

Lo que se quiere decir es que hay situaciones que pueden darse de inversión de prioridad y que no se solucionan con la herencia de prioridad.

Un ejemplo: La situación normal utilizada es que la tarea A , B , C tienen prioridad decreciente. C toma un mutex, entonces B se prepara y se pone en marcha. Ahora A está listo. A necesita el mutex, así que lo bloquea. Entonces B sigue funcionando, lo que impide C de liberar el mutex. Esto hace que B tienen suficiente prioridad para bloquear A de hacer el trabajo.

La herencia prioritaria haría C tienen la misma prioridad que A . Pero consideremos el caso en el que C no puede completar su trabajo para liberar el mutex sin B trabajando. Entonces, debido a la herencia de prioridades, se produce un punto muerto.

Por lo tanto, puede existir inversión de prioridades, y puede ser difícil detectar posibles fallos. La solución es intentar evitarla mediante el diseño en la medida de lo posible.

Aquí está toda la propaganda del sitio freertos:

La herencia prioritaria no soluciona la inversión de prioridad. Sólo minimiza su efecto en algunas situaciones. Las aplicaciones de tiempo real deben diseñarse de tal manera que la inversión de prioridad no ocurra en primer lugar. en primer lugar.

1voto

DanH Puntos 265

Si la tarea C necesita que la tarea B termine un trabajo para que la tarea C pueda liberar el primer mutex, entonces debe haber una segunda conexión de bloqueo/mutex entre las tareas C y B que la herencia de prioridad podría utilizar para aumentar la prioridad de la tarea B, permitiendo que la tarea B termine el trabajo que necesita la tarea C para que pueda liberar el primer mutex.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X