Добавил:
ivanov666
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Операционные системы реального времени и технологии разработки кроссплатформенного программного обеспечения. Ч.1. Учебное пособие
.pdf
4.2. Алгоритмы планирования
71
4.2. Алгоритмы планирования
Наличие алгоритма планирования – это отличительная черта современной операционной системы. Обычные ОС не всегда могут похвастаться
этим элементом. В них вместо планировщика обычно работает стандартная
очередь заданий, основной целью которой является максимальное покрытие пользовательских задач и имитация их параллельного выполнения. Монополизация задачей процессорного ресурса не допускается, так как всегда
должно оставаться место и время для системных процессов и для загрузки
новых, не запланированных ранее задач. Эти задачи "вставляются” в расписание не по плану, а по желанию пользователя.
В ОС РВ во главу угла поставлено выполнение задач в строгом соответствии с требованиями и при этом параллелизм задач не только не является важным фактором, но и вовсе запрещается, поскольку время выполнения задач во всей их массе будет зависимо от этих задач, а не от расписания и выделенных квантов времени.
Одним из самых важных требований к ОС РВ является предсказуемость времени выполнения задачи. Оно не должно зависеть от внешних
факторов типа загруженности системы, количества задач в очереди и так
далее. При этом стараются сделать так, чтобы временные параметры не зависели от длины очереди (при условии, что они все помещаются в памяти).
Планировщик задач ОС РВ имеет и другие названия: это диспетчер
задач, супервизор, шедулер. В любом случае, планировщик – это модуль,
отвечающий за разделение времени процессоров системы между выполняющимися процессами. Очередь может быть одна для системы и всех ее процессоров или же их может быть несколько (например, по числу процессоров или групп процессоров).
Приоритетность
Мы привыкли к тому, что приоритетом называется некоторое число,
назначенное операционной системой каждому процессу и задаче. Назначением этих чисел заведует планировщик.
На настоящий момент распространено несколько схем назначения
приоритетов в ОС РВ:
фиксированные приоритеты;

4. Управление задачами
72
турнирное определение;
определение по циклическому алгоритму.
Фиксированные приоритеты назначаются задаче при ее создании и
не изменяются на всем протяжении ее существования. В различных вариациях это очень распространенная схема. Часто приоритет имеет смысл
идентификатора, т.е. является уникальным. Значение приоритета обычно
больше 255.
Турнирное определение приоритета описывается как понижение
приоритета последней исполнявшейся задачи.
Циклическое определение приоритета также имеет название Round
Robin и описывается в документации как определение приоритета задачи
по двум критериям: начальное значение приоритета, назначенное при создании, и время ее выполнения. Чем больше времени задача находится в
работе, тем меньше будет ее приоритет на следующий раунд выполнения.
Приоритет не может иметь отрицательное значение или быть
меньше определенного значения (назначается при проектировании системы).
Циклическое назначение приоритетов в основном используется в
операционных системах типа Linux.
Конечно, есть и другие алгоритмы, но они менее распространены, а
специально разработанные алгоритмы для специфических операционных
систем – скорее исключение из правил.
При изучении планировщика задач и системы приоритетов также
необходимо помнить о проблеме блокировок. Когда более приоритетная
задача блокирована менее приоритетной, но владеющей ресурсом, нужным
более приоритетной (заблокированной) задаче, планировщик входит в состояние инверсии приоритетов. Для выхода из этой ситуации применяются
разные алгоритмы, но самым популярным является алгоритм “наследования приоритетов”. В этом случае нуждающаяся в ресурсе задача, получает
его “в аренду”, т.е. во временное пользование, когда занимающая ресурс
задача, на время освобождает его.
Когда вся система работает стабильно, нет никаких неполадок, конфликтов, то все задачи имеют одинаковый приоритет. Нет необходимости
использовать большой диапазон различных приоритетов и схемы принудительного переключения или изменения значений приоритетов. В крайнем

