Теорія операційної системи

:: Меню ::

Головна
Представлення даних в обчислювальних системах
Машинні мови
Завантаження програм
Управління оперативною пам'яттю
Сегментна і сторінкова віртуальна пам'ять
Комп'ютер і зовнішні події
Паралелізм з точки зору програміста
Реалізація багатозадачності на однопроцесорних комп'ютерах  
Зовнішні пристрої
Драйвери зовнішніх пристроїв
Файлові системи
Безпека
Огляд архітектури сучасних ОС

:: Друзі ::

Карта сайту
 

:: Статистика ::

 

 

 

 

 

Спулінг

  Гигабайттебе в спул.
Популярна лайка

Термін спулінг (spooling) не має загальноприйнятого російського аналога. Відповідно до фольклору програміста, слово це походить від абревіатури Simultaneous Peripherial Operation Off-line. Цю фразу важко дослівно перекласти на російську мову; мається на увазі метод роботи із зовнішніми пристроями виводу (рідше — введення) в багатозадачній ОС або багатомашинній середі, при якому завданням створюється ілюзія одночасного доступу до пристрою. При цьому, проте, завдання не отримують до пристрою прямого доступу, а працюють в режимі offline (без прямого підключення). Дані, що виводяться, накопичуються системою, а потім виводяться на пристрій так, щоб виведення різних завдань не змішувалося.
Видно, що цей метод роботи частково нагадує простий відкладений запис, але основне завдання тут не лише і не стільки підвищення продуктивності, скільки розділення доступу до повільного зовнішнього пристрою.
Частіше всього спулінг застосовується для роботи з друкуючими пристроями, а для проміжного зберігання даних використовується диск. Багато поштових систем застосовують механізм, аналогічний спулінгу: якщо одержувач не готовий прийняти лист, або лінія зв'язку з одержувачем зайнята, або взагалі розірвана, призначений до відправки лист поміщається в чергу. Потім, коли з'єднання буде встановлено, лист вирушає.
Класичний спулінг реалізований в ОС сімейства Unix. У цих ОС виведення завдання на друк здійснюється командою lpr. Ця команда копіює призначені для друку дані в каталог /usr/spoo!/lp, можливо, пропускаючи їх при цьому через програму-фільтр. Кожна порція даних збожеволіє в окремий файл. Імена файлів генеруються так, щоб ім'я кожного знов створеного файлу було "більше" попереднього при порівнянні Ascii-колов. За рахунок цього файли утворюють чергу.
Системний процес-демон (daemon) ipd (або lpshed у Unix System V) періодично переглядає каталог. Якщо там щось з'явилося, а друкуючий пристрій вільний, демон копіює файл, що з'явився, на пристрій. Після закінчення копіювання він видаляє файл, тим або іншим способом повідомляє користувача про закінчення операції (у системах сімейства Unix найчастіше використовується електронна пошта) і знов переглядає каталог. Якщо там як і раніше щось є, демон вибирає перший по порядку запит і також копіює його на пристрій.
Той же механізм використовується поштовою системою Unix- програмою sendmail, лише замість каталога /usr/spool/lp використовується /usr/spool/mail.
Цей механізм дуже простий, але має один специфічний недолік: демон не може безпосередньо чекати появи файлів в каталозі, як можна було б чекати установки семафора або іншого прапора синхронізації. Якби демон безперервно сканував каталог, це створювало б дуже велике і даремне навантаження системи. Тому демон прокидається через фіксовані інтервали часу; якщо за цей час нічого в черзі не з'явилося, демон засинає знов. Такий підхід також дуже простий, але збільшує час проходження запитів: запит починає виконуватися не відразу ж після установки, а лише після того, як демон в черговий раз прокинеться.
У Os/2 і Win32 спулінг організований частково схожим чином з тією різницею, що установка запиту в чергу може відбуватися не лише командою PRINT але і простим копіюванням даних на псевдопристрій Lpt[1-9|. На відміну від систем сімейства Unix як програма PRINT так і псевдопристрої портів активізують процес спулінга безпосередньо при установці запиту. Графічні драйвери друкуючих пристроїв в цих системах також використовують спул замість прямого звернення до фізичного порту.
Novell Netware надає спеціальний механізм для організації спулінга — черги запитів. Елементи черги в цьому випадку також зберігаються на диску, але прикладні програми замість перегляду каталога можуть користуватися системними функціями Getnextmessage і Putmessage. Виклик Getnextmessage блокується, якщо черга порожня; таким чином, немає необхідності чекати пробудження демона або спеціальним чином активізувати його — демон сам прокидається при появі запиту. Цікаво, що поштова система Mercury Mail для Novell Netware може використовувати для проміжного зберігання пошти як чергу запитів, так і виділений каталог залежно від конфігурації.

 

:: Реклама ::

 

:: Посилання ::


 

 

 


Copyright © Kivik, 2017