Seadmedraiver

Allikas: Vikipeedia

Seadmedraiver ehk ohjur ehk ajur (inglise keeles driver – juht, antud kontekstis juhtprogramm) tähendab informaatikas arvutiprogrammi, mis võimaldab teistel kõrgtasemeprogrammidel riistvarakomponenti kasutada[1].

Igal arvutis kasutatava riistvarakomponendi jaoks on seadmedraiver ehk ohjur. Ilma ohjurita ei suudaks riistvara töötada. Tavaliselt toimub andmevahetus ohjuri ja arvutikomponendi vahel läbi arvutisiini või mõne teise ühenduskanali, mille külge riistvarakomponent on ühendatud. Kui kasutajaprogramm tahab komponendilt midagi, siis ta annab ohjurile vastava käsu ja ohjur annab komponendile riistvara spetsiifilise käsu[2]. Kui komponent tahab programmile andmeid saata, siis käib see samuti läbi ohjuri. Ohjurid ehk seadmedraiverid on tehtud iga riistvarakomponendi ja operatsioonisüsteemi jaoks eraldi.

Otstarve[muuda | redigeeri lähteteksti]

Seadmedraiver on tarkvara, mis kergendab programmeerimist töötades tõlgina riistvara seadme ning rakenduste või operatsioonisüsteemi vahel, mis seda kasutab. Programmeerijad võivad kirjutada kõrgema taseme rakendusekoode iseseisvalt suvalisele riistvara seadmele [3].

Draiveri paigaldamine ja uuendamine[muuda | redigeeri lähteteksti]

Enamjaolt saab draiveri kaasa koos riistvara seadmega, mis on tavaliselt CD või mõne teise ketta peal. Algselt on riistvaral ainult üldine draiver, kuid sellel ei ole piisavalt informatsiooni, et arvuti saaks riistvara õigesti kasutada. Draiveri paigaldamiseks tuleb panna CD arvutisse panna ning järgida instruktsioone, mis on antud. Võimalus on, et sellel kettal on ka teiste sarnaste seadmete draivereid, seega tuleks vaadata, et valitud on õige seade[4]. Tavaliselt, kui riistvara ei tööta korralikult, on seadmedraiveriga tekkinud mingi rike, mis ei lase sellel korralikult funktsioneerida. Draiverit on võimalik uuesti installeerida. Kõige kergem oleks leida selle riistvara mudeli nimetus ning minna selle seadme kodulehele ning sealt otsida sellele sobiv draiver. Samuti on olemas ka mitmeid programme, mis uuendavad draivereid automaatselt, kui on olemas uuem versioon.

Füüsiline konstruktsioon[muuda | redigeeri lähteteksti]

Seadmedraiveri füüsiline struktuur koosneb kernelist, sisend/väljundihaldurist ning kasutajarežiimidest[5]. Tüüpide loendus:

Kasutajatrežiimis ühendub rakendus API-ga, mis ühendub Ntdll'iga. Seejärel liigub rakenduse päring kernelisse läbi sisend/väljundhalduri. Sisend/väljundhaldur kasutab NtReadFile’i, et päring läbitöötada ning saadab selle IoCallDraiverisse, mis omakorda saadab informatsiooni õigesse draiverisse. Pärast seda otsustab draiveri, mida selle päringuga teha. See saadab selle riistvara porti, teise draiverisse või tegeleb sellega hiljem.

APId [6][muuda | redigeeri lähteteksti]

Kasutajarežiimi draiverid[muuda | redigeeri lähteteksti]

Need draiverid tagavad liidese Win32 rakenduse ja kernelirežiimi draiverite või teiste operatsioonisüsteemi komponenti vahel. Windows Vistas on kõik printeri draiverid kasutajarežiimis. Kasutades kasutajarežiimi draiveri raamistikku, on võimalik luua kasutajarežiimi draivereid, mis põhinevad protokollil või jadasiinil. Selle režiimi eeliseks on madalam latentsus, paranenud stabiilsus, sest halvasti kirjutatud seadmedraiver ei ole võimeline süsteemi kokkujooksutama. <ref=name"wdf1">Driver Design msdn.microsoft.com, kasutatud 18.12.2011</ref>.

Kernelirežiimi draiverid[muuda | redigeeri lähteteksti]

Need draiverid töötavad kernelirežiimi operatsioonisüsteemi komponentidena, mis haldavad sisend/väljundit, isehäälestamist, mälu, protsesse ja harusi, turvalisust jne. Kernelirežiimi draiverid on enamasti jaotatud kihtideks. Kõik kernelirežiimi draiverid on varustatud süsteemi poolt määratud tavaliste draiverite rutiinidega. Osad kernelirežiimi draiverid on Windowsi Draiveri Mudeli (WDM) draiverid, mis kuuletudav WDM-ile. Mõned draiverid on kernelirežiimi draiveri raamistiku (KMDF) draiverid. Ülejäänud draiverid põhinevad NDIS-i või teiste draiveri mudelitel, mis on spetsiifilised seadme klassile.

