Насколько мне известно, все операционные системы имеют "очередь печати", которая, по-видимому, буферизует распечатанные документы на принтер в том порядке, в котором они были запрошены.
"Очередь печати" - это видимая часть службы / демона принтера, которая изначально была программой SPOOL (для одновременных периферийных операций в режиме онлайн), например, для операционной системы HASP / OS360, работающей на мейнфреймах IBM 360. (IMO SPOOL - одна из лучших аббревиатур, придуманных, потому что это также английское слово (существительное и глагол), которое можно использовать в качестве аналогии для описания работы службы принтера.)
Перед сетевыми принтерами я бы предположил, что реальный принтер посылал данные почти построчно с подключенного компьютера.
Правда, не нужно "почти".
Теперь с сетевыми принтерами эта воображаемая модель разваливается. Я предполагаю, что современные принтеры просто получают постскриптум (или другой формат печати) из ОС, сохраняют его в памяти и печатают из него.
"Линейные принтеры" или "тупые" принтеры, которые принимают только простой текст, по сути устарели, поскольку были заменены "строчными принтерами", которые принимают ввод на языке описания страниц определенного типа (например, Postscript, PCL). Поскольку на принтер необходимо отправить больше данных, чем просто текст страницы, то есть полную страницу в форме PDL, старые интерфейсы, такие как параллельный порт Centronics и последовательный порт RS-232, были заменены на USB и Ethernet (проводной и беспроводной).
Обратите внимание, что наличие интерфейса Ethernet и называние его "сетевой принтер" не означает, что он может работать как сетевой "сервер печати". "Сетевой принтер", настроенный в режиме «peer-to-peer», фактически требует, чтобы "драйвер принтера" был установлен на каждом ПК, который хочет использовать этот принтер. Этот "сетевой принтер" затем фактически устанавливается как локальный принтер для ПК, но согласовывает и использует этот принтер через сетевое соединение. Задания на печать на "сетевом принтере" должны храниться в локальной очереди, как и задания на других локальных принтерах.
Страничные принтеры отправляют не весь документ (как вы себе представляли), а "страницу" за раз. Конечно, "страница" будет в форме PDL и может быть разбита на строки и пакеты, в зависимости от среды передачи. Так как это принтеры страниц, а не серверы принтеров, здесь нет запоминающего устройства (то есть жесткого диска), и они должны хранить каждую "страницу" в локальной памяти до тех пор, пока она не будет напечатана. Протокол "управления потоком" (также называемый квитированием) должен был использоваться ПК для передачи фрагмента страницы или страницы, когда на принтере доступно больше памяти.
Вопрос в том, что означает очередь печати ОС, если принтер может принимать несколько документов?
Если у вас действительно нет сервера печати с большим объемом памяти (например, жесткого диска), "сетевой принтер" действительно не сможет принять полный или несколько документов, если они все не достаточно малы для размещения в оперативной памяти принтера. Очередь печати на ПК должна использоваться для заказа и хранения ожидающих заданий на печать, исходящих с ПК. Каждый компьютер в сети, использующий этот "сетевой принтер", должен бороться за этот общий принтер. "Сетевой принтер" может поддерживать собственную очередь запросов заданий со всех ПК или, по крайней мере, с каких ПК запрашивает обслуживание. Обратите внимание, что он будет знать только запросы и не будет хранить никаких данных страницы (которые все еще находятся на каждом ПК), пока принтер не будет готов начать эту работу.
Если у вас действительно есть сервер печати, то локальная очередь является лишь промежуточным этапом, прежде чем задание на печать попадает в очередь на сервере печати.
Очередь печати ОС ничего не показывает нам о том, что печатают другие машины, потому что это локальный буфер. Так что это должно означать, что принтер имеет встроенную очередь, верно? Так почему же у нас даже есть очереди на печать, если мы не видим, что еще печатается?
Надеемся, что у принтера есть очередь запросов для заказа, чтобы поддерживать список заданий в порядке поступления. В противном случае один ПК может быть вытеснен другими ПК. Вам по-прежнему нужна локальная очередь, потому что именно так вы по-прежнему отправляете задания на печать на локальном ПК. Если у вас нет реального сетевого сервера печати с большим хранилищем для хранения задания на печать, ваше задание на печать будет находиться на локальном ПК, пока его не удастся переместить. Обратитесь к производителю принтера (или сервера) за сетевым приложением или средством просмотра, чтобы запросить очередь / состояние принтера (или сервера).
Как принтеры печатают документы с нескольких машин, если каждая машина не знает, что другие тоже печатают?
Это распространенная проблема распределения ресурсов в информатике: несколько пользователей / потребителей борются за один ресурс. В этом случае (что не вызывает сложностей) принтер или сервер могут получать каждый запрос, а затем расставлять приоритеты в некотором порядке. Контроль потока гарантирует, что принтер не перегружен. Другим возможным решением (которое упрощает рабочую нагрузку на принтер) будет схема передачи токенов. ПК, получивший "токен", может использовать принтер для одного задания. После того, как это одно задание было напечатано, этот ПК должен передать токен другому ПК, у которого в очереди есть задания.