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

SPOOL

SPOOL (от англ. spool — катушка, шпулька) — технология организации вывода данных на периферийные устройства (принтеры, плоттеры) в многозадачных операционных системах, при которой данные временно сохраняются на промежуточном носителе (обычно на жёстком диске) в виде очереди заданий, а затем последовательно передаются на устройство по мере его готовности. Также термин обозначает саму очередь заданий на печать или файл, содержащий подготовленные для вывода данные.

История

Истоки технологии SPOOL восходят к первым мейнфреймам 1950-х годов, когда скорость работы процессора значительно превышала скорость работы периферийных устройств, особенно принтеров. В ранних системах программа, инициировавшая печать, блокировалась до завершения вывода, что приводило к неэффективному использованию вычислительных ресурсов. Решением стало использование промежуточного накопителя — сначала магнитной ленты, затем диска.

Одной из первых реализаций SPOOL стала система IBM OS/360 (1964 год), где был введён компонент JES (Job Entry Subsystem), управлявший очередями ввода-вывода. В 1970-х годах технология была адаптирована для UNIX-подобных систем (команда lpdline printer daemon). С появлением персональных компьютеров в 1980-х годах SPOOL стал стандартным компонентом операционных систем: в MS-DOS он реализовывался через драйвер PRINT, в Windows — через диспетчер очереди печати (Print Spooler).

Принцип работы

Технология SPOOL основана на асинхронной передаче данных. Процесс включает несколько этапов:

  1. Формирование задания — приложение (например, текстовый редактор) отправляет данные на печать через системный вызов. Операционная система перехватывает этот запрос.
  2. Буферизация — данные преобразуются в формат, понятный устройству (например, PostScript, PCL, XPS), и сохраняются в виде временного файла (spool-файла) на диске. Обычно файл помещается в специальную директорию (в Windows — %SystemRoot%\System32\spool\PRINTERS, в Linux — /var/spool/cups).
  3. Постановка в очередь — задание регистрируется в очереди печати с присвоением уникального идентификатора, указанием приоритета, имени пользователя и времени создания.
  4. Вывод на устройство — фоновый процесс (демон или служба) последовательно извлекает задания из очереди, передаёт их на устройство через порт (LPT, USB, сетевой интерфейс) и контролирует успешность завершения.
  5. Освобождение ресурсов — после завершения печати 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 →