Kujundus[muuda | redigeeri lähteteksti]

Seadmedraiverid jaotatakse kahte arhitektuurilisse kujundusse ning arendamisviisi, mis tasakaalustavad andmete kapseldamise vastasjõud, süsteemi tootlikkuse ning tarkvara muutuste haldamise[7].

Mitmeastmeline seadmedraiver

Mitmeastmeline seadmedraiver[muuda | redigeeri lähteteksti]

See jagab draiveri koodi kolme gruppi, nii et äriloogika on eraldatud alamtaseme riistvara spetsiifilisest koodist ning süsteemi tase tagab vajaliku ühenduse vahepeal. Kui riistvara muutub, siis tuleks koodi muuta ainult alamtasemes ning vastupidi, kui andmepäringud muutuvad, siis tuleks muuta ainult rakendusekoodi. Süsteemi taseme kood tagab ligipääsufunktsioonid alamtaseme koodidele, et need saaksid suhelda rakendusetaseme koodidega. Rakendusetaseme kood ei saa otse alamtaseme koodiga suhelda.

Sõpruse tsoon

Sõpruse tsoon[muuda | redigeeri lähteteksti]

See on üpriski sarnane mitmeastmelise seadmedraiveri arhitektuurile, kuid see on efektiivsem, sest siin on süsteemi- ja alamtasemes andmetele ligipääs tunduvalt kiirem. Selleks tuleb tasakaalustada andme kapseldamise vastasjõud ja süsteemi jõudlus. Selle saab, kui kasutada ‘sõbra’ funktsiooni C++’s, mis annab ühele klassile ligipääsu teise klassi privaatsetele andmetele, kui teine klass on esimese oma ‘sõbraks’ määranud. Sellepärast on vähem lisafunktsiooni kutseid ning see hoiab klassi andmed saladuses kõigi ees, kes ei ole määratud tema ‘sõbraks’.

Arendus[muuda | redigeeri lähteteksti]

Windows Driver Foundation ja draiveri elutsükkel

Seadmedraiveri kirjutamine nõuab põhjalikke teadmisi sellest, kuidas riistvara ja tarkvara omavahel funktsioneerivad mingis operatsioonisüsteemis. Draiverid töötavad kõrgete käskudega keskkonnas ning võivad tekitada tõsist kahju, kui midagi läheb valesti. Enamus kasutaja tasemega tarkvarad saab peatada, ilma et need mõjutaks ülejäänud süsteemi drastiliselt. Peamiselt kirjutavad seadmedraivereid tarkvara insereid, kes töötavad riistvara arendus firmades, sest nemad tunnevad oma riistvara paremini, kui keegi väljastpoolt firmat. Riistvara tootja huvides oli parim, kui kasutaja saab kasutada nende toodet kõige efektiivsemal viisil.

Microsoft Driver Foundation[muuda | redigeeri lähteteksti]

Microsoft lõi Windows Driver Foundatoni, et kergendada draiverite arendamist ning parandada nende kvaliteeti, ilma et see vähendaks jõudlust. WDF-ga kaasneb mudel, millel on infrastruktuur nii kerneli kui ka kasutajarežiimi draiveritele. See mudel on paindlik, pikendatav, skaleeritav, võimaldab lisanduvaid arenguid, vähendab õppeaega ning lubab draiveri kirjutajal keskenduda operatsioonisüsteemi asemel seadme riistvarale[8].

WDF-i Draiveri Mudel[muuda | redigeeri lähteteksti]

Draiveri mudel määrab objektorienteeritud keskkonna, milles draiveri kood saab hakkama tarkvarale spetsiifiliste funktsioonidega ning Microsofti raamistik ütleb draiverile, et see vastaks sündmustele, mis mõjutavad selle draiveri operatsioone. Sellisel kujundusel on mitu tähtsat eelist oma eelkäija Windows Driver Modeli (WDM) ees. Esiteks saab Microsoft muuta operatsioonisüsteemi sisest andmestruktuuri ilma draiveri ühildamatusega. Peale selle on draiverid väiksemad, kiiremad arenema ja vigu kõrvaldama tänu raamistikule, mis rakendab üldisi draiveri tunnuseid ja tavalist käitumist. Draiveri arendajad ja riistvara edasimüüjad on paremini isoleeritud lisanduvatest uuendusdest igas uues operatsioonisüsteemi versioonis. Iga raamistik saab jälgida draiveri hetkeseisu, operatsioonisüsteemi ning seadet, seega eemaldades palju keerulist loogikat, mida on draiverites vaja [8].

WDFi Objekti Mudel[muuda | redigeeri lähteteksti]

