Долгосрочный планировщик¶
Долгосрочный планировщик (англ. 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) долгосрочный планировщик является центральным компонентом. Он управляет очередью заданий (JES — Job 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 →


