
Мне было трудно найти какую-либо фактическую информацию о том, как принтеры на самом деле обрабатывают данные печати.
Насколько мне известно, во всех операционных системах есть «очередь печати», которая, по-видимому, буферизует распечатанные документы на принтере в том порядке, в котором они были запрошены.
До появления сетевых принтеров я бы предположил, что реальный принтер отправлял данные практически построчно с подключенного устройства.
Теперь, с сетевыми принтерами, эта воображаемая модель разваливается. Я предполагаю, что современные принтеры просто получают postscript (или какой-то другой формат печати) doc от ОС, сохраняют его в памяти и печатают с него.
Вопрос в том, что означает очередь печати ОС, если принтер может принимать несколько документов?
Очередь печати ОС не показывает нам ничего из того, что печатают другие машины, потому что это локальный буфер. Так что это должно означать, что у принтера есть встроенная очередь, верно? Так зачем же нам вообще нужны очереди печати, если мы не можем видеть, что еще печатается?
Любая информация о том, как на самом деле работают принтеры в наши дни без последовательных кабелей, была бы полезна, но чтобы сделать этот вопрос обоснованным:
Как принтеры печатают документы с нескольких машин, если каждая машина не знает, что другие тоже печатают?
Как документ передается на принтер?
Какую информацию поддерживает большинство протоколов печати?
Я задаю последний вопрос, потому что, по моему мнению, cannon запрашивает уровень чернил, как будто это задание на печать:
printing: supply levels
Я также слышал о принтерах HP, использующих «поддельные» задания на печать для отправки обновлений прошивки.
решение1
Насколько мне известно, во всех операционных системах есть «очередь печати», которая, по-видимому, буферизует распечатанные документы на принтере в том порядке, в котором они были запрошены.
«Очередь печати» — это видимая часть службы/демона принтера, которая изначально была программой SPOOL (Simultaneous Peripheral Operations On-Line), например, для операционной системы HASP/OS360, работающей на мэйнфреймах IBM 360. (На мой взгляд, SPOOL — одно из лучших придуманных сокращений, поскольку это также английское слово (и существительное, и глагол), которое можно использовать в качестве аналогии для описания работы службы принтера.)
До появления сетевых принтеров я бы предположил, что реальный принтер отправлял данные практически построчно с подключенного устройства.
Да, нет необходимости в «почти».
Теперь, с сетевыми принтерами, эта воображаемая модель разваливается. Я предполагаю, что современные принтеры просто получают postscript (или какой-то другой формат печати) doc от ОС, сохраняют его в памяти и печатают с него.
«Строчные принтеры» или «немые» принтеры, которые принимают только обычный текст, по сути устарели, поскольку их заменили «страничные принтеры», которые принимают ввод в виде некоторого типаязык описания страницы(например, Postscript, PCL). Поскольку на принтер необходимо отправлять больше данных, чем просто текст страницы, то есть полную страницу в формате PDL, старые интерфейсы, такие как параллельный порт «Centronics» и последовательный порт RS-232, были заменены на USB и Ethernet (проводной и беспроводной).
Обратите внимание, что наличие интерфейса Ethernet и его название «сетевой принтер» не означает, что он может работать как сетевой «сервер печати». «Сетевой принтер», настроенный в режиме «одноранговой сети», на самом деле требует установки «драйвера принтера» на каждом ПК, который хочет использовать этот принтер. Этот «сетевой принтер» затем фактически устанавливается как локальный принтер на ПК, но согласовывает и использует этот принтер через сетевое соединение. Задания печати на «сетевой принтер» должны храниться в локальной очереди, как и задания на другие локальные принтеры.
Страничные принтеры не отправляют весь документ (как вы себе представляли), а отправляют "страницу" за раз. Конечно, "страница" будет в форме PDL и может быть разбита на строки и пакеты, в зависимости от среды передачи. Поскольку это страничные принтеры, а не серверы принтеров, нет массового хранилища (т. е. жесткого диска), и приходится хранить каждую "страницу" в локальной памяти, пока она не будет напечатана. Протокол "управления потоком" (он же квитирование) будет использоваться для ПК, чтобы передавать фрагмент страницы или страницу, когда на принтере будет больше памяти.
Вопрос в том, что означает очередь печати ОС, если принтер может принимать несколько документов?
Если у вас действительно нет сервера печати с запоминающим устройством большой емкости (например, жесткого диска), «сетевой принтер» на самом деле не может принять целый или несколько документов, если только они все не достаточно малы, чтобы поместиться в ОЗУ принтера. Очередь печати ПК должна использоваться для упорядочивания и хранения ожидающих заданий печати, исходящих от ПК. Каждый ПК в сети, использующий этот «сетевой принтер», должен бороться за этот общий принтер. «Сетевой принтер» может поддерживать свою собственную очередь запросов на задания от всех ПК или, по крайней мере, какие ПК запрашивают обслуживание. Обратите внимание, что он будет знать только о запросах и не будет хранить никаких данных страниц (которые все еще находятся на каждом ПК), пока принтер не будет готов начать это задание.
Если у вас действительно есть сервер печати, то локальная очередь — это всего лишь промежуточный этап перед тем, как задание на печать попадет в очередь сервера печати.
Очередь печати ОС не показывает нам ничего из того, что печатают другие машины, потому что это локальный буфер. Так что это должно означать, что у принтера есть встроенная очередь, верно? Так зачем же нам вообще нужны очереди печати, если мы не можем видеть, что еще печатается?
Надеюсь, у принтера есть очередь запросов, чтобы поддерживать список заданий в порядке очереди. В противном случае один ПК может быть вытеснен другими ПК. Вам все равно нужна локальная очередь, потому что именно так вы все еще отправляете задания печати на локальный ПК. Если у вас нет настоящего сетевого сервера печати с запоминающим устройством для хранения вашего задания печати, ваше задание печати будет находиться на вашем локальном ПК, пока его не переместят. Обратитесь к производителю принтера (или сервера) за сетевым приложением или средством просмотра для запроса очереди/статуса принтера (или сервера).
Как принтеры печатают документы с нескольких машин, если каждая машина не знает, что другие тоже печатают?
Это распространенная проблема распределения ресурсов в информатике: несколько пользователей/потребителей борются за один ресурс. В этом случае (который не имеет никаких сложностей) принтер или сервер может получать каждый запрос, а затем расставлять их по приоритетам в некотором порядке. Управление потоком гарантирует, что принтер не будет перегружен. Другим возможным решением (которое упрощает рабочую нагрузку на принтер) будет схема передачи маркера. ПК, получивший «маркер», получает право использовать принтер для одного задания. После того, как одно задание будет напечатано, этот ПК должен передать маркер другому ПК, у которого есть задания в очереди.