Я не могу понять, как может произойти инверсия приоритета

HPT -> Задача с наивысшим приоритетом.
MPT -> Задача со средним приоритетом
LPT -> Задача с низким приоритетом.

Привет, друг, я читал об инверсии приоритетов на многих веб-сайтах (например, http://www.embeddedheaven.com/priority-inversion-2.htm). Но я хотел бы знать, почему HPT не может вытеснить LPT? Если вы прочитаете раздел 3.3 Неограниченная инверсия, в нем говорится, что LPT получил ресурс, в то же время, если HPT готов, но заблокирован из-за LPT. Но если MPT готов, он вытесняет LPT и выполняет сам себя. Затем LPT должен дождаться завершения MPT. После завершения MPT возобновляется LPT. И как только LPT завершается, начинается HPT. Итак, мой вопрос: почему HPT не может вытеснить LPT или MPT?


person Rasmi Ranjan Nayak    schedule 23.05.2012    source источник
comment
Основываясь на статье, на которую вы ссылаетесь, я не удивлен, что вы этого не понимаете.   -  person Graham Borland    schedule 23.05.2012


Ответы (3)


Объяснение википедии, возможно, немного легче понять, чем предоставленную вами ссылку: https://en.wikipedia.org/wiki/Priority_inversion

Чтобы ответить на ваш вопрос немного другими словами, примерно в хронологическом порядке происходит следующее:

  1. LPT приобретает R
  2. MPT становится работоспособным, тем самым вытесняя LPT
  3. HPT становится работоспособным, тем самым вытесняя MPT
  4. HPT пытается получить R и блокирует
  5. Планировщик выбирает задачу с наивысшим приоритетом, которая может быть запущена, то есть MPT.
  6. MPT работает без ограничений (потенциально «навсегда»), тем самым предотвращая запуск LPT и освобождая R, и, таким образом, предотвращая запуск HPT.
person janneb    schedule 23.05.2012
comment
У меня есть один вопрос. Почему HPT не запускается (из пункта №5)? - person Rasmi Ranjan Nayak; 23.05.2012
comment
@RasmiRanjanNayak: Потому что он заблокирован в ожидании выпуска R. - person janneb; 23.05.2012

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

Таким образом, задача с более высоким приоритетом блокируется (не выполняется), а задача с более низким приоритетом запускается.

person unwind    schedule 23.05.2012
comment
@unwind, это не главная проблема инверсии приоритетов, если бы он ждал только выпуска LPT, это не было бы проблемой, это становится проблемой, потому что многие MPT вытесняют LPT и продолжают, потому что им не нужен указанный ресурс . Это может привести к тому, что ресурс с самым низким приоритетом заблокирует HPT буквально на несколько часов. Марсоход был почти потерян из-за этого, за исключением некоторых замечательных возможностей отладки с диапазона и загрузки. - person Kortuk; 23.05.2012

Инверсия приоритета — это форма отсрочки на неопределенный срок упреждающих руководителей с общими ресурсами.

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

Эта проблема усложняется, когда задача с низким приоритетом не может быть выполнена одной или несколькими задачами со средним приоритетом. Поскольку задача с низким приоритетом не выполняется, она не может завершить взаимодействие с ресурсом и освободить этот ресурс. Следовательно, выполнение задачи с высоким приоритетом эффективно предотвращается выполнением задач с более низким приоритетом.

person Kinjal Patel    schedule 14.06.2012