Теоретичні основи друку в системі windows

Щоб зрозуміти роль принт-серверів в процесі «уречевлення байтів», класифікувати продукти цій галузі і описати можливі проблеми, необхідно вивчити процес друку в найбільш популярної операційної системи, під яку заточені багато моделей принтерів - Microsoft Windows. Принципова схема взаємодії компонентів представлена ​​на рис. 1.

Мал. 1. Технологія друку в ОС Windows

Теоретичні основи друку в системі windows

З точки зору звичайних програм, всі графічні пристрої, що монітори, що принтери, представляються віртуальними полотнами, на яких програма може малювати будь-які документи за допомогою універсальних команд. Додатки безпосередньо з драйверами не контактують, їх завдання обмежується діалогом вибору принтера і викликом діалогу налаштувань друку.

Отримавши від програми послідовність графічних команд, підсистема GDI (Graphics Device Interface, «програмний інтерфейс для роботи з графічними пристроями») пропускає їх через драйвер, щоб отримати іншу послідовність команд - вже специфічних для обраного принтера. Найчастіше, на цьому етапі драйвер видає повністю готовий для друку потік даних, але в загальному випадку досить отримати проміжний метафайл - тоді, якщо принтер вимагає растрирования на комп'ютері, це растрирование може бути виконано не на комп'ютері клієнта, а на тому, до якого підключений принтер, тобто на сервері друку.

GDI: невеликий ліричний відступ

Але зазвичай під «GDI-принтером» або «Windows-принтером» розуміють host-based друк, коли принтер являє собою спрощений апарат, що не володіє власними здібностями по розмітці сторінок, квіткоділенню і растрування, і вимагає готові дані з комп'ютера: «тут постав точку , а тут не треба ». Бувають і гібридні пристрої, як PCL3GUI, де макетування здійснюється на комп'ютері, а растрирование виконує вже сам принтер. Грубо кажучи, провести межу між host-based принтерами і всіма іншими GDI-принтерами, можна за ознакою, чи вміє даний пристрій приймати шрифти в векторній формі або вимагає растр.

Далі завдання потрапляє в чергу друку, що відповідає обраному принтеру. Диспетчер черг (спулер) зберігає тимчасову копію завдання на диск, щоб звільнити оперативну пам'ять і зменшити залежність від збоїв. Трансформоване слово spool в українській мові пишеться як «котушка»: спулер і справді нагадує цю котушку в швейній машині - спочатку наметовому на нього нитку (зберігаємо завдання), а потім вона розмотується при шиття (дані йдуть на друк).

Готове завдання на рідній мові принтера можна вже і друкувати. Для відправки завдання на принтер використовуються монітори друку. Термін «монітор друку» не має нічого спільного з моніторами стану - фірмовими утилітами деяких виробників, що відображають на екрані хід роботи. Монітор друку - це своєрідний драйвер протоколу друку, який дозволяє відправити завдання на принтер з того чи іншого інтерфейсу (але не драйвер цього інтерфейсу). Монітори друку поділяються на мовні монітори і монітори портів. Мовні монітори здійснюють двосторонній діалог з принтером, застосовуючи, наприклад, підмножина команд мови PJL, що відповідає за отримання інформації про поточний стан пристрою: готовність, застрягання паперу, рівень чорнила і т. П. Замість PJL, який реалізований в стандартній бібліотеці функцій, можуть застосовуватися та інші мови. Монітори портів просто регулюють передачу інформації через порт принтера, посилаючи порції даних по сигналу готовності до їх прийому. Призначення портів здійснюється на однойменній вкладці у властивостях принтера. За наявності кількох однакових друкуючих пристроїв, їх можна об'єднати в групу (пул. Від англ. Pool - «об'єднання»), яка буде діяти як єдиний об'єкт, розподіляючи завдання між принтерами. Принтери однієї групи повинні знаходитися в одному приміщенні, тому що заздалегідь не можна передбачити, яким саме дістанеться ваш документ.

Як і самі принтери, порти теж бувають місцевими (локальними) і мережевими (точніше, віддаленими - remote). До місцевих портів відносяться тільки паралельний LPT і послідовний COM, які обслуговуються стандартним монітором локальних портів. Мережеві порти представляють собою обгортки для спеціалізованих протоколів мережевого друку, таких як LPD. Власне, ось тут і вступають в дію ті пристрої, які зараз стало прийнятим називати серверами друку (print-server appliance), але вони суть звичайні мережеві адаптери принтерів. Деякі з них більш функціональні, інші інакше як конвертерами «USB-Ethernet» назвати важко. Вони теж є комп'ютерами в мініатюрі і дозволяють друкувати по мережі - просто реалізують не всі функції справжнього сервера друку. Більш того, при наявності належних знань, можна самостійно сконструювати такий принт-сервер зі старого комп'ютера і операційної системи типу Linux.

Вибір моделі взаємодії

Як вже говорилося, використовуючи замість справжнього комп'ютерного сервера друку компактний пристрій без жорсткого диска і з невеликим об'ємом пам'яті, не можна розраховувати на буферизацію великих завдань або растрирование на стороні сервера. Якщо потрібні такі функції, слід відмовитися від однорангового режиму (peer-to-peer, p2p), при якому клієнти безпосередньо звертаються до принт-серверу, вважаючи його мережевим портом для свого локального принтера (рис. 2а).

Мал. 2. Якщо Ви вибрали тимчасовий взаємодія і архітектура «клієнт-сервер»

Теоретичні основи друку в системі windows

Необхідно перейти до моделі клієнт-сервер, де принтер з точки зору робочих станцій є віддаленим. і лише для самого сервера - локальним (рис. 2б). Тут виділений комп'ютер виступає в ролі сервера друку для клієнтів і є єдиним, хто безпосередньо звертається до зовнішнього сервера друку відповідного принтера. При цьому той сервер друку виступає в ролі простого мережевого адаптера, що дозволяє замість інтерфейсів USB або LPT передавати інформацію по локальній мережі з усією її розвиненою інфраструктурою. Тому від такого мережевого адаптера не потрібно якихось особливих «наворотів» - аби був сумісним з комп'ютерним сервером, тому що рівень обслуговування кінцевих клієнтів залежить вже від комп'ютерного сервера.

Родове прокляття Win-принтерів

Так все-таки, чому ж багато бюджетні моделі принтерів, що випускаються зараз на ринок, не працюють з традиційними принт-серверами? Адже вони прекрасно функціонують при безпосередньому підключенні до вашого комп'ютера або при підключенні до іншого комп'ютера і поділу як загальний ресурс. Проблема саме в тому, що принт-сервер не завантажує в принтер потрібну йому керуючу програму. Щоб навчити деякі принт-сервери виконувати подібні трюки, є певні способи, однак вони не для рядового користувача.

Але чому ж зависає драйвер при спробі друку на такий принтер, якщо той підключений через принт-сервер? І чому він не зависає при друку на цей же принтер, якщо його підключати до іншого комп'ютера? А тому що драйвер не зовсім дурний: він намагається завантажити прошивку тільки в локальний принтер. Тобто коли йде друк на локальний принтер, в тому числі сидить на віддаленому (мережному) порту, драйверу необхідно спочатку завантажити в принтер прошивку, перш ніж той зможе приймати дані для друку. Коли принтер мережевий. драйвер на вашому комп'ютері залишає цю задачу драйверу на комп'ютері-сервері, для якого цей принтер є локальним.