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

:: Меню ::

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

:: Друзі ::

Карта сайту
 

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

 

 

 

 

 

черная хна для тату купить украина Татуировки: идеи

Багаторівневі драйвери

 

Масивне тіло Сабляк-паши виглядало незвично, немов під шкірою у нього був одяг, а на голові, під скальпом, тюрбан.

М. Павіч

Нерідка ситуація, коли драйвер не може здійснювати управління пристроєм повністю самостійно. Як приклад можна розглянути драйвер стрічкопротяжного пристрою конструктиву -scsi. Для виконання будь-якої операції над пристроєм такий драйвер повинен сформувати команду або послідовність команд SCSI, передати її пристрою, діждатися відповіді і проаналізувати її.
Проблема тут в тому, що передача команди і здобуття відповіді відбуваються за посередництва ще одного пристрою, НВА. НВА можуть бути різнотипними і потребують власних драйверів. Додаткова проблема полягає в тому, що до одного НВА швидше за все підключено декілька пристроїв, і, напевно, більшість з них немає лентопротяжкамі, тому доцільне виділення драйвера НВА в окремий модуль і окрему моніторную нитку.
У системах сімейства Unix драйверами цільових пристроїв SCSI є звичайні символьні або блокові драйвери, з тією лише відзнакою, що вони не управляють своїми пристроями безпосередньо, а формують команди драйверу НВА (мал. 10.1). Команда містить власне команду протоколу SCSI і покажчики на буфери, звідки слід узяти і куди слід покласти дані, передачею яких повинна супроводитися обробка команди. Передавши команду драйверу НВА, драйвер цільового пристрою може або діждатися її завершення, або зайнятися чимось іншим, наприклад обробкою наступного запиту. У другому випадку, після завершення операції НВА, буде викликаний наданий цільовим драйвером callback.

Мал. 10.1. Драйвери цільових пристроїв SCSI і драйвер НВА

Навпаки, драйвер НВА безпосередньо не доступний прикладним програмам (в окремих випадках, втім, дозволяють здійснювати над цим драйвером операції ioctl), а набір функцій цього драйвера відрізняється від символьних і блокових пристроїв. Порядок ініціалізації таких драйверів (функції _init, attach і т. д.) в цілому такий же, як і в звичайних драйверів.
Як правило, драйвер має функцію transport (наприклад, в Solaris ця функція називається tran_start), яка здійснює передачу цільовому пристрою команди, сформованої драйвером цього пристрою. Якщо до завершення відробітку попередньої команди вчинить наступна, драйвер може або покластися на здатність цільового пристрою підтримувати чергу запитів, або, якщо пристрій цей не уміє, реалізувати чергу запитів самостійно.
Крім того, драйвер адаптера проводить первинний аналіз відповідей, що прийшли, на команди: яка з раніше переданих команд відповідає відповідь, чим завершилася операція — успіхом або помилкою, чи прийшли у відповідь дані і якщо прийшли, то скільки саме і куди їх покласти і так далі
Після завершення обробки запиту, драйвер НВА викликає callback драйвера цільового пристрою. Ця callback-процедура може сформувати наступний запит до адаптера (або повторну спробу, якщо операція завершилася відновленою помилкою) або просто оповістити призначений для користувача процес про завершення операції і визволити пам'ять, зайняту структурою запиту і буферами даних.
Аналогічні ситуації виникають і з іншими пристроями. Наприклад, з IBM Рс-совместімимі комп'ютерами можуть працювати три основні типи пристроїв позиційного введення: миші, що використовують протокол обміну, сумісний з Microsoft Mouse, миші з протоколом Logitech, планшети дігитайзери з протоколом Summagraphics. Пристрої всіх цих, а т декількох менш поширених типів можуть під'єднуватися як німум до чотирьох різних периферійних портів: спеціальному "мишачому" роз'єму Ps/2, до послідовної шини USB і до послсюва тільному порту Rs232, причому як порт Rs232, може використовувати ся як один з чотирьох стандартних портів IBM РС, так і, наприклад. один з виходів мультіпортової плати (мал. 10.2).

Мал. 10.2. Різні типи позиційних пристроїв введення

