Описание тега priority-inversion

Инверсия приоритета - это проблема, которая возникает в некоторых системах, когда задача с высоким приоритетом (поток или процесс) блокируется задачей с низким приоритетом. Если задача с низким приоритетом испытывает нехватку процессорного времени из-за некоторых задач со средним приоритетом, то задача с высоким приоритетом также фактически не хватает. Это особая проблема встраиваемых систем с требованиями жесткого реального времени.

Инверсия приоритета - это проблема, которая возникает в некоторых системах, когда задача с высоким приоритетом (т. Е. Поток или процесс) блокируется задачей с низким приоритетом. Например, если задача с низким приоритетом содержит блокировку взаимного исключения, а задача с высоким приоритетом должна получить такую ​​же блокировку, прежде чем она сможет продолжить работу.

Если задача с низким приоритетом испытывает нехватку процессорного времени из-за некоторых задач со средним приоритетом, то задача с высоким приоритетом также фактически не хватает. Это как если бы его приоритет был "инвертирован" по отношению к задачам со средним приоритетом.

Инверсия приоритета может быть серьезной проблемой в приложениях реального времени, где высокоприоритетная задача может отвечать за выполнение критических требований реального времени, а также там, где планировщик может не реализовывать какую-либо политику справедливого планирования.

Справедливое планирование часто встречается на настольных и серверных платформах, где многие процессы конкурируют друг с другом за ресурсы. Такие системы пытаются предоставить каждой задаче "справедливую долю" доступного процессорного времени, и параметр планирования, который называется "приоритет", может фактически указывать на то, насколько большой должна быть доля конкретной задачи.

Во встроенном программном обеспечении с жесткими требованиями реального времени часто бывает так, что все задачи в системе взаимодействуют друг с другом. Предоставление "справедливой доли" конкурирующим задачам часто не является целью проекта, и приоритеты планировщика могут быть абсолютными (т. Е. Поток с низким приоритетом никогда не может выполняться, когда поток с более высоким приоритетом ожидает выполнения).

Что еще хуже, программное обеспечение жесткого реального времени часто работает на небольших платформах, которые могут иметь несколько процессоров (возможно, только один). Возможность инверсии приоритета между высокоприоритетной задачей реального времени и низкоприоритетной фоновой задачей на такой ограниченной встроенной платформе может представлять значительный риск того, что устройство выйдет из строя.