C. Aces direct la memorie (DMA)
Multe controller-e mai ales cele utilizate pentru dispazitive in bloc suporta Acces direct la memorie sau DMA. Pentru a explica cum functioneaza DMA sa ne uitam mai intai la modul cum apar citirile de disk atunci cand DMA nu este utilizat. Mai intai controller-ul citeste in serie blocul (unul sau mai multe sectoare) de pe drive bit cu bit pana cand intregul bloc sa afla in buffer-ul intern al controller-ului. Apoi, acesta calculeaza suma de verificare pentru a vedea daca au aparut erori de citire. Apoi controller-ul produce o intrerupere. Cand sistemul de operare incepe sa ruleze poate sa citeasca blocul disk-ului de pe buffer-ul controller-ului cate un byte sau cate un cuvant odata executand un loop, prin fiecare iteratie citind un byte sau un cuvant din registrul dispozitivului controller-ului pe care il depoziteaza in memorie.
Fireste, un loop al procesorului programat sa citeasca bytes unul cate unul de pe controller iroseste timpul procesorului. DMA a fost inventat pentru a elibera procesorul de aceasta munca de nivel scazut. Atunci cand este utilizat, procesorul da controller-ului 2 informatii pe langa adresa de disk a blocului: adresa de memorie a depozitarii block-ului si numarul de bytes care trebuie transferati asa cum se vede in figura 3-3.
fig3-3. Un transfer DMA se face in intregime de controller
Dupa ce controller-ul a citit in intregime blocul de pe dispozitiv in buffer-ul sau si a verificat suma copiaza primul byte sau cuvant in memoria principala la adresa specificata de memoria de adresa DMA. Apoi incrementeaza adresa DMA si decrementeaza contul DMA in functie de numarul de biti care tocmai au fost transferati. Acest proces se repeta pana cand contul DMA ajunge la 0, moment in care controller-ul produce o intrerupere. Cand sistemul de operare porneste nu mai trebuie sa copieze blocul in memorie; acesta este deja acolo.
Poate va intrebati de ce controller-ul nu depoziteaza bytes in memoria principala imediat ce-I ia de pe disk. Cu alte cuvinte de ce are nevoie de un buffer intern? Motivul este ca odata cu inceperea unui transfer de pe disk, bits contiua sa soseseasca de pe disk cu o rata constanta indiferend daca controller-ul este sau nu pregatit pentru acest lucru controller-ului. In cazul in care controller-ul ar incerca sa scrie date direct in memorie ar trebui sa treaca peste buss-ul sistemului pentru fiecare cuvant transferat. Daca buss-ul ar fi ocupat din cauza utilizarii lui de catre alt dispozitiv controller-ul ar trebui sa astepte. Daca urmatorul cuvant ar sosi inainte ca precedentul sa si fost depozitat controller-ul ar trebui sa-l depoziteze undeva. Daca buss-ul ar fi foarte ocupat controller-ul ar putea sfarsi depozitand destul de multe cuvinte si avand de facut destul de multa munca de administrare. Cand blocul este amortizat in interior nu este nevoie de buss pana la pornirea DMA-ului, deci designul controller-ului este mult mai simplu din cauza transferului facut de DMA in memorie, nu este presat de timp. (De fapt unele controlere mai vechi mergeau direct la memorie doar cu o mica amortizare interna, dar cand buss-ul era foarte ocupat, se putea intampla ca un transfer sa se incheie cu o eroare cauzata de suprasolicitare.)
Procesul de amortizare in doi timpi descris mai sus are implicatii majore pentru performanta I/O. in timp ce datele sunt transferate din controller in memorie fie de catre procesor fie de catre controller, sectorul urmator va trece pe sub capul de citire al discului iar bits vor ajunge in controller. Controller-ele simple nu pot face fata executarii intrarilor si iesirilor in acelasi timp, astfel ca in timp ce are loc un transfer de memorie, sectorul care trece pe sub capul de citire al discului este pierdut.
In consecinta controller-ul va putea sa citeasca doar cate un bloc. Citirea unei piste complete va necesita doua rotatii complete, una pentru blocurile pare si una pentru impare. Daca timpul de transfer al unui bloc din controller in memorie prin buss este mai lung decat timpul de citire al unui bloc de pe disk ar putea fi necesara citirea unui bloc si sarirea a altor doua (sau mai multe) blocuri.
Sarirea peste unele blocuri pentru a-I da timp controller-ului sa transfere datele in memorie sa numeste inserare. Cand disk-ul este formatat blocurile sunt astfel numerotate incat sa tina evidenta factorului de inserare. In figura 3-4(A) vedem un disk cu 8 blocuri/pista si fara inserare. In figura 3-4(B) vedem acelasi disk cu o singura inserare. In figura 3-4(C) se vede o dubla inserare.
Fig 3-4. (a) fara inserare. (b) o singura inserare. (c) dubla inserare
Pentru acest mod de numerotare a blocurilor, ideea este sa permita sistemului de operare sa citeasca consecutiv blocurile numerotate si sa atinga, si in acest caz viteza maxima de care este capabil hardware-ul. Daca blocurile ar fi numerotate ca in figura 3-3(A) dar controller-ul ar putea citi doar blocurile alternative, un sistem de operare care ar aloca unui fisier opt blocuri de disk consecutive ar necesita 8 rotatii de disk pentru a citi in ordine blocurile de la 0 la 7 (bine-nteles daca sistemul de operare ar cunoaste problema si ar distribui altfel blocurile ar putea sa rezolve problema din software, dar este mai bine sa se ocupe controller-ul de inserare).
Nu toate computerele folosesc DMA. Principalul argument contra este acela ca procesorul principal este adesea mult mai rapid decat controller-ul DMA si poate indeplini sarcina mai rapid (cand factorul limitativ nu este dispozitivul I/O). In lipsa altei sarcini nu are rost ca rapidului procesor sa astepte dupa terminarea incetului controller DMA. De asemenea debarasarea de controller-ul DMA si folosirea procesorului pentru software economiseste bani.
2. Principii ale software-ului I/O
Sa lasam hardware-ul deoparte si sa analizam modul de structurare al software-ului I/O. Scopurile generale ale software-ului I/O sunt usor de stabilit. Ideea principala este organizarea software-ului sub forma de straturi, unde cele de jos sunt folosite pentru ascunderea particularitatilor de cele de sus. Iar cele de sus trebuie sa prezinte utilizatorilor o interfata draguta curata si uniforma. In sectiunile urmatoare vom analiza aceste scopuri si modul in care ele sunt realizate.
Dostları ilə paylaş: |