Недавно в одном из интервью меня спросили об алгоритме планирования, используемом операционной системой Linux. Какой алгоритм используется, почему?
Кроме того, какой алгоритм используется в операционных системах реального времени и почему?
Недавно в одном из интервью меня спросили об алгоритме планирования, используемом операционной системой Linux. Какой алгоритм используется, почему?
Кроме того, какой алгоритм используется в операционных системах реального времени и почему?
Ответы:
Текущий планировщик задач Linux называется «Полностью честный планировщик» (CFS). Вы должны взглянуть на http://people.redhat.com/mingo/cfs-scheduler/sched-design-CFS.txt для получения более подробной информации. Дизайн довольно сложный и, на мой взгляд, не подходит для RTOS.
Общепринятым методом в системах реального времени является монотонное планирование скорости, поскольку оно имеет надежные гарантии, если выполняются определенные допущения (например, статические приоритеты задач и фиксированное время выполнения и скорость). Существует множество других алгоритмов, и было проведено много исследований. Так что это в основном все о свойствах, которые вам нужны, что вы знаете о своей задаче и что исправлено.
Я не совсем уверен, принимаете ли вы планирование ввода-вывода ядра. Если нет, игнорируйте этот ответ.
Википедия заявляет, что CFG (полностью честная очередь) используется по умолчанию, начиная с ядра 2.6.18.
На моем openSUSE (под управлением Kernel 2.6.37) я могу переключаться между CFG, NOOP и Deadline .
Алгоритм, используемый планировщиком Linux, представляет собой сложную схему с сочетанием вытесняющего приоритета и смещенной временной синхронизации. Он назначает более длительный интервал времени задачам с более высоким приоритетом и более короткий интервал времени задачам с более низким приоритетом.
Он идентифицирует каждый процесс как процесс в реальном времени или как обычный (другой) процесс. Задачам реального времени назначаются статические приоритеты в диапазоне [0,99], где меньшее число указывает на более высокий приоритет.
Все другие задачи имеют динамические приоритеты в диапазоне [100,139], основанные на интерактивности задачи, основанной на их хороших значениях плюс или минус значение 5. Задачи, которые являются более интерактивными, обычно имеют более длительное время ожидания и, следовательно, с большей вероятностью настройте параметры ближе к -5, так как планировщик предпочитает интерактивные задачи. (Интерактивность задачи определяется тем, как долго она спит, ожидая ввода / вывода.) Интерактивность задачи определяет, будет ли значение 5 добавляться или вычитаться из значения nice. Результатом таких корректировок будут более высокие приоритеты для этих задач. И наоборот, задачи с более коротким временем ожидания часто более привязаны к процессору и поэтому их приоритеты будут снижены.
Ядро поддерживает список всех выполняемых задач в структуре данных очереди выполнения. Очередь выполнения содержит два массива приоритетов: активный и просроченный. Активный массив содержит все задачи с временем, оставшимся в их временных срезах, а просроченный массив содержит все просроченные задачи. Каждый из этих массивов приоритетов содержит список задач, проиндексированных в соответствии с приоритетом. Планировщик выбирает задачу с самым высоким приоритетом из активного массива для выполнения на CPU. Когда все задачи исчерпали свои временные интервалы (т. Е. Активный массив пуст), обмениваются два приоритетных массива: массив с истекшим сроком действия становится активным массивом, и наоборот.
Динамический приоритет задачи пересчитывается, когда задача исчерпала свой временной интервал и должна быть перемещена в массив с истекшим сроком действия. Таким образом, при обмене двумя массивами всем задачам в новом активном массиве были назначены новые приоритеты и соответствующие временные интервалы. (Примечание: это отрывок из книги Abraham Silberschatz, et al. Abraham Silberschatz, «Концепции операционной системы» (9-е издание). За подробностями обращайтесь к разделу 5.6.3 этой книги)
>
) для тех частей вашего ответа, которые вы переняли из внешнего источника, особенно при цитировании из книги.
Это ответ на ваш другой вопрос. Системы реального времени (RTS) бывают двух типов, жесткие и мягкие. Алгоритм планирования ЦП для жесткого RTS является приоритетным алгоритмом на основе приоритетов, а для мягкого RTS - приоритетным не является преимущественным.