Приоритетное наследование с 5 задачами - PullRequest
0 голосов
/ 16 января 2019

Предположим, у меня есть набор задач T с пятью задачами. Предположим, мы знаем, что набор задач можно запланировать, и что у нас есть следующая таблица использования ресурсов :

enter image description here

Приоритеты задач снижаются от t1 с самым высоким приоритетом до t5 с самым низким приоритетом. S1, S2 и S3 - это три разных общих ресурса, использующих три разных мьютекса.

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

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

Через 1/3 единицы времени наступает t4: поскольку у него приоритет выше (его приоритет 2), чем у t5, он может вытеснить t5. Поэтому он немедленно пытается получить блокировку, чтобы войти в ее критическую секцию и использовать общий ресурс S1: однако блокировка уже получена t5, поэтому в этот момент приоритет t5 повышается до приоритета t4. Приоритет t5 теперь 2.

t5 возобновляет выполнение еще на 1/3 единицы времени (время блокировки для t4 теперь составляет 1/3 единицы времени). Предположим, что теперь наступает время t1, и поскольку его приоритет равен 5, он вытесняет время t5. Он сразу же пытается получить блокировку, которая уже занята t5. В этот момент приоритет t5 повышается до t1, что составляет 5.

В этот момент t5 выполняет свои последние 1/3 единицы времени в критической секции, а затем разблокирует мьютекс на общем ресурсе (время блокировки t4 теперь составляет 2/3 единицы времени, t1 равно 1/3). В этот момент как t4, так и t1 могут использовать его, но t1 имеет наивысший приоритет, поэтому он получает блокировку, работает в течение его 2 единиц времени в критической секции и снимает блокировку. В этот момент время блокировки t4 равно 2 + 2/3 единиц времени, и только теперь он может начать заново, получить блокировку и работать в течение 3 единиц времени в критической секции.

Похоже, что максимальное время блокировки для t4 составляет не менее 2 + 2/3, а не 2. Я что-то здесь упускаю?

...