D. Software I/O independent de dispozitiv
Desi o parte din software-ul I/O este specific pentru un anumit tip de dispozitiv exista si o parte destul de mare care este independenta de dispozitiv. Limita exacta dintre driver-e si software-ul independent de dispozitiv o stabileste sistemul deoarece unele functii care ar putea fi indeplinite intr-un mod independent de dispozitiv ar putea fi indeplinite in driver-e din ratiuni de eficienta sau din alte motive. Functiile aratate in fig. 3-5 sunt de obicei indeplinite de software-ul independent de dispozitiv. In MINIX, majoritatea software-ului independent de dispozitiv face parte din sistemul de fisiere, in stratul 3 (fig. 2-26). Desi vom analiza sistemul de fisiere in Cap. 5, vom arunca o privire rapida asupra software-ului independent de dispozitiv, pentru a da o imagine a I/O si a vedea mai bine unde se incadreaza driver-ele.
Fig. 3-5. functii ale software-ului I/O independent de dispozitiv
Functia de baza a software-ului independent de dispozitiv este de a indeplini functiile I/O commune tuturor dispozitivelor si sa furnizeze o interfata uniforma pentru software-ul la nivel de utilizator.
O problema majora intr-un system de operare este modul in care sunt numite obiectele cum sunt fisierele si dispozitivele I/O. software-ul independent de dispozitiv are grija ca numele simbolice ale dispozitivelor sa fie indicate pe driver-ele corespunzatoare. In UNIX un nume de dispozitiv, cum ar fi /dev/tty00, specifica doar nodul I pentru un anume fisier, iar acest nod I contine numarul major de dispozitiv, care este utilizat pentru a localiza driver-ul corespunzator. Acest nod mai contine si numarul minor de dispozitiv si care este transmis driver-ului ca parametru ce specifica unitatea care trebuie scrisa sau citita.
Protectia este foarte strans legata de denumire. Cum face sistemul pentru a impiedica folosirea dispozitivului de catre utilizatori care nu au acest drept? In sistemele de pe computerele personale nu exista deloc protectie. Orice process poate sa faca orice. In cele mai multe dintre sistemele principale accesarea dispozitivelor I/O de catre procesele utilizatoare este complet interzisa. In UNIX este utilizata o schema mai flexibila. Fisierele corespunzatoare dispozitivelor I/O sunt protejate de bitii rwx. Si atunci administratorul sistemului poate sa seteze permisiunea corespunzatoare pentru fiecare dispozitiv.
Disk-urile diferite pot sa aiba marimi diferite de sectoare. Depinde de software-ul independent de dispozitiv sa ascunda acest lucru si sa furnizeze straturilor de sus o marime de bloc uniforma, de exemplu prin tratarea catorva sectoare ca unic bloc logic. Astfel, straturile de sus au de-a face doar cu dispozitive abstracte care folosesc toate aceeasi marime de bloc logica, independenta de marimea fizica de sector. La fel unele dispozitive de caracter isi trasmit datele byte cu byte (ex. modem-ul), in timp ce altele si le transmit in unitati mai mari (ex. interfetele de retea). Si aceste diferente trebuie ascunse.
Si amortizarea este o problema, atat pentru dispozitivele in bloc cat si pentru cele cu caractere. Pentru dispozitivele in bloc, hardware-ul insista in general pe citirea si scrierea blocurilor intregi dintr-o data, dar procesele utilizatoare sunt libere sa citeasca si sa scrie in unitati arbitrare. Daca un process utilizator scrie o jumatate de bloc, in mod normal sistemul de operare va tine datele in interior pana cand sunt scrise si restul datelor, moment in care intregul bloc poate fi transferat pe disk. Pentru dispozitivele cu caractere, utilizatorii pot sa introduca date in sistem mai repede decat poate acesta sa le scoata si de aceea este necesara amortizarea. Intrarea e tastatura care ajunge mai repede decat este nevoie necesita, de asemenea, amortizare.
In timp ce se creaza un fisier de date, noile blocuri de disk trebuie sa fie allocate fisierului. Pentru a realiza aceasta alocare, sistemul de operare are nevoie de o lista sau schema de biti ale blocurilor libere pe fiecare disk, dar algoritmul pentru localizarea unui bloc liber este independent de dispozitiv si poate fi facut pe un nivel superior driver-ului.
Unele dispozitive cum sunt cd-rom recorder pot fi utilizate in orice moment dat pentru un singur process. Sistemul de operare este cel care trebuie sa analizeze cererile de utilizare a dispozitivului si sa le accepte sau respinga in functie de disponibilitatea dispozitivului. Un mod simplu de-a rezolva aceste cereri este sa ceara proceselor sa execute comenzi de deschidere direct pe fisierele speciale pentru dispozitive. Daca dispozitivul nu este disponibil, comanda de deschidere nu se va executa. Un astfel de dispozitiv dedicat va fi eliberat doar dupa inchiderea sa.
Remedierea erorilor se face de catre driver-e. cele mai multe erori sunt strans legate de dispozitiv, astfel incat numai driver-ul stie ce trebuie facut (ex. incearca din nou, ignora, alarma). O eroare des intalnita este cauzata de un bloc de disk care a fost avariat si nu mai poate fi citit. Dupa ce driver-ul a incercat sa citeasca blocul respective de mai multe ori, renunta si informeaza software-ul independent de dispozitiv. De aici incolo este independent de dispozitiv modul in care eroarea va fi tratata. Daca eroarea a aparut in timpul citirii unui fisier utilizator poate fi suficienta transmiterea erorii inapoi catre apelant. Totusi daca a aparut in timpul citirii structurii unui system critic de date, asa cum este blocul care contine schema de biti care arata blocurile libere s-ar putea ca sistemul de operare sa nu aiba alta alternativa decat sa afiseze un mesaj de eroare si sa incheie.
E. Spatiul utilizatorului software-ului I/O
Desi cea mai mare parte a software-ului I/O se afla in interiorul sistemului de operare, o mica parte a lui este formata din biblioteci legate intre ele prin programe utilizatoare si chiar programe intregi ruland in afara kernel-ului. Apelarile sistemului, inclusive apelarile sistemului I/O sunt in moe normal facute prin functiile bibliotecii. Cand un procram C contine apelul
Count=write(fd, buffer, nbytes);
Functia write a bibliotecii va fi legata de program si continuta in programul binary present in memorie in timpul rularii. Colectarea tuturor acestor functii de biblioteca constituie in mod evident o parte a sistemului I/O.
In timp ce aceste functii fac putin mai mult decat sa isi inscrie parametrii in locul corespunzator pentru apelarea sistemului, exista alte functii I/O care intr-adevar lucreaza. Formatarea intrarii si iesirii se face prin functii din biblioteca. Un exemplu din C este printf, care ia un format de sir de caractere si posibil cateva variabile ca intrare, construieste un sir de caractere ASCII, si apoi apeleaza comanda scrie pentru a vizualiza sirul. Un exemplu de functie asemanatoare pentru intare este scanf care citeste intrarea si o depoziteaza in variabilele descries intr-un format de siruri de caractere folosind aceeasi sintaxa ca printf. Biblioteca I/O standard contine un numar de functii care implica I/O si functioneaza ca parte a programelor utilizatoare.
Nu tot software-ul I/O de la nivelul utilizatorului consta in functii de biblioteca. Alta categorie importanta este sistemul in spirala. Spiralarea este un mod de a trata dispozitivele I/O dedicate intr-un sistem de programare. Un dispozitiv in spirala obisnuit este imprimanta. Desi din punct de vedere tehnic ar fi mai usor sa I se permita oricarui process utilizator sa deschida fisierul special de caractere pentru imprimanta, sa presupunem ca un process l-ar deschide si timp de mai multe ore nu ar face nimic. Asta ar insemna ca nici alt proces n-ar mai putea printa nimic.
In schimb se creeaza un proces special numit daemon si un director special numit director de spiralare. Pentru a printa un fisier, un proces genereaza mai intai intregul fisier care trebuie printat si il depoziteaza in directorul de spiralare. Daemonul hotareste care este singurul proces caruia I se permite sa utilizeze fisierul special al imprimantei pentru a printa fisierele din director. Prin protejarea fisierului special impotriva folosirii directe de catre utilizator este eliminata posibilitatea ca cineva sa-l tina deschis mai mult decata este necesar.
Spiarlarea nu este folosita doar pentru imprimante. Se foloseste si in alte situatii. De exemplu transferul de fisiere printr-o retea foloseste adesea un daemon de retea. Pentru a trimite undeva un fisier, un utilizator il pune in disrectorul de spiralare pentru retea. Mai tarziu daemonul de retea il scoate si il transmite. Un caz particular de transmitere spiralata a unui fisier este sistemul de posta elecronica prin internet. Aceasta retea consta in milioane de aparate din toata lumea ce comunica folosind mai multe retele de computere. Pentru atrimite cuiva un mesaj se apeleaza un program cum este send, care accepta scrisoarea care trebuie trimisa si apoi o depoziteaza intr-un director de spiralare pentru a o transmite ulterior. Intregul sistem de mesaje ruleaza in afara sistemului de operare.
Figura 3-6 rezuma sistemul I/O aratand toate straturile precum si functiile principale ale fiecarui strat. Incepand de jos straturile sunt: hardware-ul, cererile de intrerupere, drivere de dispozitiv, software independent de dispozitiv si in cele din urma procesele utilizatoare.
Sagetile din figura 3-6 arata fluxul de control. Cand un program utilizator incearca sa citeasca un bloc dintr-un fisier, de exemplu, sistemul de operare este invocat pentru a duce apelul la sfarsit. Software-ul independent de dispozitiv verifica depozitul de blocuri, de exemplu. Daca blocul necesar nu este acolo acesta apeleaza driver-ul dispozitivului pentru a transmite cererea catre hardware. Apoi procesul este blocat pana operatia de pe disk sa incheiat.
Cand discul a terminat hardware-ul produce o intrerupere. Cererea de intrerupere este rulata pentru a descoperi ce sa intamplat adica, care este dispozitivul care solicita atentia in acel moment. Apoi extrage statutul de pe dispozitiv si porneste procesul resident pentru a finaliza cererea I/O si lasa procesul utilizator sa continue.
Fig 3-6. straturile sistemului I/O si functiile principale ale fiecarui strat.
3. Impasuri
Sistemele computerelor sunt pline de resurse care pot fi folosite de un singur process odata. Printer exemplele obisnuite se numara ploterele cu pat plat cd-rom reader si cd-rom recorder, sisteme de back-up pe banda de 8mm DAT si sloturile din tabla de process a sistemului. Existenta a doua procese care scriu simultan pe printer duce la erori. Existenta a doua procese ce utilizeaza acelasi slot din tabla de procese va duce, probabil la eronarea sistemului. In consecinta toate sistemele de operare au capacitatea sa garanteze temporar unui proces acces exclusiv la anumite resurse.
Pentru multe aplicatii un proces are nevoie de acces exclusiv la mai multe resurse nu doar la una singura. Ganditiva de exemplu la o companie de vanzari care se specializeaza in vanzarea unor harti demografice mari si detaliate ale SUA executate pe un plotter cu plat plat de 1m latime. Informatia demografica vine prin cd-rom si contine recensamantul si alte date. Sa presupunem ca procesul A cere unitatea de cd-rom si o obtine. Un moment mai tarziu procesul B cere pltter-ul si il obtine si el. Acum procesul A cere si el plotter-ul si se blocheaza asteptandu-l. in cele din urma procesul B cere cd-rom-ul si se blocheaza si el. In acest moment ambele procese sunt blocate si vor ramane asa pentru totdeauna. Aceasta situatie se numeste impas. Nu este bine sa aveti impasuri in sistemul dumneavoastra.
Impasurile pot aparea in multe alte situatii pe langa solocitarea dispozitivelor I/O dedicate. De exemplu intr-un sistem de baze de date un program poate fi nevoit sa blocheze mai multe inregistrari pe care ele le foloseste, pentru a evita conditile de competitie. Daca procesul A blocheaza inregistrarea R1 si procesul B blocheaza inregistrarea R2 si apoi fiecare proces incearca sa blocheze inregistrarea celuilalt avem de asemenea un impas. Astfel impasurile pot sa apara atat pentru resursele hardware cat si pentru software.
In aceasta sectiune vom analiza mai atent impasurile pentru a vedea atat modul in care apar cat si modul in care pot fi prevenite sau evitate. Ca exemplu vom vorbi despre obtinerea dispozitivelor fizice cum sunt benzile, cd-rom si plotter, deoarece acestea sunt usor de vizializat dar principiile si algoritmii sunt valabili si pentru alte tipuri de impasuri.
Dostları ilə paylaş: |