- Astra linux планировщик заданий
- Кнопки-переключатели режима отображения
- Панель «Запланированные задачи»
- Контекстное меню
- Кнопки сопровождения
- Окно «Печать»
- Панель «Переменные окружения»
- Контекстное меню
- Кнопки сопровождения
- Принцип работы планировщика задач в Linux
- Типы процессов в Linux
- Планирование в реальном времени
- SCHED_FIFO
- SCHED_RR
- Обобщение по планированию в реальном времени
- Условное планирование
- Виртуальное время выполнения
- CFS —Абсолютно справедливый планировщик
- Почему?
Astra linux планировщик заданий
Программа позволяет в графическом режиме изменять настройки демона cron. С ее помощью можно установить расписание задач: назначить выполнение программы (сценария или приложения) в установленное время, установить время прекращения выполнения назначенной программы и настроить среду ее выполнения (переменные окружения), а также разрешить или запретить выполнение уже установленной задачи. При запуске с уровнем классификационной мандатной метки, отличным от нулевого, появляется сообщение о том, что какие-либо изменения не применяются. Для выполнения привилегированных действий запрашивается авторизация.
Главное окно программы, выполняемой от имени администратора (рис. 1), содержит меню (Меню), кнопки-переключатели режима отображения расписания задач и переменных окружения (Кнопки-переключатели режима отображения), панели «Запланированные задачи» (Панель «Запланированные задачи») и «Переменные окружения» (Панель «Переменные окружения») с кнопками сопровождения.
- Меню программы содержит следующие пункты:
- «Файл»:
- «Загрузить» — в соответствии с установленным режимом отображения загружается файл настроек программы с расписанием задач и переменными окружения;
- «Сохранить» — расписание задач и переменные окружения сохраняются в файле настроек программы;
- «Выход» — если настройки не изменялись, то работа программы завершается. В противном случае открывается окно с запросом на подтверждение сохранения конфигурации:
- [Да] — новые значения сохраняются в файле настроек программы, окно закрывается, и работа программы завершается;
- [Нет] — окно закрывается, и работа программы завершается;
- [Отмена] — окно закрывается;
- «Справка»:
- «Содержание» — вызов окна справки;
- «О программе. » — вызов окна с краткой информацией о программе.
Кнопки-переключатели режима отображения
Кнопками-переключателями устанавливается режим отображения данных на панелях «Запланированные задачи» (Панель «Запланированные задачи») и «Переменные окружения» (Панель «Переменные окружения»).
- В режиме администратора все данные, из числа сохраняемых в файле настроек программы, доступны для редактирования, и существуют следующие режимы отображения (см. рис. 1):
- «Показать для системы» — отображаются системные данные;
- «Показать для пользователя» — отображаются данные, установленные для пользователя, указанного в строке справа от кнопки (устанавливается из выпадающего списка).
Панель «Запланированные задачи»
- На панели «Запланированные задачи» (см. рис. 1) в табличном виде отображается расписание задач:
- «Пользователь» (только в режиме отображения «Показать для системы») — пользователь, от имени которого выполняется задача;
- «Расписание» (только в режиме отображения «Показать для системы») — краткое описание начала выполнения задачи: перечисляются минуты, часы, дни месяца, месяцы и дни недели (символ * в соответствующей позиции обозначает: ежеминутно, ежечасно, каждый день, каждый месяц, каждый день недели);
- «Команда» — имя программы, назначенной к выполнению, в рамках данной задачи;
- «Состояние» — разрешение или запрет задачи к выполнению;
- «Описание» — сопроводительный текст;
- «Подробнее» — подробное описание установленного времени начала выполнения задачи (расшифровывается символ * из столбца «Расписание»).
Щелчок левой кнопкой мыши на строке таблицы выделяет ее. Несколько строк (задач) выделяются щелчком левой кнопки мыши на каждой строке при удержании клавиши .
Время запуска установленных задач определяется по системным дате и времени.
Контекстное меню
- Щелчком правой кнопки мыши на панели «Запланированные задачи» открывается контекстное меню:
- «Новая задача. » — открывается окно «Новая задача» (рис. 2):
- «Команда» — в стоке или из диалогового окна устанавливается полное или относительное (если имя каталога с программой находится среди значений переменной окружения PATH) имя программы, назначенной к выполнению в рамках данной задачи, вместе, если это необходимо, со значениями аргументов и параметров ввода командной строки. Кнопками справа от строки ввода открывается диалоговое окно для выбора и установки (слева направо) имени файла или пункта главного меню (подменю) рабочего стола. После подтверждения или отмены установки имени файла или пункта меню (подменю) окно закрывается, и установленное имя файла или приложения, запускаемого из установленного пункта меню, соответственно, отображается или не отображается в строке ввода команды;
- «Запустить как» (только при установленном режиме отображения «Показать для системы» в главном окне) — из выпадающего списка устанавливается имя пользователя от имени которого программа, назначенная в строке «Команда», запускается;
- флаг «Графическое приложение» — при включении добавляет, а при выключении убирает выставление переменной окружения DISPLAY в строке «Команда»;
- «Запустить как» (только в режиме отображения «Показать для системы») — из списка устанавливается пользователь, от имени которого выполняется команда;
- «Комментарий» — устанавливается сопроводительный текст;
- флаг «Разрешить задачу» — устанавливает разрешение или запрет команды к выполнению;
- флаг«Запускать при загрузке системы» — устанавливает запуск команды при загрузке системы;
- флаг «Запускать каждый день» — устанавливает ежедневный запуск команды;
- «Месяцы» — устанавливаются месяцы запуска команды;
- «Дни месяца» — устанавливаются дни запуска команды;
- «Часы» — устанавливаются часы запуска команды;
- «Дни недели» — устанавливаются дни недели запуска команды;
- «Минуты» — устанавливаются непосредственно минуты, или из выпадающего списка «Шаблон» устанавливается минутный режим запуска команды;
- [Да] — устанавливается новая задача в расписании, в таблице появляется соответствующая запись, и окно закрывается;
- [Отмена] — новая задача не устанавливается, окно закрывается;
- [Да] — выделенные задачи удаляются из расписания, и окно закрывается;
- [Нет] — окно закрывается;
- [Да] — окно закрывается, и команда начинает выполняться;
- [Нет] — окно закрывается.
Кнопки сопровождения
Кнопки сопровождения располагаются справа от панели «Запланированные задачи» (см. рис. 1) и повторяют аналогичные пункты контекстного меню (см. Контекстное меню): [Новая задача. ], [Правка. ], [Удалить], [Запустить сейчас]; [Печать. ] — открывает диалоговое окно «Печать» (Окно «Печать»).
Окно «Печать»
В окне «Печать» (рис. 3) устанавливаются параметры и выполняется печать на устройстве или запись в файл (в формате PDF) расписания задач и переменных окружения, отображаемых на панелях «Запланированные задачи» и «Переменные окружения».
- Окно содержит следующие управляющие элементы:
- поле «Принтер»:
- «Название» — в строке из выпадающего списка доступных принтеров устанавливается имя принтера или печать в файл. Ниже, в соответствии с установками описания принтера отображаются его свойства: «Расположение» и «Тип»;
- «Вывод в файл» — в строке ввода или с помощью кнопки вызова диалогового окна [. ] (справа от строки) устанавливается имя файла для записи. Диалоговое окно после подтверждения или отмены установки закрывается, и новое имя файла, соответственно, устанавливается или не устанавливается;
- [Параметры»] — вид окна изменяется (рис. 4): появляются вкладки «Копии» и «Параметры», а сама кнопка заменяется на кнопку [Параметры«], которой выполняется возвращение окна к прежнему виду.
- «Копии»:
- поле «Диапазон печати» — кнопками-переключателями «Все», «Страницы» устанавливается печать либо всего документа, либо страниц в диапазоне номеров: «с» — начало диапазона, «по» — конец диапазона. «Список страниц» — из списка устанавливается вариант отбора страниц;
- поле «Настройки вывода» — в числовом поле «Количество копий» устанавливается количество копий. Флаг «Обратный порядок» устанавливает печать страниц документа в обратном порядке;
- «Параметры» (рис. 5):
- поле «Двусторонняя печать» — кнопками-переключателями «Нет», «По длинной стороне», «По короткой стороне» устанавливается, соответственно, односторонняя печать, оборотная печать c книжной ориентацией страницы и оборотная печать с альбомной ориентацией страницы;
- поле «Режим цвета» — кнопками-переключателями «Цвет», «Оттенки серого» устанавливается, соответственно, цветная и полутоновая (оттенки серого) печать;
- «Копии»:
- [Печать] — выполняется печать или запись в файл, и окно закрывается;
- [Отмена] — окно закрывается.
Панель «Переменные окружения»
- На панели «Переменные окружения» (см. рис. 1) в табличном виде отображается перечень переменных окружения, установленных для всех задач расписания:
- «Переменная» — имя переменной;
- «Значение» — значение переменной;
- «Состояние» — разрешение или запрет установки переменной;
- «Комментарий» — сопроводительный текст.
Щелчком левой кнопки мыши на строке таблицы она (переменная) выделяется. Несколько строк (переменных) выделяются щелчком левой кнопки мыши на каждой строке при удержании клавиши .
Контекстное меню
- Щелчком правой кнопки мыши на панели «Переменные окружения» открывается контекстное меню:
- «Новая переменная. » — открывается окно «Новая переменная» (рис. 6):
- «Переменная» — в строке ввода или из выпадающего списка устанавливается переменная окружения. Переменные в списке:
- DISPLAY — номер дисплея, на котором запускается графическая оболочка ОС;
- LANG — локаль, с которой выполняется задача;
- PATH — каталоги поиска программ;
- HOME — домашний каталог пользователя;
- MAILTO — имя пользователя, которому будет отправлено письмо, содержащее отчет о запуске задачи;
- SHELL — интерпретатор команд, внутри которого будет запущена назначенная задача;
- LD_CONGIG_PATH — дополнительные (помимо системных) каталоги поиска разделяемых библиотек;
- «Значение» — устанавливается значение переменной;
- «Комментарий» — задается сопроводительный текст;
- флаг «Переменная разрешена» — устанавливает разрешение или запрет установки значения переменной;
- [Да] — устанавливается значение новой переменной, и окно закрывается;
- [Отмена] — значение новой переменной не устанавливается, окно закрывается;
- [Да] — выделенные переменные удаляются из списка переменных окружения, из таблицы удаляются выделенные строки, и окно закрывается;
- [Нет] — окно закрывается.
Кнопки сопровождения
Кнопки сопровождения располагаются справа от панели «Переменные окружения» (см. рис. 1) и повторяют аналогичные пункты контекстного меню (см. Контекстное меню): [Новая переменная. ], [Правка. ], [Удалить].
Источник
Принцип работы планировщика задач в Linux
Планирование – это процесс распределения ресурсов системы для выполнения задач. В статье мы рассмотрим его вариант, в котором ресурсом является одно или несколько ядер процессора, а задачи представлены потоками или процессами, которые нужно выполнить.
Само планирование осуществляется планировщиком, который нацелен:
- Максимизировать пропускную способность, то есть количество задач, выполняемых за единицу времени.
- Минимизировать время ожидания, то есть время, прошедшее с момента готовности процесса до начала его выполнения.
- Минимизировать время ответа, то есть время, прошедшее с момента готовности процесса до завершения его выполнения.
- Максимизировать равнодоступность, то есть справедливое распределение ресурсов между задачами.
Если с этими метриками вы не знакомы, то предлагаю просмотреть несколько примеров в другой моей статье (англ.), посвященной алгоритмам планировщика.
Типы процессов в Linux
В Linux процессы делятся на два типа:
- Процессы реального времени.
- Условные процессы.
Процессы реального времени должны вписываться в границы времени ответа, независимо от загрузки системы. Иначе говоря, такие процессы являются срочными и ни при каких условиях не откладываются.
В качестве примера можно привести процесс переноса, отвечающий за распределение рабочей нагрузки между ядрами ЦПУ.
Условные же процессы не ограничиваются строгими рамками времени ответа и в случае занятости системы могут подвергаться задержкам.
В пример можно привести процесс браузера, который позволяет вам читать эту статью.
У каждого типа процессов есть свой алгоритм планирования. При этом пока есть готовые к выполнению процессы реального времени, выполняться будут они, оставляя условные процессы в ожидании.
Планирование в реальном времени
В случае с планированием в реальном времени используются две политики, SCHED_RR и SCHED_FIFO .
Политика определяет количество выделяемого процессу времени, а также принцип организации очереди на выполнение.
Суть в том, что готовые к выполнению процессы хранятся в очереди, откуда выбираются планировщиком на основе той или иной политики.
SCHED_FIFO
В данной политике планировщик выбирает процесс, ориентируясь на время его поступления (FIFO = первым вошел, первым вышел).
Процесс с политикой планирования SCHED_FIFO может «освободить» ЦПУ в нескольких случаях:
- Процесс ожидает, к примеру, операции ввода/вывода, после чего по возвращению в состояние «готов» помещается в конец очереди.
- Процесс уступил ЦПУ через системный вызов sched_yield , после чего он тут же возвращается в конец очереди.
SCHED_RR
SCHED_RR подразумевает циклическое планирование.
В этой политике каждый процесс в очереди получает интервал времени (квант) и выполняется в свою очередь (исходя из приоритета) по циклическому принципу.
Для лучшего понимания рассмотрим пример, где в очереди находятся три процесса, A B C , все из которых работают по политике SCHED_RR .
Как показано ниже, каждый процесс получает квант времени и выполняется в свою очередь. После однократного выполнения всех процессов они повторяются в той же последовательности.
Обобщение по планированию в реальном времени
Процесс реального времени может планироваться по двум разным политикам, SCHED_FIFO и SCHED_RR .
Политика влияет на принцип работы очереди и определяет, сколько времени нужно выделить тому или иному процессу.
Условное планирование
Здесь мы знакомимся с Completely Fair Scheduler (CFS, абсолютно справедливый планировщик), представляющим алгоритм планирования условных процессов, появившийся в версии Linux 2.6.23.
Помните метрики планирования, которые мы затронули в начале статьи? Так вот CFS фокусируется на одной из них – он стремится к максимальной равноправности процессов, то есть обеспечивает выделение всем процессам равных квантов времени ЦПУ.
Обратите внимание, что процессы с повышенным приоритетом все равно могут получать на обработку больше времени.
Для лучшего понимания принципа работы CFS нужно познакомиться с новым термином – виртуальное время выполнения ( vruntime ).
Виртуальное время выполнения
Виртуальное время выполнения процесса – это количество времени, потраченного именно на выполнение, без учета любых ожиданий.
Как было сказано, CFS стремится быть максимально справедливым, в связи с чем по очереди планирует готовый к выполнению процесс с минимальным виртуальным временем.
CFS задействует переменные, содержащие максимальное и минимальное виртуальное время выполнения, и чуть позже станет ясно зачем.
CFS —Абсолютно справедливый планировщик
Прежде чем перейти к принципу работы этого алгоритма, нужно понять, какие структуры данных он использует.
CFS задействует красно-черное дерево, представляющее бинарное дерево поиска – то есть добавление, удаление и поиск выполняются за O(logN) , где N выражает количество процессов.
Ключом в этом дереве выступает виртуальное время выполнения процесса. Новые процессы или процесс, возвращающиеся из ожидания в состояние готовности, добавляются в дерево с ключом vruntime = min_vruntime . Это очень важный момент, который позволяет избежать дефицита внимания ЦПУ для старых процессов.
Вернемся к самому алгоритму. В первую очередь он устанавливает себе лимит времени – sched_latency .
В течение этого времени алгоритм стремится выполнить все готовые процессы – N . Это означает, что каждый процесс получит интервал времени равный временному лимиту, поделенному на количество процессов: Qi = sched_latency/N .
Когда процесс исчерпывает свой интервал ( Qi ), алгоритм выбирает в дереве следующий процесс с наименьшим виртуальным временем.
Рассмотрим ситуацию, которая может стать проблематичной для такой схемы работы алгоритма.
Предположим, что алгоритм выбрал лимит времени 48мс при наличии 6 процессов – в этом случае каждый процесс получит на выполнение по 8мс.
Но что произойдет, если система окажется перегружена процессами? Предположим, что лимит времени остается равен 48мс, но теперь у нас 32 процесса. В результате каждый получит уже всего по 1.5мс на выполнение, что приведет к замедлению работы всей системы.
Почему?
Все дело в переключении контекста, которое подразумевает сохранение состояния процесса или потока с последующим его восстановлением и продолжением выполнения.
Каждый раз, когда процесс исчерпывает свое время на выполнение, и планируется очередной процесс, активируется переключение контекста, которое также занимает некоторое время.
Предположим, что на него уходит 1мс. В первом примере, где каждому процессу у нас отводилось по 8мс, это вполне допустимо. Так мы тратим 1мс на переключение контекста и 7мс на фактическое выполнение процесса.
А вот во втором примере на выполнение каждого процесса останется уже всего по 0.5мс – то есть большая часть времени уходит на переключение контекста, отсюда и проблема с выполнением.
Для того, чтобы исправить ситуацию, мы вводим новую переменную, которая определит минимальную протяженность кванта времени выполнения – min_granularity .
Представим, что min_granularity = 6мс , и вернемся к нашему примеру, где лимит времени равен 48мс при наличии 32 процессов.
С помощью той же формулы, что и прежде, мы получаем по 1.5мс на каждый процесс, но теперь такой вариант не допускается, так как min_granularity задает минимальный квант времени, который должен получить каждый процесс.
В данном случае, где Qi , мы берем Qi равным min_granularity , то есть 6мс, и соответствующим образом изменяем временной лимит. В результате он составит Qi x N = 6мс x 32 = 192мс .
На данный момент отличия между CFS и RR могут оказаться недостаточно наглядны, поскольку они оба определяют временные интервалы и организуют порядок выполнения процессов. Для лучшего обобщения и понимания различий между этими алгоритмами я приведу краткую таблицу:
RR – циклический список | CFS – абсолютно справедливый планировщик |
|
|
|
|
Надеюсь, что статься помогла вам лучше понять реализацию планирования задач в ядре Linux.
Прошу обратить внимание, что автор оригинальной статьи Eliran поблагодарил читателей за интерес и отдельно пригласил желающих со знанием английского языка в свой блог Coding Kaiser для ознакомления с множеством материалов по смежным и другим интересным темам, а также обмена идеями.
Источник