В цьому випадку також доцільно реалізувати чотири самостійні драйвери транспортних портів (тим більше що до цих портів можуть підключатися і інші пристрої) і три драйвери протоколів обміну, здатних працювати з будь-яким транспортним портом. Об'єднання цих драйверів в одному модулі може створити деякі — досить, втім, сумнівні — зручності адміністраторові системи, в якій використовується стандартна комбінація порту і миші, але поставить в безвихідь адміністратора системи, в якій комбінація нестандартна, наприклад, не дозволяючи використовувати мишу, підключену до мультіпортової плати.
У сучасних системах сімейства Unix багатоетапна обробка запитів штатно підтримується потоковими драйверами: система надає спеціальні системні виклики push і popщо дозволяють додавати додаткові драйвери, обслуговуючі потік. Додаткові можуть перетворювати дані потоку (наприклад, символи протоколу миші в координати курсора і натиснення і відпуску кнопок) або обробляти запити ioctl [docs.sun.com 805-7478-10].
Зокрема, в сучасних системах сімейства Unix драйвери термінальних пристроїв повинні уміти обробляти досить обширний набір запитів ioctl і виконувати ряд важливих функцій по управлінню завданнями [Хевіленд/грей/салама 2000]. У монолітних системах ці функції зобов'язаний реалізувати сам драйвер пристрою (хоча ядро і полегшує творцеві драйвера цю роботу, надаючи бібліотеку сервісних функцій — див. [Максвелл 2000]), тоді як в системах, що мають потокові драйвери, драйвер пристрою може обмежитися рішенням своєї власної задачі — забезпеченням обміну даними з пристроєм, а всі складні термінальні сервіси, якщо це необхідно, надаються простим додаванням до потоку драйвера модуля термінальної дисципліни (мал. 10.3).

Мал. 10.3. Модулі STREAMS

Багаторівневі драйвери в Os/2
Розглянемо ще один підхід до організації багаторівневих драйверів на прикладі DMD (Device Manager Driver-драйвер-менеджер класу пристроїв)
у Os/2 [www.ibm.com Os/2 DDK] і досить типовою апаратною конфцп, рації, НВА SCSI, що містить, до якого підключено п'ять пристроїв: жорсткий диск, привід CD-ROM, магнітооптичний диск, лентопротяжка і сканер. rid цьому кожен з пристроїв має свою специфіку, так що управління ними складно звести до спільного набору функцій.
Жорсткий і магнітооптичний диски найбільш схожі між собою, оскільки і те і інше є пристроєм великої ємності з проїзволь' ним доступом, що запам'ятовує. Проте жорсткий діськ— пристрій, що не видаляється, а магнітооп-тічеський носій можна витягувати з приводу, не вимикаючи комп'ютера. Це накладає певні вимоги на стратегію кешування відповідного пристрою і вимагає від драйвера здібності розуміти і обробляти апаратний сигнал про зміну пристрою.
Такий сигнал слід передати модулям управління дисковим кешем і файловою системою, які, у свою чергу, зобов'язані розумно обробити його: як мінімум, дисковий кеш повинен оголосити всі пов'язані з диском буфери неактуальними, а менеджер файлової системи повинен скинути всі свої внутрішні структури даних, пов'язані з видаленим диском, і пояснити всім призначеним для користувача програмам, що працювали з цим диском, що їх дані пропали. Інші аспекти роботи з носіями, що видаляються, обговорюються в разд. Стійкість ФС до збоїв.
CD-ROM, у свою чергу, не можна розглядати як диск, що видаляється, доступний лише для читання: практично все CD-ROM приводи, окрім функції прочитування даних, ще мають функцію програвання музичних компакт-дисків.
Лентопротяжка і сканер взагалі не є пристроями пам'яті прямого доступу, а сканер навіть з найбільшою натяжкою не можна розглядати як пристрій пам'яті.
Коли Os/2 управляє описаною апаратною конфігурацією, виявляються задіяні п'ять DMD (мал. 10.4)
Os2dasd.DMD управляє класом пристроїв прямого доступу, що запам'ятовують, і надає стандартні функції для доступу до дисків.
OPTICAL.DMD забезпечує управління пристроями прямого доступу з носіями, що видаляються. Основне його завдання — обробка апаратного сигналу зміни носія і сповіщення інших модулів системи (дискового кеша, файлової системи) про цю зміну.
Os2cdrom.DMD забезпечує специфічні для приводів CD-ROM функції, наприклад програвання аудізапісей.
Os2scsi.DMD Os2aspi.DMD — ці два модулі будуть описані далі.
Кожен з цих DMD не працює безпосередньо з апаратурою, а транслює запити призначених для користувача програм і інших модулів ядра (в першу чергу, менеджерів файлових систем) в запити до драйвера нижнього рівня. Такий підхід дозволяє винести спільну для класу пристроїв логіку в DMD і не займатися повторною реалізацією цієї логіки в кожному новому драйвері.