4.2. Алгоритмы планирования
73
случае, используется алгоритм присвоения высокого приоритета “критически важной” задаче, а остальным задачам присваивается низкий приоритет.
В том случае, когда в системе присутствует несколько “критических задач”, есть смысл переходить на многопроцессорную конфигурацию, так
как однопроцессорные варианты не смогут справляться в дальнейшем.
Методы планирования
Самым элементарным методом планирования является использование циклического назначения приоритетов. Он не требует никакого специального программного обеспечения или аппаратных блоков. Более того, зачастую в систему даже не встраивается отдельный планировщик. Все решается обычной очередью типа FIFO (First Inpet, First Output) – первый вошел, первый вышел. В этой схеме каждый процесс получает свой собственный квант времени на выполнение. Если он не завершается в установленный квант времени, то процесс перемещается в очередь, где он будет дожидаться очередного вызова. Ресурсы процессора всегда предоставляются
следующему процессу из этой очереди.
Алгоритм простой и имеет следующие основные достоинства:
простое использование;
прозрачность для понимания и простота встраивания;
линейность проектирования систем с таким планировщиком;
предсказуемость поведения;
детерминированность системы выполнения задач;
минимальный размер кода и данных;
отсутствие “гонки” и “конкурентности” процессов.
В принципе, алгоритм имеет и недостатки. К ним можно отнести отсутствие мощной системы приоритетов и отсутствие нескольких очередей.
Задачи здесь могут быть вызваны вне зависимости от того, должны
ли они в данный момент работать (что-то делать) или не должны.
Основная нагрузка ложится на системного и прикладного программиста, которому предстоит решать задачу управления переключением задач и процессов в системе.
Режим разделения времени
Сейчас распространено несколько вариантов этого алгоритма:

4. Управление задачами
74
нарезание времени (time slicing);
разделение времени (time sharing).
Алгоритмы реализуются следующим образом. Каждой задаче отво-
дится определенное количество квантов времени, обычно кратных 1 мс.
В течение каждого кванта задача может монополизировать ресурсы микропроцессора. После стечения кванта времени, управление передается следующей задаче в очереди, которая готова, ожидает выполнения и имеет высший приоритет. Эта задача выполняется в течение своего кванта времени,
после чего к ней применяется алгоритм, аналогичный циклическому назначению приоритетов.
Можно заметить, что данный алгоритм приводит к появлению следующей проблемы: низкоприоритетные задачи могут никогда не получить возможность выполнения, так как вершину очереди будут занимать высокоприоритетные задачи. Единственная возможность для задач с низким значением
приоритета получить возможность запуска на выполнение – это ситуация,
когда в очереди нет более приоритетных задач или они заблокированы.
Эту проблему частично решает принцип “равной доступности” задач, когда приоритет назначается адаптивным алгоритмом, учитывающим
общее время, когда задача находится на выполнении. Согласно такому подходу, приоритет задачи корректируется со временем.
Кооперативная многозадачность
Данный алгоритм реализует схемы переключения задач, принятых в
операционных системах типа Windows. В этой системе задача выполняется
столько времени, сколько ей требуется. Когда задача “приходит к выводу”,
что ей было выделено достаточно времени, она сама передает управление
другой задачи. По своей сути это тот же Round Robin, только он контролируется не системным процессом или планировщиком, а самими задачами в
кооперативе. В чистом виде практически не применяется в операционных
системах реального времени.
Приоритетная многозадачность с вытеснением
Это наиболее часто используемая в ОС РВ схема управления задачами и их приоритетами. Фактически – это принцип планирования. Основ-

4.2. Алгоритмы планирования
75
ная идея подхода состоит в том, что задача с высоким приоритетом немедленно вытесняет из потока выполнения задачу с более низким приоритетом, когда для нее появляется “работа”. Другими словами, если текущая
активная задача имеет более низкий приоритет, чем другая задача, получившая статус “готовности”, она немедленно передает управление.
Вытеснение происходит, например, тогда, когда задача с высоким
приоритетом получила сообщение, освободился ее ресурс, истек выделенный лимит времени или произошло ожидаемое внешнее событие, связанное с запросом на прерывание.
Многоуровневые очереди с обратными связями
В любых системах реального времени предпочтение отдается задачам с небольшим прогнозируемым временем выполнения. Этим обеспечивается высокая “плотность” использования как внутренних, так и внешних
ресурсов системы. Но так как не все задачи удовлетворяют этим условиям
или имеют малое время выполнения, то они ранжируются в системе.
Для учета результатов такого разделения задач было введено несколько уровней вложенности задач, и им была добавлена “обратная
связь”.
При таком подходе каждый новый процесс помещается уже не в
одну очередь, а в систему очередей, и перемещается по ней до тех пор, пока
не получит возможность выполнения и все необходимые ресурсы. Если
процесс, занявший центральный процессор, не успевает выполниться до
конца в установленный квант времени, то он перемещается в конец очереди
с более низким уровнем и ожидает перемещения в очереди более высокого
уровня со временем.
В обычной многоуровневой системе предусмотрена самая нижняя
очередь, для которой реализованы циклические сдвиги приоритетов. В очередях нижнего уровня процесс циркулирует до полного своего завершения.
Следует заметить, что при перемещении процесса в очередь с понижением
уровня, ему будет увеличен размер кванта времени на выполнение.
Таким образом, для процессов, сдвигаемых вниз по уровням очередей, наблюдается снижение приоритета, но увеличение разрешенного времени на обработку.

