Answer:
Priority inversion is a situation where in lower priority
tasks will run blocking higher priority tasks waiting for
resource (mutex). For ex: consider 3 tasks. A, B and C, A
being highest priority task and C is lowest. Look at
sequence of context swaps
A goes for I/O . unlocks mutex.
C was ready to run. So C starts running. locks mutex
B is ready to run. Swaps out C and takes mutex.
A is ready to run. but A is blocked as mutex is locked by B.
but B will never relinqishes the mutex as its higher
priority than C.
The solution to priority inversion is Priority inheritance.
tasks will run blocking higher priority tasks waiting for
resource (mutex). For ex: consider 3 tasks. A, B and C, A
being highest priority task and C is lowest. Look at
sequence of context swaps
A goes for I/O . unlocks mutex.
C was ready to run. So C starts running. locks mutex
B is ready to run. Swaps out C and takes mutex.
A is ready to run. but A is blocked as mutex is locked by B.
but B will never relinqishes the mutex as its higher
priority than C.
The solution to priority inversion is Priority inheritance.
Previous Question | Next Question |
Explain task spawn in vxworks? | What are the various methods to overcome it? |