Мал. 10.4. Взаємодія між DMD і ADD в Os/2 (як приклад драйвера файлової системи приведений модуль JFS.IFS)

В даному випадку, запити попередніх трьох драйверів виконує четвертий DMD: Os2scsi.DMD. Цей DMD перетворить запити до пристроїв в команди SCSI і передає ці команди драйверу ADD (Adapter Device Driver — драйверу пристрою-адаптера), тобто власне драйверу НВА. Від ADD потрібне лише уміння передавати команди на шину SCSI, обробляти і здійснювати диспетчеризацію відповідей, що прийшли на них, тобто він функціонально аналогічний драйверу НВА в системах сімейства Unix.
П'ятий DMD— Os2aspi.DMD— забезпечує сервіс ASPI (Advanced SCSI Programming Interface — просунутий інтерфейс для програмування SCSI). Він дає можливість прикладним програмам і іншим драйверам формувати довільні команди SCSI і таким чином здійснювати доступ до пристроїв, які не є дисками. Сервісом ASPI користуються драйвери лентопротяжки і сканера [www.ibm.com Os/2 DDK].
При роботі з пристроями Ata/atapi використовується простіша і можливостями структура, що складається з драйвера Ibm1s506.ADD (для неко Я рих типів адаптерів EIDE може знадобитися інший драйвер) і фільт IBMATAPI.FLT. Драйвер забезпечує ініціалізацію адаптера, передачу команд і роботу з жорсткими дисками АТА, а фільтр — формування грудки для тих, що підключаються до того ж адаптеру пристроїв ATAPI (CD-ROM і магнітооптичних дисків).

На практиці драйвери багатьох пристроїв використовуються виключно цц переважно іншими модулями ОС (не обов'язково драйверами), а не призначеними для користувача програмами. Наприклад, драйвери мережевих інтерфейсів взаємодіють практично виключно з модулями ядра, що реалізовують мережеві і транспортні протоколи (безпосередньо з мережевим інтерфейсом працюють хіба що конфігураційні утиліти, а також аналізатори протоколів та інші контрольно-діагностичні засоби), а драйвери жорстких дисків переважно виконують запити файлових систем.
Саме цим і відрізняються блокові пристрої в системах сімейства Unix від символьних: у класичних ОС Unix блокові пристрої взагалі не доступні призначеним для користувача програмам, а всі операції з ними здійснюються за допомогою файлової системи. Це декілька спрощує логіку виконання операцій — драйверу не треба піклуватися про обмін даними з призначеним для користувача адресним простором. Крім того, на відміну від звичайних операцій читання і запису, в яких допустимий обмін пакетами даних довільного розміру, блоковий драйвер передає дані блоками, розмір яких кратний 512 байтам.
На випадок, якщо все-таки знадобиться доступ до диска в обхід файловому системи, драйвер блокового пристрою створює два мінорні записи для пристрою — одну блокову і одну символьну, і все-таки надає звичайні, "символьні" операції читання і запису. На практиці, такий доступ майже завжди потрібний утилітам створення і відновлення файлових систем, тому створення двох записів є обов'язковим.
Радикальніше підійшов до вирішення проблеми розробник Linux Лінус Торвальдс — в цій системі драйвери блокових пристроїв зобов'язані надавати символьні операції читання і запису, але їм не потрібно створювати другий мінорний запис: користувачам дозволено працювати з блоковими пристроями (відкривати, читати їх і писати на них) так само, як і з символьними.

 

:: Реклама ::

 

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


 

 

 


Copyright © Kivik, 2017