4. Управление задачами
76
Обратная связь в этом процессе позволяет более эффективно разделить процессы на категории в соответствии с их потребностью в ресурсах
системы. Дело в том, что состояние процесса сохраняется в системе в виде
статистики и, в частности, запоминается уровень очереди, из которой этот
процесс был выгружен. При возврате процесса в систему очередей на выполнение он будет поставлен в ту очередь, в которой он находился в последний раз.
Многоуровневые очереди с обратными связями – это показательный
пример адаптивного подхода к построению механизма планирования. При
этом система как бы реагирует на изменение поведения процессов в системе.
Стратегии планирования задач
Далее перечислим все способы, которыми планировщик задач решает, какой процесс запускать дальше и как передавать управление процессору.
1. Используя очередь типа “первый вошел – первый вышел” (FIFO).
Здесь следующей будет выполнена первая поступившая в очередь задача.
2. Используя упорядоченную по времени очередь. Здесь первой бу-
дет выполняться задача, находящаяся в конце очереди, куда она была помещена, так как имела до этого самое короткое время выполнения.
3. Используя несколько очередей ожидания. При таком подходе к
планированию в системе используется несколько очередей, перечисленных
выше типов. Задача размещается в одной из них в зависимости от многих
факторов: приоритета, времени выполнения и так далее. Выборка обычно
производится из головы одной из очередей. Если выбранная очередь пуста,
планировщик переходит к следующей. Каждая очередь имеет в системе
свой номер, и этот номер соответствует различным квантам времени выполнения. Самый младший номер имеет очередь с самыми малыми квантами времени выполнения.
4. Используя очереди с учетом приоритета задачи. Подход, анало-
гичный второму типу очередей, только сортировка (упорядочивание) производится не по времени выполнения, а по приоритету задачи.
Планирование можно рассмотреть на примере Linux-подобных систем. В них все кванты времени имеют одинаковый размер, так что сортировать задачи по длительности выполнения не имеет смысла. Все готовые

4.3. Особенности управления процессами в операционных системах реального…
77
к выполнению задачи получают свой квант времени и периодически отправляются на выполнение. Этот период зависит от общего количества готовых к выполнению задач.
Основное ранжирование задач производится согласно их приори-
тету. В начале работы, а именно в момент создания задачи, последняя
имеет высокий приоритет. Каждое возвращение задачи в очередь (пул) сни-
жает значение приоритета. Изменение приоритета происходит всегда,
кроме одного исключения: когда задача использует именно процессорные
ресурсы и блокируется. Если задача выбрала свой квант полностью и не
была заблокирована, то ее приоритет гарантировано снижается.
Данный механизм позволяет обеспечить высокий уровень средней
производительности системы при переключении задач и высокий уровень
отзывчивости интерактивных приложений (т.е. программ, которые взаимодействуют с пользователем в реальном времени).
Однако в чистых операционных системах реального времени такой
метод не применим, так как процессорное время, используемое задачей,
напрямую зависит от количества запущенных задач, т.е. не является предсказуемым ресурсом.
Для систем реального времени, произведенных от Linux-подобных
систем, на практике применяется модификация такого планировщика. Все
задачи имеют фиксированное значение приоритета, которое может меняться только самой задачей или принудительно планировщиком. Во время
возврата или выполнения приоритет не может быть изменен. Доступ к ресурсам процессора всегда получает задача, имеющая самый высокий приоритет. Если таких задач много, то запускается механизм Round Robin
Schedulig (RRS).
В этом случае реализуется концепция, когда задача с любым уровнем приоритета, даже с уровнем ядра системы, может быть прервана другой задачей, при условии того, что у нее будет более высокий приоритет.
4.3. Особенности управления процессами в операционных
системах реального времени
Как уже неоднократно говорилось, планирование задач в системе
должно соответствовать критериям оптимальности. Для систем “жесткого

