Gonilniki naprav


Namen gonilnika naprave
Namen gonilnika naprave je rokovanje z zahtevki, ki jih v zvezi z napravo
danega tipa posreduje jedro operacijskega sistema.Vmesnik za jedro mora
biti dobro definiran in konsistenten. Izoliranje programske kode,
specifične za dano napravo od jedra poenostavlja dodajanje
novih naprav.
Tipi gonilnikov naprav
Gonilnik naprave je programski modul, ki je lociran v jedru in predstavlja
programski vmesnik do aparaturne naprave. taka naprava je na primer krmilnik
diska ali traku ali omreľni krmilnik. Pri sistemu UNIX klasificiramo gonilnike
glede na tipe naprav:
-
Gonilniki blokovnih naprav (Block device drivers)
-
Gonilniki znakovnih naprav(Character device drivers)
-
Gonilniki omreľnih naprav (Network device drivers)
-
Gonilniki laľnih naprav (Pseudodevice drivers)
Kdaj kličemo gonilnik naprave
Nekateri zahtevki (na primer za vhodne ali izhodne operacije izhajajo
neposredno iz sistemskih klicev v uporabnikovem programu. Nekateri drugi
zahtevki, kot na primer konfiguriranje, pa so posledica aktivnosti med
zagonom operacijskega sistema.
Mesto gonilnika (pri UNIX)
Uporabniški program kliče jedro, nikoli pa ne direktno kliče gonilnika.
Jedro komunicira s periferno napravo le posredno preko klicev njenega
gonilnika.
Gonilnik komunicira z napravo tako, da preko vodila (bus) piše v njene
registre ali bere vsebino teh registrov. Krmilnik naprave (device
controller) je fizični vmesnik, ki krmili eno ali več naprav (običajno)
enakega tipa.

Primer branja enega znaka
Primer predstavlja branje enega znaka s terminala v "surovem" načinu (raw
mode).
Slika podaja zaporedje dogodkov od klica v uporabnikovem programu naprej
.
-
Gonilniku je posredovan zahtevek za branje (C-1 do C-3).
-
Periferija zajame znak (I-4 do I-5).
-
Pride do prekinitve(I-6).
-
Rokovalnik prekinitev (interrupt handler) servisira prekinitev (I-7 do
I-9).
-
Uporabniški program dobi vrnjen prebrani znak (C-10 do C-13).
Bralni zahtevek gonilniku
Uporabniški program pokliče sistemski klic read
(C-1).V sistemskem klicu pride do prenosa treh argumentov: opisnika datoteke(fd),
kazalec na mesto,kjer pomnimo znak (buf) in celoštevilčno spremenljivko
(vrednost 1), ki pove vmesniku read , koliko bajtov želimo prebrati.
Proces je blokiran v gonilniku, ker je medpomnilnik, kjer naj bi
bil znak,prazen. .
Sprejem znaka
Kasneje vtipkamo na primer znak "k" (I-4). Koda znaka je pomnjena v podatkovnem
registru naprave (I-5).
Generiranje prekinitve
Ob vtipkanju znaka se spremeni status krmilnika naprave, ki poąlje procesorju
(CPU) prekinitveni zahtevek. Ta sproži rokovalnik prekinitev (I-6). Trenutno
tekoči proces je pred tem prekinjen in njegovo stanje shranjeno, da se
bo lahko kasneje nadaljeval.
Rokovalnik prekinitev servisira prekinitev
Rokovalnik prekinitev (včasih mu pravimo tudi prekinitvena servisna rutina)
pomni znak v lokacijo, ki jo poznajo tudi ostali moduli gonilnika. Zatem
obudi proces, ki je moral zaradi čakanja na znak zaspati. Končno izstopi
in pri tem restavrira proces, ki je bil prekinjen ob servisiranju prekinitve.
Vračamo znak
Ko kasneje razvrščevalnik procesov zbujenemu procesu dovoli nadaljevanje,
je brani znak že v ustreznem medpomnilniku. Proces ga premesti v uporabniški
naslovni prostor (C-11). Vmesnik read igonilnika naprave vrne
nadzor jedru, ta pa uporabniąkemu programus (C-13).
Povzetek
Zgled poenostavljeno predstavlja branje znaka. Opazimo,kako uporabniški
program terja servis jedra. Vidimo še, da je obravnava prekinitvenih zahtevkov
asinhrona glede na druge aktivnosti gonilnika.

