Earlyest deadline first ( EDF ) или least time to go — это динамический алгоритм приоритетного планирования, используемый в операционных системах реального времени для помещения процессов в приоритетную очередь . Всякий раз, когда происходит событие планирования (завершение задачи, выпуск новой задачи и т. д.), в очереди будет выполнен поиск процесса, ближайшего к его крайнему сроку. Этот процесс будет следующим запланированным для выполнения.
EDF является оптимальным алгоритмом планирования на однопроцессорных компьютерах с вытеснением в следующем смысле: если набор независимых заданий, каждое из которых характеризуется временем поступления, требованием к выполнению и крайним сроком, может быть запланирован (с помощью любого алгоритма) таким образом, чтобы гарантировать завершение всех заданий к установленному сроку, EDF запланирует этот набор заданий так, чтобы все они были завершены к установленному сроку.
При планировании периодических процессов, имеющих сроки, равные их периодам, EDF имеет предел использования 100%. Таким образом, тест на планируемость [1] для EDF выглядит следующим образом:
где — наихудшее время вычислений процессов , а — соответствующие им периоды между поступлениями (предполагается, что они равны относительным срокам). [2]
То есть EDF может гарантировать соблюдение всех сроков при условии, что общая загрузка ЦП не превышает 100%. По сравнению с методами планирования с фиксированным приоритетом, такими как планирование с монотонной скоростью , EDF может гарантировать соблюдение всех сроков в системе при более высокой нагрузке.
Обратите внимание, что используйте формулу теста на возможность планирования под крайним сроком в качестве периода. Когда крайний срок меньше периода, все по-другому. Вот пример: четыре периодические задачи требуют планирования, где каждая задача отображается как TaskNo(время вычисления, относительный крайний срок, период). Это T0(5,13,20), T1(3,7,11), T2(4,6,10) и T3(1,1,20). Эта группа задач соответствует утилизации, которая не превышает 1,0, где утилизация рассчитывается как 5/20+3/11+4/10+1/20 = 0,97 (две цифры округлены), но она все еще не может быть запланирована, проверьте показатель EDF Scheduling Failure для получения подробной информации.
EDF также является оптимальным алгоритмом планирования на невытесняющих однопроцессорных компьютерах, но только среди класса алгоритмов планирования, которые не допускают вставленного простоя. При планировании периодических процессов, имеющих крайние сроки, равные их периодам, достаточным (но не необходимым) тестом на планируемость для EDF становится: [3]
Где p представляет собой штраф за отсутствие приоритета, заданный как max / min . Если этот фактор можно сохранить небольшим, невытесняющий EDF может быть выгоден, поскольку он имеет низкие накладные расходы на реализацию.
Однако, когда система перегружена, набор процессов, которые пропустят крайние сроки, в значительной степени непредсказуем (он будет функцией точных крайних сроков и времени, в которое происходит перегрузка). Это значительный недостаток для проектировщика систем реального времени. Алгоритм также трудно реализовать на оборудовании , и существует сложная проблема представления крайних сроков в разных диапазонах (крайние сроки не могут быть точнее, чем гранулярность часов, используемых для планирования). Если для вычисления будущих крайних сроков относительно настоящего используется модульная арифметика, поле, хранящее будущий относительный крайний срок, должно содержать по крайней мере значение (("duration" {самого длинного ожидаемого времени до завершения} * 2) + "now"). Поэтому EDF обычно не встречается в промышленных компьютерных системах реального времени.
Вместо этого большинство компьютерных систем реального времени используют планирование с фиксированным приоритетом (обычно планирование с монотонной скоростью ). При фиксированных приоритетах легко предсказать, что условия перегрузки приведут к тому, что процессы с низким приоритетом пропустят сроки, в то время как процесс с наивысшим приоритетом все равно уложится в свой срок.
Существует значительный объем исследований, посвященных планированию EDF в вычислениях в реальном времени ; можно рассчитать наихудшее время отклика процессов в EDF, работать с другими типами процессов, отличными от периодических, и использовать серверы для регулирования перегрузок.
Рассмотрим 3 периодических процесса, запланированных на вытесняющем однопроцессорном компьютере. Время выполнения и периоды показаны в следующей таблице:
В этом примере единицы времени можно рассматривать как планируемые временные отрезки . Крайние сроки — это то, что каждый периодический процесс должен завершиться в течение своего периода.
На временной диаграмме столбцы представляют собой временные интервалы, при этом время увеличивается справа, а все процессы начинают свои периоды с временного интервала 0. Попеременная синяя и белая заливка на временной диаграмме обозначает периоды каждого процесса, при этом крайние сроки указываются в местах изменения цвета.
Первый процесс, запланированный EDF, — это P2, поскольку его период самый короткий, и поэтому у него самый ранний срок. Аналогично, когда P2 завершается, P1 планируется, а затем P3.
В интервале времени 5 у P2 и P3 одинаковый срок выполнения, и они должны быть завершены до интервала времени 10, поэтому EDF может запланировать любой из них.
Использование будет следующим:
Поскольку наименьшее общее кратное периодов равно 40, шаблон планирования может повторяться каждые 40 временных срезов. Но только 37 из этих 40 временных срезов используются P1, P2 или P3. Поскольку использование, 92,5%, не превышает 100%, система может планироваться с помощью EDF.
При планировании EDF могут возникать нежелательные перестановки сроков. Процесс может использовать общий ресурс внутри критической секции , чтобы предотвратить его упреждающее отмену в пользу другого процесса с более ранним сроком. Если это так, то для планировщика становится важным назначить работающему процессу самый ранний срок из числа других процессов, ожидающих ресурс. В противном случае процессы с более ранними сроками могут их пропустить.
Это особенно важно, если процесс, выполняющий критическую секцию, имеет гораздо больше времени для завершения и выхода из своей критической секции, что задержит освобождение общего ресурса. Но процесс все равно может быть вытеснен в пользу других, имеющих более ранние сроки, но не разделяющих критический ресурс. Эта опасность перестановки сроков аналогична инверсии приоритетов при использовании упреждающего планирования с фиксированным приоритетом .
Чтобы ускорить поиск дедлайна в очереди готовых, записи очереди сортируются по их дедлайнам. Когда новому процессу или периодическому процессу назначается новый дедлайн, он вставляется перед первым процессом с более поздним дедлайном. Таким образом, процессы с самыми ранними дедлайнами всегда находятся в начале очереди.
В анализе интенсивного трафика поведения односерверной очереди при политике планирования «ранний крайний срок — первый» с отказом [4] процессы имеют крайние сроки и обслуживаются только до тех пор, пока не истекут их крайние сроки. Доля «отказанной работы», определяемая как остаточная работа, не обслуженная из-за истекших крайних сроков, является важным показателем производительности.
Обычно считается, что реализация упреждающего планирования с фиксированным приоритетом (FPS) проще, чем динамический приоритетный планировщик, такой как EDF. Однако при сравнении максимального использования оптимального планирования при фиксированном приоритете (с приоритетом каждого потока, заданным планированием с монотонной скоростью ), EDF может достигать 100%, в то время как теоретическое максимальное значение для планирования с монотонной скоростью составляет около 69%. Кроме того, наихудшие накладные расходы реализации EDF (полностью упреждающее или ограниченное/не упреждающее) для периодических и/или спорадических задач можно сделать пропорциональными логарифму наибольшего представления времени, требуемого данной системой (для кодирования крайних сроков и периодов) с использованием цифровых деревьев поиска. [5] В практических случаях, таких как встроенные системы, использующие фиксированное 32-битное представление времени, решения о планировании могут быть приняты с использованием этой реализации за небольшое фиксированно-постоянное время, которое не зависит от количества системных задач. В таких ситуациях эксперименты не выявили заметной разницы в накладных расходах между EDF и FPS, даже для наборов задач (сравнительно) большой мощности. [5]
Обратите внимание, что EDF не делает никаких конкретных предположений относительно периодичности задач; следовательно, его можно использовать для планирования как периодических, так и апериодических задач. [2]
Хотя реализации EDF не распространены в коммерческих ядрах реального времени, вот несколько ссылок на ядра с открытым исходным кодом и ядра реального времени, реализующие EDF:
SCHED DEADLINE
, которая доступна с версии 3.14.