4. Управление задачами
78
реального времени” – это соответствует фразе: делать все и всегда вовремя,
а для систем с “мягким” временем – это может быть: минимальное запаздывание или средняя “своевременность” выполнения задач.
В зависимости от основного для системы критерия, могут вноситься
изменения в алгоритм планирования задач.
В любом случае в современных системах введен новый параметр,
так называемый дэдлайн (deadline). Дэдлайн означает лимит времени, выделенного на выполнение операций. С этой проблемой как раз и должен
справляться планировщик, чтобы максимально приблизить поведение системы к предсказуемому состоянию.
Дэдлайны могут быть назначены системе в целом или каждому про-
цессу по отдельности. Во втором случае процесс не должен пропустить ни
один свой дэдлайн. Если это заранее невозможно, процесс попросту отклоняется.
Чаще всего сейчас применяются следующие типы алгоритмов пла-
нирования:
статические;
динамические.
К статическим алгоритмам планирования в основном относятся ал-
горитмы группы RMS (Rate Monotonic Scheduling), а к динамическим – EDF
(Earliest Deadline First).
Статические алгоритмы имеют свое статическое расписание. Оно
составляется заранее, до старта основной системы. После старта планировщик просто следует установленному расписанию, не отклоняясь от него.
Разумеется, это следует в основном периодическим заданиям, состав и последовательность которых известны заранее. Все задачи, которые не входят в этот статический список, “вставляются” в расписание в свободные
слоты или моменты, т.е. по ходу работы.
Преимущества данного подхода:
простота. Здесь нет понятия “поток” или “процесс” в привычном
для нас смысле – выполнение задачи означает просто передачу управления
или вызов;
надежность. В условиях стабильного расписания вероятность
сбоя чрезвычайно мала;

4.3. Особенности управления процессами в операционных системах реального…
79
тестируемость. И компоненты системы и ее саму легко протести-
ровать;
стабильность. Система получается детерминированной и все в
ней случается в определенное время.
Как ни странно, но из этих преимуществ возникают и недостатки.
Во-первых, это “негибкость” системы. Любое существенное измене-
ние в расписании приводит к необходимости остановки всей системы, пересчету расписания и новому запуску.
Во-вторых, планировщик работает в своем изолированном про-
странстве, так как основным источником событий для него является внутренний таймер.
В-третьих, при большом количестве заданий, размер таблицы вы-
полнения задач может быть большим, так как в ней описывается не только
очередь задач, но и условия запуска, соотношения времени, связи и прочие
детали.
Статические планировщики в основном применяются в тех случаях,
когда можно жертвовать гибкостью в пользу стабильности и когда системе
достаточно выполнять небольшой набор действий, но обеспечивать высокую надежность.
Динамические алгоритмы лишены этих недостатков, но имеют свои
особенности. Для планировщиков динамического типа основной считается
та задача, которая имеет высший приоритет. Методы назначения приоритетов применяются различные. У задач одного типа или у процессов, реализующих одну и ту же задачу, приоритеты могут различаться.
Поэтому большинство планировщиков такого класса называются
планировщиками с динамическими приоритетами.
Можно рассмотреть два примера динамического планирования с динамическими приоритетами:
EDF (Earliest Deadline First);
LLF (Least Laxity First).
EDF занимается задачами, назначая им приоритет по принципу: в
каждый момент времени высший приоритет назначается той задаче, у которой осталось меньше всего времени до конца выделенного ей срока исполнения. При этом у EDF есть две распространенные модификации: с вытеснением задач и без вытеснения. Здесь под вытеснением мы понимаем

4. Управление задачами
80
ситуацию, когда во время выполнения задачи Х создается работы задачи Y,
приоритет которой выше. В этом случае задача Х вытесняется задачей Y из
потока выполнения, даже если ее работа оказывается не доделанной. Если
вытеснение не применяется, то задача Х всегда будет заканчивать свою работу вне зависимости, появились ли в системе задачи Y, Z или какие другие, с более высоким приоритетом.
LLF раздаёт приоритеты в соответствии с принципом: высший приоритет всегда имеет задача с минимальным резервом времени. Этот резерв
времени называется Laxity, а резервом здесь называют разницу во времени
между крайним сроком выполнения и временем, которое необходимо еще
проработать задаче.
Алгоритмы EDF и LLF считаются оптимальными для любого набора
задач любого типа если:
все задачи не зависят друг от друга;
задачи могут и имеют право вытеснять друг друга;
вытеснение не требует особых временных затрат.
Также существуют динамические алгоритмы планирования со статическими приоритетами. Если в таком планировании задаче назначается
приоритет, то он уже не будет изменен с течением времени. Принципы работы такого планировщика составлены на примере статического планировщика с небольшими изменениями. В таких решениях существуют несколько способов назначения приоритетов. Рассмотрим два наиболее популярных метода:
RMS (Rate Monotonic Scheduling);
DMS (Deadline Monotonic Scheduling).
RMS использует следующее правило назначения приоритетов: самый высокий приоритет назначается задаче с самым меньшим периодом.
DMS действует немного по-другому: приоритет задачи тем выше,
чем меньше ее относительный крайний срок.
У этих алгоритмов так же есть недостатки. Так, например, в определенной ситуации возможен выход за пределы дэдлайна. Однако данные методы просты в реализации и часто применяются на практике именно в операционных системах реального времени.
Применение планировщиков с приоритетами и прерыванием обслуживание типа RMS – достаточно частое явление для ОС РВ. Для последних
Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]
