CATEGORII DOCUMENTE |
Sistemul de intrare/iesire ( I/O )
Una dintre cele mai importante functii ale sistemului de operare este gestionarea dispozitivelor periferice ale sistemului de calcul, functie care presupune pe de o parte generarea de comenzi catre dispozitive, tratarea intreruperilor si a posibilelor erori, iar pe de alta parte furnizarea unei interfete utilizator cat mai usor de folosit si cu un grad cat mai ridicat de standardizare.
Componenta sistemului de operare dedicata acestei functii este sistemul de intrare/iesire.
Obiectivele urmarite in proiectarea unui sistem I/O sunt:
independenta fata de codul de caractere - sistemul I/O trebuie sa fie capabil sa recunoasca diversele coduri de caractere utilizate de dispozitivele periferice si sa prezinte utilizatorului datele intr-un format standard;
independenta fata de dispozitivele periferice - presupune posibilitatea scrierii programelor intr-o maniera standard care sa nu necesite modificari la nivelul codului atunci cand tipul dispozitivului periferic utilizat este altul decat cel prevazut initial. Acest obiectiv se transpune in necesitatea furnizarii unor operatii a caror sintaxa si semantica sa fie cat mai asemanatoare pentru o clasa cat mai larga de dipozitive periferice. Mai mult, se vizeaza si denumirea uniforma a dispozitivelor periferice ( de obicei, fiecarui dispozitiv periferic ii este asociat un fisier, dispozitivele fiind denumite prin intermediul numelui fisierului asociat );
eficienta operatiilor - exista situatii in care dispozitivele periferice introduc intarzieri
de acces datorate pe de o parte diferentei mari dintre viteza de calcul a unitatii centrale si viteza de transfer a datelor si, pe de alta parte, diferentei mari dintre viteza
de transfer a datelor si viteza ansamblurilor mecanice mobile ce intra in componenta
multora dintre dispozitivele periferice. Aceste incetiniri ce pot sa apara in fluxul executiei impun utilizarea unor mecanisme care sa conduca la asigurarea cresterii eficientei: spooling, DMA etc.
1. Structura sistemului I/O 1.1. Structura hardware Dispozitivele I/O
Dispozitivele periferice pot fi clasificate in doua categorii: dispozitive bloc si
dispozitive caracter Dispozitivele bloc ( discul magnetic ) stocheaza informatia sub forma unor blocuri de dimensiune fixa, fiecare dintre acestea avand asociata o adresa cu ajutorul careia poate fi accesat individual. Dispozitivele caracter lucreaza cu siruri de caractere carora nu le confera o structurare pe blocuri. Acestea pot fi adresate individual si deci nu pot constitui obiectul unor opeartii de cautare. Din aceasta categorie fac parte imprimantele, adaptoarele de retea, mouse-ul, terminalele etc.
La granita dintre cele doua categorii mentionate se gasesc dispozitive ca unitatile de banda magnetica in cazul carora nu se poate implementa in mod eficient accesul aleatoriu, desi pot fi structurate bloc si pot furniza operatii de cautare.
Controllere
Dispozitivele periferice sunt in general formate dintr-o componenta mecanica si o componenta electronica. Componenta electronica este denumita controller, in timp ce componenta mecanica este dispozitivul propriu-zis.
In cazul unei operatii de citire de pe un disc magnetic, controller-ul este cel care pozitioneaza capetele de citire/scriere si citeste de pe suportul magnetic un sir de biti care cuprinde:
un antet care contine informatii inscrise la momentul formatarii discului magnetic, cum ar fi numarul cilindrului, al sectorului, dimensiunea unui sector etc.;
bitii de informatie stocati in sectorul respectiv;
un cod de corectie a erorilor.
Controller-ele asambleaza bit cu bit un bloc de date, caruia ii calculeaza suma de control ce trebuie sa coincida cu codul citit de pe disc. Abia dupa aceea blocul de date respectiv poate fi transferat in memoria principala.
Comunicatia dintre controller si unitatea centrala se realizeaza prin intermediul unui numar de registri care de cele mai multe ori fac parte din spatiul de adrese de memorie ( sunt mapati in memorie - memory mapped I/O ). Registri mapati in memorie se adreseaza la
fel ca orice alta locatie de memorie, singura diferenta fiind legata de timpul de acces care este mai redus. Acesti registri sunt utilizati de sistemul de operare pentru a inscrie parametri
si comenzi si pentru a citi starea dispozitivului respectiv si codurile de eroare. O comanda
odata acceptata de catre controller, sistemul de operare lasa dispozitivul sa o execute in timp
ce el palnifica alte sarcini. In moemtul terminarii operatiei controller-ul genereaza o intrerupere care permite sistemului de operare sa preia controlul si sa analizeze rezultatul.
Acces direct la memorie ( Direct Memory Access - DMA )
Mecanismul DMA presupune ca operatia de copiere in memorie ( in cadrul procesului de comunicare/transfer realizat cu un dispozitiv periferic ) sa fie efectuata de catre controller si nu de catre unitatea centrala, ceea ce conduce la o mai eficienta utilizare a acesteia din urma. Utilizarea acestui mecanism este justificata de necesitatea transferarii unui volum mare de date. Astfel, dupa ce continutul blocului este stocat in buffer-ul sau intern si verificat, controller-ul asteapta eliberarea magistralei sistemului si transfera intregul bloc in memorie. Abia dupa efectuarea transferului, controller-ul semnaleaza terminarea operatiei printr-o intrerupere.
Buffer-ul intern al controller-ului actioneaza in sensul preluarii vitezei relative intre operatia de citire a cuvintelor de pe disc ( se considera exemplul unei operatii de citire de pe discul magnetic ), pe de o parte, si operatia de transfer a acestora in memoria principala, pe
de alta parte. Aceasta viteza relativa se datoreaza in principal faptului ca magistrala locala a sistemului, fiind o resursa comuna pe care se desfasoara toate operatiile de transfer de date din cadrul sistemului, nu este de asteptat sa fie libera de fiecare data cand un controller intentioneaza sa efectueze un transfer.
In cazul utilizarii DMA trebuie furnizati controller-ului doi parametri suplimentari: adresa fizica a zonei de memorie in care trebuie copiate datele si numarul de octeti care se copiaza.
1.2. Structura software
Software-ul destinat gestiunii dispozitivelor periferice este structurat pe patru niveluri:
rutinele de tratare a intreruperilor;
driver-ele asociate dispozitivelor periferice;
programe sistem independente de dispozitive;
primitive de nivel utilizator.
Rutine de tratare a intreruperilor
In scopul utilizarii eficiente a unitatii centrale in sistemele care lucreaza in regim multitasking, un proces care initiaza o operatie de I/O va fi blocat, urmand sa fie trecut in starea ready de indata ce operatia va fi incheiata. Rolul rutinelor de tratare a intreruperilor este de a identifica sursa intreruperii ( adica dispozitivul care a generat-o ),
de a reinitializa linia de intrerupere respectiva, de a memora starea dispozitivului si de a
"trezi" procesul care a initiat operatia de I/O.
Drivere
Un driver accepta cereri de la nivelul software superior si le transpune in comenzi pe care le transmite controller-ului inscriind valori corespunzatoare in registrii acestuia din urma. Driver-ele inglobeaza in totalitate acea parte a codului care este dependenta de dispozitivele periferice asociate, fiind totusi, in general, capabile sa gestioneze mai multe tipuri de dispozitive periferice inrudite.
Programe sistem independente de dispozitive
Sarcinile ce revin acestui nivel software sunt:
asigurarea unei interfatari uniforme a tuturor driver-elor;
realizarea corespondentei dintre numele simbolice ale dispozitivelor ( numele fisierelor asociate ) si driver-ele corespunzatoare;
utilizarea unor buffere sistem. In cazul dispozitivelor bloc aceasta necesitate este dictata de faptul ca datele cunt citite/scrise in forma unor blocuri de dimensiune fixa,
in conditiile in care utilizatorul e liber sa manipuleze date de orice dimensiune. In situatia dispozitivelor caracter, necesitatea provine din faptul ca achizitionarea datelor de intrare/producerea datelor de iesire pot avea uneori viteze mai mari decat procesarea datelor de intrare/listarea ( afisarea ) datelor de iesire. Astfel, se impune
utilizarea unor buffere care sa preia aceste viteze
raportarea erorilor care pot aparea in conjunctie cu operatiile de I/O. Aceste erori sunt in general dependente de dispozitivele periferice si in consecinta sunt manipulate de drivere-ele asociate dispozitivelor. In acest context, sarcina acestui nivel este aceea de raportare a erorilor, in cazul in care acestea nu au putut fi remediate.
Primitive de nivel utilizator
Desi cea mai mare parte a sistemului I/O este inglobat in sistemul de operare, exista
si o paret a acestuia formata din biblioteci ce includ proceduri prin intermediul carora programele utilizator pot initia operatii in conjunctie cu dispozitivele periferice. Aceste proceduri au rolul de a transfera parametrii lor apelurilor de sistem pe care la initiaza, iar uneori ofera in plus posibilitatea formatarii datelor de intrare/iesire. Un aspect important este legat de faptul ca aceste primitive pot lucra in mod sincron sau asincron.
O primitiva sinvrona returneaza parametrii numai dupa ce operatia de I/O a fost efectiv realizata, ceea ce o recomanda pentru a fi utilizata in cazul operatilor cu durata redusa sau care poate fi estimata.
O primitiva asincrona are doar rolul de initiere a operatiei, ea returnand imediat cu un cod de eroare in cazul in care operatia nu poate fi efectuata sau zero daca operatia poate fi realizata. In consecinta, procesul isi poate continua executia in paralel cu efectuarea operatiei, putand eventual testa periodic starea de evolutie a acesteia. Momentul in care operatia se incheie este marcat printr-o notificare ( o procedura definita de utilizator si
asociata acestui eveniment ) pe care sistemul de operare o lanseaza automat. O problema esentiala legata de acest tip de primitive este data de disponibilitatea buffer-ului ce defineste zona de memorie in care se afla datele ce urmeaza a fi transferate: procesul initiator trebuie
sa evite citirea/scrierea continutului acestei zone atata timp cat operatia nu afost inca
terminata. Aceasta sarcina revine in general programatorului. Primitivele asincrone sunt in general utilizate in cazul operatiilor avand o durata mare sau greu de estimat.
Politica de confidentialitate | Termeni si conditii de utilizare |
Vizualizari: 1841
Importanta:
Termeni si conditii de utilizare | Contact
© SCRIGROUP 2024 . All rights reserved