Введение

Нежелательный сценарий планирования вычислений

В информатике инверсия приоритетов — это сценарий планирования, в котором задача с высоким приоритетом косвенно блокируется задачей с более низким приоритетом, фактически меняя местами назначенные приоритеты задач. Это нарушает модель приоритетов, согласно которой задачам с высоким приоритетом может помешать выполнению только задача с более высоким приоритетом. Инверсия возникает при конкуренции за ресурсы с задачей низкого приоритета, которая затем прерывается задачей среднего приоритета.

Формулировка

Рассмотрим две задачи H и L, соответственно высокого и низкого приоритета, каждая из которых может получить исключительное право на использование общего ресурса R. Если H пытается получить R после того, как L уже получил его, то H блокируется до тех пор, пока L не освободит ресурс. В хорошо спроектированной системе совместное использование ресурса исключительного доступа (в данном случае R) обычно подразумевает, что L оперативно освобождает R, чтобы H (задача с более высоким приоритетом) не оставалась заблокированной на длительное время. Однако, несмотря на продуманную архитектуру, возможно, что третья задача M со средним приоритетом станет готовой к выполнению во время использования L ресурса R. В этот момент, поскольку M имеет более высокий приоритет, чем L, она прерывает L (так как M не зависит от R), что приводит к тому, что L не может оперативно освободить R, и, как следствие, H – задача с наивысшим приоритетом – не может быть запущена (то есть H испытывает неожиданную блокировку, косвенно вызванную задачами с более низким приоритетом, такими как M).

Последствия

В некоторых случаях инверсия приоритета может произойти без немедленных негативных последствий — задержка выполнения задачи с высоким приоритетом остаётся незамеченной, и в конечном итоге задача с низким приоритетом освобождает общий ресурс. Однако существует множество ситуаций, в которых инверсия приоритета может привести к серьёзным проблемам. Если задача с высоким приоритетом оказывается лишённой необходимых ресурсов, это может вызвать сбой в работе системы или запуск предопределённых корректирующих мер, таких как перезагрузка системы сторожевым таймером. Проблема, возникшая с посадочным модулем Mars Pathfinder в 1997 году, является классическим примером проблем, вызванных инверсией приоритета в системах реального времени. Инверсия приоритета также может снизить воспринимаемую производительность системы. Задачи с низким приоритетом обычно имеют низкий приоритет, поскольку для них не критично быстрое завершение (например, это может быть пакетная обработка или другая неинтерактивная задача). Соответственно, задача с высоким приоритетом имеет высокий приоритет, поскольку она, скорее всего, подчиняется строгим временным ограничениям — например, она может предоставлять данные интерактивному пользователю или работать с гарантированными сроками отклика в реальном времени. Поскольку инверсия приоритета приводит к тому, что задача с более низким приоритетом блокирует задачу с высоким приоритетом, это может привести к снижению отзывчивости системы или даже к нарушению гарантий времени отклика. Аналогичная проблема, называемая перестановкой сроков, может возникать при использовании планирования с ранним сроком (EDF).