2012-05-23 4 views
1

HPT -> Задача с наивысшим приоритетом.
MPT -> Medium приоритетная задача
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?

+2

Основываясь на статье, с которой вы связались, я не удивлен, что вы не можете ее понять. –

ответ

7

Википедию объяснение, возможно, немного легче понять, чем связь вы предоставили: 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.
+0

У меня есть один вопрос. Почему HPT не работает (от точки 5)? –

+0

@RasmiRanjanNayak: Потому что он заблокирован в ожидании выхода R. – janneb

1

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

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

+0

Не могли бы вы рассказать немного подробнее .. –

+3

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

1

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

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

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