Objektid töötavad ehituskividena draiveris. Draiver muudab neid objekte läbi täpselt defineeritud liideste. Objektidel endal on täpselt defineeritud elutsükkel. Mingi hulk sündmusi võib mõjutada igat objektiliiki. Raamistik määrab tavalise käitumise iga sündmuse puhul. Toetamaks seadmele spetsiifilist käitumist on draiveril tagasihelistamise rutiin, mis tühistab vaikimisi oleku. Objektidel on meetodid, sündmused ja atribuudid. Meetodid teostavad tegevusi objektidel. Sündmused on tingimused, millel draiver võib tegutseda. WDF identifitseerib võimalikud sündmused igale objektile ning määrab enamustele vaikimisitegevuse. Draiver sisaldab koodi, mis on suuteline ainult neid sündmusi täitma, millele on vaikimisi tegevused sobivad. Kui sündmus toimub, siis WDF kutsub välja seotud tagasihelistamise. Atribuudid kirjeldavad objektide tunnuseid. Iga atribuut on seostatud meetodiga, mis saavad ning kui vajalik, siis ka määravad omandile väärtuse [8].

Kernelirežiimi objektid[muuda | redigeeri lähteteksti]

Kernel-Mode Driver Foundationi (KMDF) objektid on struktuurid, mis on läbipaistmatud draiverile. Draiverid viitavad objekti juhtumeid pidedega. Lugemiseks, kirjutamiseks või tegevuse teostamiseks objektil peab draiver kutsuma meetodi objektile ning pide edasi andma. KMDF eristab umbes 20 tüüpi objekte. KMDF-i objektid on unikaalsed raamistikule. Neid ei halda Windowsi objektihaludur ning sellepärast ei saa neid mõjutada kasutades süsteemi ObXxx funktsioone. Ainult raamistik ning WDF draiverid saavad luua ja neid muuta. KMDFi sündmused ei ole seotud kerneil dispetšeri sündmustega, mida Windows kasutab sünkroniseerimis mehhanismina. Draiver ei saa luua, muuta või oodata WDF sündmuse järel. Selle asemel draiver registreerib tagasihelistamise sündmusele ja WDF kutsub draiverit, kui sündmus leiab aset [8].

Kasutajarežiimi objektid[muuda | redigeeri lähteteksti]

User-Mode Driver Foundationi (UMDF) objektid põhinevad komponent objekt mudelil. UMDF kasutab väikest komponent objekt mudeli alamhulka iga päringuliidese ja viidete lugemise tunnuseid. Kasutajarežiimi draiverites rakendavad nii draiver kui ka raamistik komponent objekt mudeli stiilis liideseid. Pidesi ei ole vaja, sest liidesed on abstraktsed ning selletõttu indetifitseerivad objekti. UMDB eristab vähem objekte kui KMDF, sest kasutajarežiimi draiveritel ei ole otsest ligipääsu riistvarale ning sellepärast ei teosta otsest mälu ligipääsu ega tootel katkestusi [8].

Rakendused[muuda | redigeeri lähteteksti]

Draivereid kasutatakse mitmes valdkonnas[9]:

Virtuaalsed seadmedraiverid[muuda | redigeeri lähteteksti]

Virutaalsed seadmedraiverid esindavad uut seadmedraiverite varianti. Neid kasutatakse, et emuleerida mingit riistvara seadet, enamasti virtualiseerimis keskkonnas. Näiteks kui DOS programmi kasutatakse Windowsi arvutis või kui külalisoperatsioonisüsteemi kasutatakse Xen hostis. Selle asemel, et võimaldada külalisoperatsioonisüsteemil suhelda riistvaraga, virtuaalsed seadmedraiverid võtavad vastas rolli ja emuleerivad mingit riistvara seadet, nii et külalisoperatsioonisüsteem ja selle virutaalses masinas töötavatel draiveritel oleks illusioon, et neil on ligipääs reaalsele riistvarale. Külalisoperatsioonisüsteemi katsed riistvarale ligipääsemiseks on ümbersuunatud virtuaalsesse seadmedraiverisse hosti operatsioonisüsteemi funktsiooni kutsetena.

Virtuaalsed seadmed võivad töötada ka mitte virtuaalses keskkonnas. Näiteks virtuaalset võrguadapterit kasutatakse virtuaalses privaatvõgus, samal ajal kui virtuaalset ketta seadet kasutatakse iSCSI-ga. Parim näide virtuaalsest seadmedraiverist on Daemon Tools.

Vaata ka[muuda | redigeeri lähteteksti]

Viited[muuda | redigeeri lähteteksti]

  1. Device driver searchenterprisedesktop.techtarget.com/, kasutatud 18.12.2011
  2. Draiver vallaste.ee, kasutatud 18.12.2011
  3. What Does a Device Driver Do? www.driverdoc.com, kasutatud 18.12.2011
  4. When And How To Install Driver Updates www.driverdoc.com , kasutatud 18.12.2011
  5. How Does a Device Driver Work? www.ehow.com, kasutatud 18.12.2011
  6. API näited kasutatud 18.12.2011
  7. Sachin Bammi: Design Patterns for Device Driver Design , kasutatud 18.12.2011
  8. 8,0 8,1 8,2 8,3 8,4 Architecture of the Windows Driver Foundation msdn.microsoft.com, kasutatud 18.12.2011
  9. Device Drivers Information www.globalspec.com, kasutatud 18.12.2011

Kirjandus[muuda | redigeeri lähteteksti]