Până în prezent, discuția noastră a fost limitat drivere de caractere. Cu toate acestea, pe sistemele Linux, există și alte tipuri de drivere și timp pentru noi, pentru a extinde cunoștințele noastre de mai multe. Prin urmare, șoferii bloc sunt discutate în acest capitol.
Bloc driver permite accesul la dispozitivele care sunt disponibile pentru transmiterea datelor de selecție aleatoare în blocuri de dimensiune fixă - în primul rând aceste drivere de disc. Linux dispozitive bloc de nucleu viziune este radical diferit de dispozitivul de caractere; rezultând în șoferii bloc au o interfață specială și probleme speciale.
drivere eficiente bloc sunt critice pentru performanta - si nu numai pentru citirea și scrierea evidentă aplicații personalizate. Modern rula sistemul de memorie virtuală în mișcare (sperăm), date care nu sunt necesare pentru stocare secundară, care este în mod normal, o unitate de disc. drivere bloc sunt legătura între memoria principală și secundare de stocare; Astfel, ele pot fi considerate ca reprezentând o parte din subsistemul de memorie virtuală. Deși este posibil să se scrie un driver de bloc, nu cunosc pagina struct și alte concepte importante ale memoriei, cel căruia doriți să scrie un driver de înaltă performanță, ar trebui să se bazeze pe un material acoperit în capitolul 15.
Cele mai multe dintre nivelul blocului de dezvoltare axat pe performanță. Multe dispozitive de caractere pot fi operate sub viteza maximă și performanța sistemului în ansamblu nu are de suferit. Cu toate acestea, sistemul poate să nu funcționeze bine dacă este un I / O subsistem bloc nu este bine stabilit. bloc de pe o interfață Driver Linux vă permite să obțineți cele mai multe dintr-un dispozitiv de bloc, dar, în mod inevitabil, impune asupra nivelului de dificultate cu care trebuie să se ocupe. Din fericire, în versiunea 2.6 interfața de bloc este mult îmbunătățită în comparație cu ceea ce a fost în nuclee mai vechi.
În acest capitol, după cum s-ar putea aștepta, în centrul unui exemplu de conducător auto care pune în aplicare un bloc-orientat, cu sediul în dispozitivul de memorie. Este, în esență, un disc de memorie RAM. Nucleul conține deja punerea în aplicare electronic de conducere mult superioară, dar șoferul nostru (numit sbull) ne permite să demonstreze crearea unui bloc driver minimizând în același timp complexitatea necesară.
Înainte de a intra în detalii, să ne definim cu exactitate câțiva termeni. Unitatea este un bloc dimensiune fixă de date, a căror dimensiune este determinată de către nucleu. Blocuri de multe ori 4096 bytes, dar această valoare poate varia în funcție de arhitectura și cerințele sistemului de fișiere. Sectorul. dimpotrivă, este o unitate mică, a cărei dimensiune este de obicei determinată de echipamentul de bază. Kernel-ul cere să se ocupe cu dispozitivele care implementează sectoarele de 512 bytes. În cazul în care dispozitivul utilizează un alt se adaptează dimensiunea de bază și evită generarea de cereri I / O, care nu se pot ocupa de echipamentul. Cu toate acestea, ține cont de faptul că de fiecare dată când kernel-ul vă oferă o serie de sectoare, care funcționează în sectoarele lumii de 512 octeți. Dacă utilizați o dimensiune diferită a sectorului hardware, aveți numărul sectorului de bază, respectiv, la scară. În driverul sbull, vom vedea cum se face.