Пример 1. Рассмотрим ситуацию, когда у нас есть три задачи и только два уровня приоритета (один бит), как показано в Таблице 1

Рассмотрим ситуацию, когда у нас есть три задачи и только два уровня приоритета (один бит), как показано в Таблице 1. Что случилось бы, если бы все задачи потребовали выполнения одновременно?

Таблица 1: Иллюстрация проблемы, связанной с недостаточным количеством уровней приоритета.

Задача Приоритет Время выполнения Критический срок обслуживания
High High (1)    
Low 1 Low (0)    
Low 2 Low (0)    

Рис.1 Иллюстрация недостаточного количества уровней приоритета

Когда задачи High и Low1 прибывают (то есть начинают выполнение) немного раньше задачи Low2 (см. момент времени 0 в рисунке 1), они должны выполнится в этом порядке, и нет никакого способа, с выше указанными значениями приоритета, чтобы Задача Low2 могла бы выполниться в ее критичный срок (отмеченный в момент времени 6, который является 6 единицами после прибытия этой задачи). Причиной этому является невозможность вытеснить задачу более высокого или такого же приоритета, а также то, что задачи High и Low1 потребляют 2 + от 6 до 8 единиц времени, что больше чем крайний срок задачи Low2, равный 6.

Кроме того, только с двумя уровнями приоритета, может быть трудно найти значение приоритета, которое решает проблему встречи всех крайних сроков при худших условиях прибытия. Например, если Задача Low2 имеет самый высокий приоритет (равный 1), и задачи Low1, и High обе имеют низкий приоритет (равный 0), то запуск задачи Low2 и Low1 немного прежде, чем задачи High фактически не даст возможности ей выполнится в ее крайний срок (просто, потому что время выполнения Задачи Low2 + задача Low1 потребляет 3 + от 6 до 9 единиц, и задача High не сможет выполнить ее 2 единицы до ее крайнего срока, который равен 10 единицам).

Назначение приоритета равным 1 только к задачам High, и Low2 действительно решает проблему, даже если все задачи, выполняющиеся периодически, с периодами равными крайним срокам. Также может помочь предоставление дополнительного уровня приоритета. Это объясняет, почему назначение приоритетов настолько важно в системах реального времени.

Назначение приоритетов задачам (или модулям) является критическим для обеспечения лучшей диспетчируемости, однако немедленно возникает следующий вопрос - как назначать приоритеты - то есть на каких основаниях? Другими словами, мы должны знать критерии назначении приоритета. Lehoczky и Sha [3] дали анализ назначения приоритетов в условиях недостаточности уровней приоритета. Технологию, которую они предложили, называют сеткой с постоянным соотношением приоритетов(constant-ratio priority grid); эта технология нами рассматриваться не будет.

Если количество уровней приоритета достаточно, естественно будет назначать приоритеты на основании важности задачи. Пример 2 показывает, почему приоритеты, основанные на важности задачи могут не работать.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: