SPOOL
SPOOL (от англ. spool — катушка, шпулька) — технология организации вывода данных на периферийные устройства (принтеры, плоттеры) в многозадачных операционных системах, при которой данные временно сохраняются на промежуточном носителе (обычно на жёстком диске) в виде очереди заданий, а затем последовательно передаются на устройство по мере его готовности. Также термин обозначает саму очередь заданий на печать или файл, содержащий подготовленные для вывода данные.
История
Истоки технологии SPOOL восходят к первым мейнфреймам 1950-х годов, когда скорость работы процессора значительно превышала скорость работы периферийных устройств, особенно принтеров. В ранних системах программа, инициировавшая печать, блокировалась до завершения вывода, что приводило к неэффективному использованию вычислительных ресурсов. Решением стало использование промежуточного накопителя — сначала магнитной ленты, затем диска.
Одной из первых реализаций SPOOL стала система IBM OS/360 (1964 год), где был введён компонент JES (Job Entry Subsystem), управлявший очередями ввода-вывода. В 1970-х годах технология была адаптирована для UNIX-подобных систем (команда lpd — line printer daemon). С появлением персональных компьютеров в 1980-х годах SPOOL стал стандартным компонентом операционных систем: в MS-DOS он реализовывался через драйвер PRINT, в Windows — через диспетчер очереди печати (Print Spooler).
Принцип работы
Технология SPOOL основана на асинхронной передаче данных. Процесс включает несколько этапов:
- Формирование задания — приложение (например, текстовый редактор) отправляет данные на печать через системный вызов. Операционная система перехватывает этот запрос.
- Буферизация — данные преобразуются в формат, понятный устройству (например, PostScript, PCL, XPS), и сохраняются в виде временного файла (spool-файла) на диске. Обычно файл помещается в специальную директорию (в Windows —
%SystemRoot%\System32\spool\PRINTERS, в Linux —/var/spool/cups). - Постановка в очередь — задание регистрируется в очереди печати с присвоением уникального идентификатора, указанием приоритета, имени пользователя и времени создания.
- Вывод на устройство — фоновый процесс (демон или служба) последовательно извлекает задания из очереди, передаёт их на устройство через порт (LPT, USB, сетевой интерфейс) и контролирует успешность завершения.
- Освобождение ресурсов — после завершения печати spool-файл удаляется, и задание исключается из очереди.
При этом приложение, инициировавшее печать, может завершить работу сразу после записи данных в spool-файл, не дожидаясь фактического вывода.
Преимущества и недостатки
Преимущества
- Освобождение процессора — приложение не блокируется на время печати, что повышает общую производительность системы.
- Многопользовательская работа — несколько пользователей могут одновременно отправлять задания на одно устройство; SPOOL автоматически упорядочивает их.
- Возобновление после сбоев — при временном отключении устройства (например, закончилась бумага) задания остаются в очереди и печатаются после устранения проблемы.
- Приоритизация — администратор может задать порядок обработки заданий (например, срочные документы печатаются вне очереди).
Недостатки
- Потребление дискового пространства — spool-файлы могут занимать значительный объём, особенно при печати графики или больших документов.
- Задержка начала вывода — первое задание появляется на принтере только после полной записи spool-файла (хотя в современных системах поддерживается постраничная передача).
- Уязвимость к сбоям — повреждение spool-файла или сбой службы SPOOL может привести к потере всех заданий в очереди.
Реализации в операционных системах
Windows
В операционных системах семейства Windows диспетчер очереди печати реализован как служба Spooler (исполняемый файл spoolsv.exe). Управление очередью осуществляется через графический интерфейс (Панель управления → Устройства и принтеры) или командную строку (команды net stop spooler, net start spooler, print). В случае сбоя службы (например, при переполнении папки spool) печать становится невозможной до перезапуска службы или очистки очереди.
Linux и UNIX
В Linux и других UNIX-подобных системах наиболее распространённой реализацией SPOOL является CUPS (Common UNIX Printing System). Демон cupsd управляет очередями, хранящимися в каталоге /var/spool/cups. Для управления используются команды lp (отправка задания), lpq (просмотр очереди), lprm (удаление задания). CUPS поддерживает сетевые протоколы IPP, SMB и LPD.
macOS
В macOS также используется CUPS, но с графической надстройкой в системных настройках. Очереди печати хранятся в /var/spool/cups, а для управления доступен интерфейс командной строки, аналогичный Linux.
Применение за пределами печати
Хотя термин SPOOL традиционно ассоциируется с печатью, аналогичный механизм используется в других областях:
- Ввод данных — в ранних мейнфреймах SPOOL применялся для организации ввода с перфокарт и магнитных лент (например, компонент Reader/Interpreter в OS/360).
- Электронная почта — почтовые серверы сохраняют входящие сообщения в очереди (spool-директории) перед доставкой получателю.
- Обработка заданий — в системах пакетной обработки (batch processing) SPOOL используется для организации очередей задач, выполняемых без участия пользователя.
Интересные факты
- В ранних версиях Windows (до Windows 95) SPOOL-файлы имели расширение
.splи хранились в формате, специфичном для конкретной модели принтера. - В 2021 году в службе SPOOL Windows была обнаружена критическая уязвимость PrintNightmare (CVE-2021-34527), позволявшая удалённо выполнять код с правами системы. Уязвимость затронула все версии Windows, начиная с Windows 7, и потребовала экстренного выпуска обновлений безопасности.
- В некоторых UNIX-системах (например, BSD) до внедрения CUPS использовался демон
lpd, который мог передавать задания на удалённые принтеры по протоколу LPR/LPD, что фактически являлось сетевым расширением SPOOL.
Источники
- Таненбаум Э., Бос Х. «Современные операционные системы» (4-е издание, 2015).
- IBM Corporation. «IBM System/360 Operating System: Job Control Language Reference» (1967).
- RFC 1179 — «Line Printer Daemon Protocol» (1990).
- Документация Microsoft Windows: «Print Spooler Service» (TechNet).
- OpenPrinting. «CUPS Software Administration Manual» (2023).
BFOmetr — база данных и аналитика по компаниям России.
На главную BFOmetr →