Драйвер ОЖ және құрылғы арасында делдал сияқты болып табылады.
Драйверлер алдында мынадай міндеттер тұрады:
■ жеке құрылғылардың ерекшелік қасиеттерін есепке алмай, кез келген құрылғыға стандартты түрде жүгіну мүмкіндігін қамтамасыз ету;
■ нақты құрылғылардың барлық функционалдық мүмкіндіктері мен қасиеттерін барынша тиімді пайдалануға қолжеткізу.
Стандартты құралдармен түрлі құралдармен түрлі құрылғылармен жұмыс жасау мүмкіндігі өте маңызды және ОЖ архитектурасы жағынан және бағдарламалау ыңғайлылығы үшін қажет.
Қолданбалы бағдарламаны жазу кезінде нәтижелерді шығару үшін принтердің қай моделі қолданылатынын алдын ала ескеру қажет деп көз алдымызға елестетсек, онда үлкен проблемалар туындайды. Мысалы, принтердің, сканердің, монитордың бір моделін басқаға ауыстыру осы құрылғымен жұмыс жасайтын барлық бағдарламаларды қайтадан жазып алу талап етіледі. Сондықтан құрылғының барлық ерекшеліктері бір жалғыз ғана орында – осы құрылғының драйверінде ескеріледі.
Әлбетте, құрылғылар арасындағы барлық айырмашылықтарды толық жасыру мүмкін емес. Мысалы диск пен пернетақтаны теңестіруге ешқашанда болмайды және дисктердің түрлі типтері ұқсас, бірақ бірдей емес. Көптеген жағдайда ОЖ драйвердің екі типімен ерекшеленеді: символдық арналған және локтық құрылғыларға арналған.
Драйверге жүгінген кезде, орындауға талап етілетін функция көрсетіледі. Жалпы функциялар деректерді оқу, деректерді жазу, құрылғыларды инициализациялау (осы функцияны жүйе жүктелгеннен кейін бір рет қана жасалады), құрылғына ашу және жабу (символдық құрылғы файл ретінде ашылған кезде қолданылады) функциялары болып табылады. Блоктық құрылғылар үшін форматтау, секторды іздеу функцияларының маңызы бар. Символдық құрылғыларды енгізу үшін «бұзылмайтын енгізу» функциясы қолданылады, яғни кезекті символ оны кіріс ағыннан алмай-ақ тексеру.
Драйверлер екі режимде жұмыс жасау мүмкін: пайдаланушы режимінде немесе ядро режимінде.
Windows пайдаланушы режиміндегі драйверлердің бірнеше типтерін қолдайды.
1. Виртуалды құрылғылардың драйверлері.MS-DOS 16-разрядты бағдарламаларын эмуляциялау үшін қолданылады. Олар осындай бағдарламалардың енгізу-шығару порттарына жүгінулерін ұстап қалады және оларды құрылғының нақты драйверімен берілетін Windows-енгізу-шығару функцияларын шақыруда көрсетеді. Windows толық қорғалған ОЖ болып табылатындықтан, пайдаланушы режимінің MS-DOS бағдарламалары аппараттық құралдарға тікелей жүгіне алмайды – олар оны ядро режиімінің құрылғыларының драйверлері арқылы жасау керек.
2. Принтерлердің драйверлері.Бұл Windows бағыныңқы жүйесінің драйверлері, принтерге ғана тән командаларда графикалық операциялардың аппараттық-тәуелсіз сұрауларын көрсетеді. Бұдан әрі осы командалар, әдетте, ядро режиімінің драйверіне, мысалы, параллель портының драйверіне (Parport. sys) немесе USB-шина принтері портының драйверіне (Usb-print.sys) жіберіледі.
Ядро режимінде жұмыс істейтін драйверлер бірнеше негізгі дәрежелерге бөлуге болады:
■ файл жүйесінің драйверлері.Енгізу-шығару сұрауларын қабылдайды және жаппай жады құрылғыларының драйверлеріне немесе желілік драйверлерге анағұрлым ерекшелік сұрауларын бере отырып, оларды орындайды;
■ PnP-драйверлері.Жабдықпен жұмыс жасайтын және электр қоректену диспетчерлерімен және PlugandPlaу біріктірілетін драйверлер. Оларға жаппай жады құрылғыларына, бейнеадаптерлерге, енгізу құрылғыларына және желілік адаптерлерге арналған драйверлер жатады;
■ PlugandPlay ерекшелігіне жауап бермейтін драйверлер.Оларды кеңейтілген ядролар деп те атайды. Пайдаланушы режимінен ядро режимінің сервистері мен драйверлеріне қолжеткізілімді бере отырып, жүйенің функционалдығын кеңейтеді. PlugandPlay технологиялық принципіне орай драйверлердің келесідей типтері бөлінеді: шиналық, функционалдық және сүзгінің драйвері. Шиналық драйвер (шинаның драйвері)шина бақылаушысына, адаптерге, көпірге немесе еншілес құрылғылары бар кез келген құрылғыға қызмет көрсетеді.
Шиналық драйверлер міндетті драйверлерге жатады және әдетте, Microsoftжеткізіледі. Жүйедегі шинаның әр типі үшін өзіндік шиналық драйвер бар.
Функционалдық драйвер – бұл осы құрылғыларға интерфейсті ұсынатын құрылғының негізгі драйвері. Құрылғыны енгізу-шығару шиналық драйвермен немесе сүзгінің кез келген драйверлерімен жүзеге асыру жағдайларын қоспағанда, осы драйвер міндетті болып табылады. PlugandPlayManager әр құрылғы үшін бір функционалдық драйверден жүктейді. Сүзгінің драйверішиналар, құрылғылар немесе құрылғылар сыныптары үшін енгізу-шығару сұрауларын сұрыптайды.
Сүзгі драйверлері міндетті болып табылмайды және кез келген деңгейде – функционалдық драйвердің және шиналық драйверді жоғары және төменде жағында орналастырылып, кез келген көлемде болуы мүмкін. Әдетте осындай драйверлер OEM фирмаларымен немесе аппараттық құралдардың тәуелсіз өнім берушілерімен жеткізіледі. Көптеген жағдайда төменгі деңгейдегі сүзгілердің драйверлері аппараттық құралдардың беталысын түрлендіреді. Мысалы, тінтуір үшін сүзгі драйверінің төмен деңгейлі сыныбы тінтуірдің орнын ауыстыру туралы деректердің желілік емес қайта құрылуын орындай отырып, оның жұмысын шұғыл болуын қамтамасыз етеді. Сүзгілердің жоғары деңгейлі драйверлері құрылғы үшін қосымша функцияларды ұсынады. Мысалы, пернетақта үшін сүзгінің жоғары деңгейлі драйвері қауіпсіздік бойынша қосымша тексерулерді енгізе алады.
Құрылғының типтік драйвері өзіне келесілерді қамтиды:
■ драйвердің тақырыбы;
■ стратегия блогы;
■ үзілістер блогы.
Тақырып осы драйвер және басқарылатын құрылғы туралы түрлі ақпаратты қамтиды. Мұнда құрылғының атауы, құрылғының типі, бір драйвермен қызмет көрсетілетін бір типтік құрылғылардың саны, құрылғыдағы жадының көлемі және басқалары кіреді. Тақырып стратегия блогының және үзілістер блогының мекенжайын қамтиды. Стратегия блогының міндеттеріне операцияларды орындауға өтінімдерді қабылдау, өтінімдер кезегін жүргізу (көп міндетті жүйелерде және асинхрондық операциялар кезінде орындаулар бірнеше өтінімдерді күтуі мүмкін), сондай-ақ операцияны іске қосу және оны аяқтау кіреді.
Операцияларды орындауға өтінім драйверге жүгіну алдында жүйемен құрылатын стандартты жазба болып табылады. Өтінім талап етілетін драйвер функциясының кодын және жадыдағы дәне құрылғыдағы деректердің мекенжайлары, берілетін деректердің саны туралы мәліметтерді қамтиды. Сонымен бірге, өтінім өрісті қамтиды, онда драйвер операцияны аяқтау кодын жазып алады (әдетте 0 – қалыпты орындалған операция, өзге белгілер – қателіктердің кодтары. Жүйедрайвермен қызмет көрсетілетін құрылғыдан үзілістер сигналын алған кездеүзілістер блогын жасайды. Өтінімнің орындалуын аяқтай отырып, үзілістер блогы операцияны аяқтау үшін стратегия блогына басқаруды қайтарады. Әр драйвер бір типтегі немесе бір сыныптағы құрылғыларды басқарады. Операциялық жүйеде құрылғының драйвері ғана қандай бар құрылғының нақты ерекшеліктері туралы біледі. Мысалы, дискінің драйвері ғана жолақтармен, секторлармен, цилиндрлермен, бастиекті орнату уақытымен және дискінің дұрыс жұмысын қамтамасыз ететін өзге факторлармен жұмыс жасайды.
Құрылғының драйвері құрылғыдан сұрауды қабылдайды және оны қалай орындау керектігін шешеді. Типтік сұрау nдеректер блоктарын оқу болып табылады. Егер драйвер сұрау түскен кезде бос болса, онда ол сұрауды дереу орындауды бастайды. Егер ол өзге сұрауға қызмет көрсетумен бос болмаса, онда жаңа түскен сұрау кезекте бар сұрауларға қосылады және ол оның кезегі келген кезде орындалады. Енгізу-шығару сұрауын орындаудағы бірінші қадам, мысалы диск үшін оны абстракті формадан нақты формаға қайта құрылудан тұрады. Дискілік драйвер үшін блоктар нөмірлерін цилиндрлер, бастиектер, секторлар нөмірлеріне қайта құрылуы, мотордың жұмыс істеуін, бастиек қажетті цилиндрде тұрғанын тексеру болып табылады. Осылайша, ол бақылаушының қандай операцияларын орындау және қандай кезектіліктер орындау қажеттігін шешеді. Бақылаушыға команда берілгеннен кейін драйвер берілген операцияның соңына дейін өзін блоктау немесе блок жасамауды шешу қажет. Егер операция кейбір деректер блогын басу кезінде белгілі бір уақыт алса, онда драйвер операция аяқталып, үзіліс өңдеуші оны блоктан шығарғанша, блокқа қойылады. Егер енгізу-шығару командасы шұғыл орындалса (мысалы, экранды айналдыру), онда драйвер оның аяқталуын блокқа қоймай күтеді. Бүгін шалғай құрылғылардың және өзі ОЖ күрделілендірілуде, сондықтан драйверлерді қолданудың көп деңгейлі схемасы талап етілген. Осы схема бойынша аппаратура драйверлері және ОЖ қалған бөлігінде жататын жоғары деңгейлі драйверлердің құрылуына жол беріледі. Көп деңгейлі драйвер үзілістер блогын қамтымайдығ ол жүйеден өтінімдерді қабылдайды, деректерді түрлендіреді, одан кейін құрылғымен жұмыс жасау үшін төмен деңгейлі драйверді шақырады. Мысалы, жоғары деңгейлі графикалық драйвер фигураларды салу, ішін бояу құю, мәтін теру командаларын нақты принтер моделінің командалар жиынтығына қайта құра алады, ал онымен байланысты параллель портының драйвері осы командаларды принтерге берілуіне жауап береді.