Открыть сервис

Долгосрочный планировщик

Долгосрочный планировщик (англ. long-term scheduler, job scheduler) — это компонент операционной системы, отвечающий за выбор процессов из очереди заданий (пакетных или интерактивных) и перевод их в состояние готовности для выполнения. В отличие от краткосрочного планировщика (диспетчера), который решает, какой процесс получит процессор в следующий момент, долгосрочный планировщик управляет степенью мультипрограммирования — количеством процессов, одновременно находящихся в оперативной памяти. Он решает, какие задания будут допущены в систему, и тем самым влияет на общую загрузку ресурсов и производительность.

История

Концепция долгосрочного планирования возникла в ранних операционных системах с пакетной обработкой данных (batch processing) в 1950–1960-х годах. В таких системах, как OS/360 (IBM), задания вводились в виде колоды перфокарт или магнитных лент, и планировщик выбирал их для выполнения в зависимости от доступных ресурсов (память, процессорное время, устройства ввода-вывода). С развитием интерактивных систем и разделения времени (time-sharing) в 1970-х годах роль долгосрочного планировщика частично снизилась, так как пользователи запускали процессы напрямую. Однако в современных многозадачных ОС (Linux, Windows, macOS) долгосрочное планирование сохраняется в виде механизмов управления загрузкой, например, через контроль создания новых процессов или ограничения на количество одновременно работающих пользователей.

Функции и задачи

Долгосрочный планировщик выполняет несколько ключевых функций:

  • Контроль степени мультипрограммирования: Определяет, сколько процессов может находиться в памяти одновременно. Слишком малое число процессов приводит к недогрузке процессора, а слишком большое — к чрезмерным накладным расходам на переключение контекста и нехватке памяти.
  • Балансировка нагрузки: Учитывает типы заданий (процессороёмкие, ввод-вывод-интенсивные) и старается поддерживать смесь, оптимальную для текущей конфигурации системы.
  • Управление очередью заданий: Принимает решения о принятии новых заданий из внешней очереди (например, из файла, с терминала или по сети) на основе приоритетов, времени ожидания, требований к ресурсам.
  • Ограничение доступа: В многопользовательских системах может предотвращать запуск процессов, если пользователь превысил квоты (например, по памяти или процессорному времени).

Отличие от других планировщиков

В операционных системах выделяют три типа планировщиков, различающихся по частоте срабатывания и решаемым задачам:

Тип планировщикаЧастота срабатыванияОсновная задача
Долгосрочный (job scheduler)Низкая (секунды, минуты, часы)Выбор заданий для загрузки в память и перевода в состояние готовности
Среднесрочный (medium-term scheduler)Средняя (миллисекунды, секунды)Временное вытеснение процессов из памяти (свопинг) для освобождения ресурсов
Краткосрочный (CPU scheduler, dispatcher)Высокая (микросекунды, миллисекунды)Выбор процесса, который получит процессор в следующий момент

Долгосрочный планировщик работает реже всего, так как его действия связаны с изменением набора процессов в системе. Он может быть реализован как отдельный процесс (демон) или встроен в ядро ОС.

Реализация в различных операционных системах

Unix и Linux

В классических системах Unix долгосрочный планировщик был реализован через демон init, который запускал процессы по командам из /etc/rc или cron. В современных дистрибутивах Linux его роль частично выполняют systemd (управление службами) и cgroups (контрольные группы), которые ограничивают количество процессов и ресурсов для пользователей или контейнеров. Однако в Linux нет явного долгосрочного планировщика в ядре — вместо этого используется механизм fork() и exec(), а ядро лишь проверяет лимиты (например, RLIMIT_NPROC).

Windows

В Windows (NT-ядро) долгосрочное планирование реализовано через диспетчер заданий (Task Scheduler) и подсистему управления процессами (Process Manager). Система может ограничивать количество одновременно работающих процессов для одного пользователя (через групповые политики или API). В серверных версиях Windows используется механизм Job Objects, позволяющий устанавливать квоты на число процессов, память и процессорное время для группы процессов.

Мэйнфреймы и пакетные системы

В системах для мэйнфреймов (z/OS, MVS) долгосрочный планировщик является центральным компонентом. Он управляет очередью заданий (JESJob Entry Subsystem), анализирует их требования (объём памяти, устройства, приоритет) и принимает решения о запуске. В таких системах планировщик может учитывать не только текущую загрузку, но и прогнозируемое время выполнения.

Критика и ограничения

Долгосрочный планировщик имеет ряд недостатков:

  • Неэффективность в интерактивных системах: В современных ОС с графическим интерфейсом пользователи ожидают немедленного запуска программ, а не ожидания в очереди. Поэтому долгосрочное планирование часто сводится к простой проверке лимитов.
  • Сложность прогнозирования: Точная оценка времени выполнения и требований к ресурсам для каждого задания затруднена, особенно в многозадачных средах с неизвестной нагрузкой.
  • Избыточность в облачных средах: В виртуализированных и контейнерных системах (Kubernetes, Docker) управление нагрузкой осуществляется на уровне оркестрации, а не на уровне ОС. Долгосрочный планировщик ядра может быть отключён или не использоваться.

Современное состояние

В современных операционных системах общего назначения (Windows, Linux, macOS) долгосрочный планировщик в явном виде часто отсутствует или выполняет минимальные функции. Его роль перешла к:

  • Демонам инициализации (systemd, launchd) — управление запуском служб и процессов при загрузке.
  • Контрольным группам (cgroups) — ограничение ресурсов для групп процессов.
  • Оркестраторам (Kubernetes, Slurm) — планирование заданий в кластерных и облачных средах.

Тем не менее, в пакетных системах, суперкомпьютерах и мэйнфреймах долгосрочный планировщик остаётся ключевым компонентом, обеспечивающим эффективное использование ресурсов.

Интересные факты

  • В некоторых ранних ОС (например, CTSS) долгосрочный планировщик мог задерживать выполнение заданий на несколько часов, если система была перегружена.
  • В ОС семейства Unix долгосрочный планировщик часто реализован как пользовательский процесс (демон), а не часть ядра, что упрощает его модификацию.
  • В суперкомпьютерных системах (например, SLURM) долгосрочный планировщик управляет распределением узлов и процессоров между заданиями, что может занимать минуты или часы.

Источники

  • Таненбаум Э. Современные операционные системы. 4-е изд. — СПб.: Питер, 2015.
  • Silberschatz A., Galvin P. B., Gagne G. Operating System Concepts. 10th ed. — Wiley, 2018.
  • Документация Linux kernel: Scheduling and Process Management (kernel.org).
  • Microsoft Docs: Job Objects, Process and Thread Functions (learn.microsoft.com).

BFOmetr — база данных и аналитика по компаниям России.

На главную BFOmetr →