- •Основная часть Определение и отличительные особенности осрв
- •Архитектурные решения осрв
- •Управление задачами и планирование
- •Управление памятью в условиях реального времени
- •Синхронизация задач и средства ее реализации
- •Проблема инверсии приоритетов
- •Протоколы наследования и граничных приоритетов
- •Мьютексы и семафоры: различия в защите от инверсии
- •Стандарты осрв и расширения posix
- •Заключение
- •Список источников
Проблема инверсии приоритетов
Инверсия приоритетов – это критическая аномалия в работе планировщика ОСРВ, возникающая при использовании общих ресурсов. Суть проблемы заключается в том, что задача с высоким приоритетом вынуждена ожидать завершения работы задачи с низким приоритетом, которая удерживает необходимый ресурс. Ситуация усугубляется, если в системе появляется третья задача со средним приоритетом, которая вытесняет низкоприоритетную задачу. В этом случае высокоприоритетная задача блокируется на неопределенный срок, ожидая, пока среднеприоритетные задачи завершат свою работу, что фактически означает потерю управления по приоритетам.
Данная проблема стала широко известна после инцидента с марсоходом Pathfinder, где инверсия приоритетов приводила к системным сбросам из-за невозможности выполнения критических задач вовремя. Причиной послужило то, что задача управления шиной данных (высокий приоритет) блокировалась задачей сбора метеоданных (низкий приоритет), а та, в свою очередь, прерывалась длительными коммуникационными процессами со средним приоритетом. Без специальных механизмов защиты инверсия приоритетов делает систему реального времени непредсказуемой.
Протоколы наследования и граничных приоритетов
Для устранения инверсии приоритетов в ОСРВ внедряются специализированные протоколы. Протокол наследования приоритетов (Priority Inheritance Protocol, PIP) работает по следующему принципу: если высокоприоритетная задача блокируется на ресурсе, занятом низкоприоритетной задачей, то последняя временно получает уровень приоритета ожидающей задачи. Это позволяет ей не быть вытесненной задачами среднего уровня и как можно быстрее завершить критическую секцию, чтобы освободить ресурс. После освобождения ресурса приоритет задачи возвращается к исходному значению.
Более сложным и эффективным является протокол граничных приоритетов (Priority Ceiling Protocol, PCP). Каждому ресурсу (мьютексу) присваивается значение «потолка» приоритета, равное максимально возможному приоритету задачи, которая может захватить этот ресурс. Задача может успешно захватить ресурс только в том случае, если ее текущий приоритет строго выше «потолков» всех ресурсов, захваченных другими задачами в данный момент. PCP не только решает проблему инверсии приоритетов, ограничивая время блокировки высокоприоритетной задачи временем одной критической секции низкоприоритетной, но и гарантированно предотвращает возникновение тупиковых ситуаций (deadlocks).
Мьютексы и семафоры: различия в защите от инверсии
Хотя мьютексы и семафоры часто используются для схожих целей, в контексте ОСРВ между ними существует принципиальное различие. Семафор – это обобщенный механизм сигнализации, имеющий счетчик. У семафора нет понятия владельца: одна задача может захватить его, а другая – освободить. Из-за отсутствия жесткой привязки к потоку для семафоров невозможно реализовать протоколы наследования приоритетов, так как операционная система не «знает», чей приоритет нужно повышать.
Мьютекс же (mutual exclusion) является специализированным механизмом взаимного исключения с четко определенным владением. Только тот поток, который захватил мьютекс, имеет право его освободить. Это свойство владения позволяет ядру ОСРВ отслеживать зависимости между задачами и применять алгоритмы наследования или граничных приоритетов. Поэтому в требованиях к разработке систем реального времени для защиты критических секций предписывается использование исключительно мьютексов с включенными протоколами защиты от инверсии.
