6. Драйвери

Всъщност няма нужда да говорим за пълна съвместимост на ниво I / O портове и протоколи за обмен на данни. Ето защо, например, десетки драйвери за принтер се доставят с текстообработващата програма Microsoft Word за MS-DOS, по един за всеки модел принтер или семейство модели принтери.

Може ли програмистът да вземе предвид всички характеристики на съществуващото оборудване, както и тези, които ще се появят в бъдеще? Очевидно не, освен ако, разбира се, той има дарба на ясновидство, както и неограничен запас от време, за да тества програмата си за безкрайни конфигурации и хардуерни модели. Виждали сме много програми, които могат да работят само с хардуера, който разработчикът е имал на разположение. Например счетоводни програми, които "можеха" да отпечатват документи само на принтера Epson FX-850, програми, които бяха инсталирани само от диск A: 360 KB и т.н.

Има ли някакъв начин да изолирате разработчика на софтуера от компютърния хардуер?

Всички съвременни операционни системи имат достъп до периферни устройства чрез специални софтуерни модули – драйвери. В операционни системи като Windows NT, OS/2 или UNIX нормална програма не може да издава I/O команди. За достъп до периферно устройство, то трябва директно или индиректно (чрез операционната система) да извика драйвера.

Тъй като драйверът на устройството се създава от разработчика на устройството, всички подробности за хардуера остават скрити за операционната система и програмиста. Използвайки стандартния интерфейс за всяка операционна система, потребителската програма или самата операционна система осъществява достъп до драйвера, за да извършва контролни, входни или изходни операции.

операционна системаMS-DOS също използва механизма на драйвера. Въпреки това драйверите на MS-DOS не винаги общуват директно с хардуера. Обикновено те наричат ​​функции на BIOS и именно BIOS изпълнява всички I / O операции. Разбира се, BIOS съдържа програми за поддръжка само за стандартни периферни устройства, нестандартните устройства се обслужват директно от драйверите.

Използването на BIOS като допълнителен интерфейс между стандартните драйвери на устройства и хардуера драстично увеличава "оцеляването" на MS-DOS на персонални компютри, които не са напълно съвместими с IBM PC. И това е вярно - най-разпространената операционна система днес, MS-DOS, работи на всички компютри, които са поне донякъде съвместими с IBM PC.

Това е възможно поради факта, че производителите на съвместими компютри вземат предвид всички хардуерни характеристики в BIOS, а MS-DOS "не вижда" разликите. И приложната програма, която работи с устройството чрез драйвера - и още повече.

BIOS обаче не се използва в операционни системи Windows NT, UNIX или OS/2. Защо?

Факт е, че за съжаление BIOS не е reentrant. Това няма значение за еднозадачния MS-DOS, но многозадачните операционни системи трябва да управляват собствената си поддръжка на хардуера по начин за повторно влизане. Все още има проблеми със споделянето на ресурси между паралелни процеси, които също не се решават в BIOS.

Потребителите могат лесно да допълват операционната система със собствени драйвери, компилирани за нестандартни устройства. Също така е възможно да се заменят стандартни драйвери, да се използват драйвери за замяна или разширяване на функциите на MS-DOS и BIOS.

6.1. Структура на заредения драйвер

Драйверът е друг вид програма (в допълнение към com и exe програмите). Понякогаказват, че драйверът е com програма, но не е така. По-скоро начинът за получаване на модула за зареждане на драйвера е подобен на начина за получаване на програмата com. Има още едно сходство между драйвери и com-програми (което просто се появява поради същия начин, по който са получени): модулите за зареждане на тези програми са точно показване на изходния текст на асемблер без добавяне на заглавки към началото на файла на етапа на редактиране.

Когато драйверът се зареди в паметта, заглавката на драйвера също се поставя в RAM и операционната система прави някои промени в него, за които ще говорим по-късно.

По този начин можем да говорим и за сходство на драйвера с exe-програми, тъй като в началото на модула за зареждане на драйвера има заглавка. Само този хедър, за разлика от хедъра на exe файла, принадлежи на самата програма и се зарежда в паметта с нея. Заглавката на exe-програмата се използва само когато програмата е заредена; след зареждане операционната система го премахва от паметта.

Не трябва да се опитвате да стартирате драйвера като com програма, тъй като управлението ще бъде прехвърлено в областта на паметта, съдържаща заглавката на драйвера, и там няма правилни машинни инструкции. Следователно файловете на драйверите обикновено имат разширения на имена, различни от com или exe. Най-често използваните разширения са sys, drv, понякога bin. Всъщност може да се използва всяко разширение на името, тъй като пълното име на драйвера е посочено във файла config.sys при описанието на драйвера.

Зареден в памет драйвер никога не е префикс с префикс на програмен сегмент на PSP. Директивата ORG 100h не се поставя в началото на изходния текст на програмата на драйвера (както се прави за програмата com), тъй като не е необходимо да се запазва място за PSP.

Какво е буутлоудърдрайверен модул?

В началото на модула е заглавката на драйвера. Вече говорихме малко за това, когато описвахме векторната комуникационна таблица на операционната система. Ето формата на заглавката: