Sunteți pe pagina 1din 35

ADMINISTRAREA UNITILOR(perifericelor)

Organizarea sistemului de I/O Interfa API Administrarea direct a I/O cu testare periodic(polling) Administrarea operaiilor de I/O orientat pe ntreruperi Accesul direct la memorie Utilizarea zonelor tampon(buffering)

Organizarea sistemului de I/O.

Un sistem de I/O trebuie s rspund la cerinele urmtoare: S poat recunoate caractere, indiferent de codul n care acestea sunt reprezentate. S realizeze independena fa de dispozitvele periferice a programelor, n sensul c acestea nu trebuie s sufere modificri importante atunci cnd tipul dispozitivului periferic utilizat este altul dect cel prevzut iniial. Acest lucru este posibil prin furnizarea unor operaii a cror sintax i semantic s fie acceai pentru o clas ct mai mare de uniti de I/O, precum i denumirea uniform a perifericelor, lucru realizat prin asocierea de fiiere acestor dispozitive. Realizarea operaiilor ntr-un timp ct mai mic, adic gsirea unor metode care s anihileze diferenele ntre viteza de operare a CPU i cea a perifericelor.

Unitile de I/O (perifericele) sunt folosite pentru a plasa date n memoria primar i pentru a stoca cantiti mari de date pentru o perioad lung de timp. Ele pot fi: - uniti de stocare (uniti bloc): discurile; - uniti de tip caracter: tastatura, mouse-ul, display-ul terminalului - uniti de comunicaie:portul serial conectat la un modem sau o interfa la reea. Dispozitivele bloc stocheaz informaia sub forma unor blocuri de dimensiune fix, care pot fi accesate individual, prin intermediul unei adrese. Dispozitivele de tip caracter lucreaz cu iruri de caractere care nu sunt structurate ca blocuri. Exist i dispozitive periferice care nu pot fi ncadrate n niciuna dintre categoriile descrise anterior, cum este cazul ceasului n timp real, a crui sarcin este de a genera ntreruperi la intervale bine definite. n sistemele de operare moderne, administrarea unitilor este implementat prin interaciunea driverilor de unitate i ntreruperilor (metoda de administrare a I/O orientat pe drivere i ntreruperi) sau prin folosirea numai a driverilor prin evitarea ntreruperilor (metoda administrrii directe a I/O cu testare periodic - polling). Figura urm. ilustreaz componentele implicate n realizarea operaiilor de I/O.

Proces(aplicaie program)
API

Administratorul de fiiere Interfaa Hardware

Driverul de unitate

Comand

Stare Controllerul de unitate

Date

Fiecare unitate folosete un controller de unitate pentru a o conecta la adresele calculatorului i la magistrala de date. Controller-ul ofer un set de componente fizice pe care instruciunile CPU le pot manipula pentru a efectua operaii de I/O. Ca i construcie, controller-ele difer, dar fiecare ofer aceeai interfa de baz. SO ascunde aceste detalii de funcionare ale controllerlor, oferind programatorilor funcii abstracte pentru accesul la o unitate, scrierea/citirea de informaii etc. n timpul lucrului, orice unitate ar trebui monitorizat de ctre CPU. Acest lucru este fcut prin controller-ul de unitate. Interfaa ntre controller i unitate caut s rezolve problema compatibilitii ntre uniti fabricate de diveri productori. O astfel de interfa este SCSI (Small Computer Serial Interface).

Interfaa ntre magistral i controller este important pentru cei care se ocup cu adugarea unei noi uniti la arhitectura existent, pentru ca unitatea adugat s poat lucra mpreun cu celelalte componente. Interfaa ntre componenta software i controller se realizeaz prin intermediul regitrilor controller-ului. Aceast interfa definete modul cum componenta soft manipuleaz controller-ul pentru a executa operaiile de I/O. Figura urm. ilustreaz interfaa software cu un controller. Unitile conin dou fanioane n registrul lor de stare: busy i done. Dac ambele fanioane sunt setate pe 0(false), atunci componenta software poate plasa o comand n registrul de comenzi pentru a activa unitatea. Dup ce componenta software a pus informaii ntr-unul sau mai muli regitri de date, pentru o operaie de ieire, unitatea este disponibil pentru a fi utilizat. Prezena unei noi comenzi de I/O are ca efect poziionarea fanionului busy pe true, nceperea efecturii operaiei i datele din registrul de date sunt scrise pe unitate.

busy

done

Cod de eroare

Comand

Stare

Data 0 Data 1

Busy 0 0 1 1

Done 0 liber 1 terminat 0 lucru 1 nedefinit

Data n-1

O operaie de citire se efectueaz dual. Procesul poate detecta starea operaiei verificnd registrul de stare. Cnd operaia de I/O a fost terminat(cu succes sau eec), controller-ul terge fanionul busy i seteaz fanionul done. Odat cu terminarea unei operaii read, respective write datele sunt copiate de pe unitate n registrul de date, respectiv invers. Dac dup o operaie de scriere ambele fanioane ale unitii au fost setate pe false, scrierea de noi informaii n registrul de date va fi sigur. Cnd procesul citete date din controller, acesta terge registrul done, adic controller-ul este din nou gata de utilizare. Dac operaia se termin eronat, cmpul cod de eroare va fi setat. Controller-ele pot conine o mic zon de memorie (buffer), pentru a stoca datele dup ce au fost citite, nainte de a fi transmise CPU pentru prelucrare. Invers, n memorie pot fi pstrate datele care ateapt s fie scrise. Controller-ul de unitate furnizeaz o interfa folosit de ctre mediul microprogramat de la cel mai nalt nivel. Componenta SO care manipuleaz dispozitivele de I/O este format din driverele de unitate.

Drivere de unitate. Driverul are dou sarcini principale: Implementeaz o interfa API (Application Programming Interface) la care procesul are acces. Furnizeaz operaii dependente de unitate, corespunztoare funciilor implementate de API. Fiecare sistem de operare definete o arhitectur pentru sistemul su de administrare a unitilor. Nu exist un model universal, dar fiecare din aceste sisteme conine o API i o interfa ntre driver i nucleul SO. API furnizeaz un set de funcii pe care un programator le poate apela pentru a utiliza o unitate. n general, o unitate este utilizat pentru comunicare sau pentru stocare. Astfel, unitile de intrare produc informaii care pot fi transmise ctre diferite medii de comunicaie sau ctre uniti de stocare a datelor. Procesele produc informaii care, fie sunt transmise printr-un mediu de comunicaie, fie sunt stocate pe un periferic pentru a fi utilizate mai trziu.

Administratorul unitii trebuie s urmreasc starea unitii, cnd este liber, cnd este folosit i care proces o folosete. Administratorul unitii poate ntreine, n plus fa de informaiile pstrate n tabela de stare a unitii, un descriptor de unitate care specific alte caracteristici ale unitii, determinate de proiectantul de software. Deci interfeele driverelor includ funciile de deschidere(open) i nchidere(close) pentru a permite administratorului s nceap/termine utilizarea unitii de ctre un proces. Comanda open aloc perifericul i iniializeaz tabelele i unitatea pentru utilizare iar close terge informaiile scrise n tabele, elibernd astfel unitatea. Fiecare driver de unitate furnizeaz funcii care s permit unui program s citeasc/scrie de pe/pe o unitate. Funciile de citire/scriere difer din punct de vedere sintactic n funcie de tipul unitii(caracter sau bloc).

De exemplu, unitile de tip bloc conin comenzi de tipul read(), write() i seek(), pentru a citi, scrie de pe/pe unitatea respectiv i pentru a accesa direct un bloc de informaii. n cazul unitilor de tip caracter, cum este cazul tastaturii sau ecranului unui monitor, apelurile de sistem ale acesteia permit comenzi de tipul get() sau put(), pentru citirea/scrierea caracter cu caracter. Semantica fiecrei funcii depinde de modul de accesare a unitii (secvenial sau direct). Proiectantul SO trebuie s furnizeze i alte funcii API care s permit unui proces, de exemplu s aloce/elibereze o unitate, s pun sub/scoat de sub tensiune un disc, s modifice imaginea pe un anumit display etc.

Observaii. Se reduce cantitatea de informaii pe care procesul (aplicaia) trebuie s le cunoasc pentru a utiliza unitatea respectiv. Fiecare driver este specific unei anumite uniti, fiind capabil s furnizeze controllerului comenzile corespunztoare, s interpreteze corect coninutul registrului de stare al controllerului i s transforme date la/de la regitrii de date ai controllerului, n confomitate cu cerinele operaiei respective. Un proces care folosete o unitate, i transmite acesteia comenzi i schimb date cu driverul de administrare al unitii respective. Driverele sunt componente ale administratorului de unitate folosite de ctre un proces pentru a cere efectuarea unei operaii de I/O. Cnd procesul face o cerere ctre driverul de unitate, acesta o translateaz ntr-o aciune dependent de controller, pentru a realiza interaciunea cu unitatea respectiv. Dup ce unitatea i ncepe lucrul, driverul fie testeaz periodic controllerul pentru a detecta sfritul operaiei, fie plaseaz informaii n tabela de stare a unitii pentru a pregti lansarea unei ntreruperi.

Interfaa cu nucleul

Driverul de unitate execut instruciuni privilegiate, atunci cnd interacioneaz cu controllerul de unitate. Deci driverul trebuie s fie executat ca parte a SO i nu ca parte a programului. Driverul trebuie s fie capabil s citeasc/scrie informaii din/n spaiile de adrese ale diferitelor procese, deoarece aceeai unitate poate fi folosit de ctre diferite procese. n sistemele mai vechi, driverul este ncorporat n SO prin modificarea codului surs al SO i, apoi recompilarea acestuia. Deci, proprietarul sistemului de calcul trebuie s dein sursele SO i s cunoasc modul cum trebuie realizat compilarea lui. n condiiile existenei sistemelor deschise, acest mod de lucru devine inacceptabil.

SO moderne simplific instalarea driverelor prin utilizarea driverelor de unitate reconfigurabile. Astfel de sisteme permit adugarea unui driver de unitate fr a fi necesar recompilarea SO, fiind necesar numai reconfigurarea sistemului printr-un set de operaii oferite chiar de ctre SO. Pentru aceasta, la nivelul fiecrei uniti, exist o tabel care conine pointeri ctre modulele surs ale funciilor interfeei. Un driver de unitate reconfigurabil trebuie s fie standardizat, adic s ofere aceeai interfa. Deoarece driverul de unitate este adugat nucleului dup ce acesta a fost compilat, nucleul trebuie s furnizeze o interfa care s permit driverului de unitate s aloce spaiu pentru buffere, s manipuleze tabele ale nucleului etc.

Interfaa cu CPU. Perifericele i CPU sunt componente distincte care sunt capabile s lucreze independent. Administratorul unitii trebuie s furnizeze metodele prin care s se coordoneze execuia procesului i operaiile de I/O. n efectuarea operaiilor de I/O sunt implicate trei componente: controllerul, driverul i apeluri de funcii de I/O coninute n programul n execuie. ntre acestea trebuie s existe o bun coordonare. Deoarece controllerul este o component hardware, el ori execut o operatie de I/O, ori este n ateptare activ pentru a primi n registrul de comenzi codul unei operaii. Driverul unitii este o component software a SO invocat de ctre procesul n execuie. Fiecare funcie a driverului este o procedur apelat de ctre procesul n execuie. Toate aceste componente software implicate n lucrul cu controllerul unitii sunt nite procese, gestionate de ctre CPU pe baza algoritmilor de planificare studiai.

Administrarea direct a I/O cu testare periodic(polling) Administrarea direct a I/O se refer la efectuarea operaiilor de I/O cu participarea CPU, care este responsabil de transferul datelor ntre memoria intern a SC i regitrii de date ai controllerului. CPU pornete unitatea i testeaz periodic registrul de stare al acesteia, pentru a determina momentul cnd operaia s-a terminat. n cazul efecturii unei operaii de citire, aceast metod const n urmtorii pai: 1. Procesul n execuie(corespunzator unei aplicaii) cere efectuarea unei operaii read. 2. Driverul de unitate(specificat n comanda de citire) testeaz registrul de stare pentru a vedea dac unitatea este liber. Dac unitatea este ocupat, driverul asteapt pn cnd aceasta se elibereaz (ateptare activ), dup care se trece la pasul urmtor. 3. Driverul pune codul comenzii de intrare n registrul comand al controllerului, pornind astfel unitatea. 4. Driverul citete n mod repetat registrul de stare, atta timp ct este n ateptarea terminrii operaiei. 5. Driverul copiaz coninutul regitrilor de date ai controlerului n spaiul de memorie al procesului utilizator. 6. Dup terminarea operaiei, se revine la urmtoarea instruciune din program.

Paii necesari pentru a executa o operaie de ieire(scriere) sunt: 1. Procesul n execuie(aplicaia) cere execuia unei operaii write. 2. Driverul unitii specificate interogheaz registrul de stare al acesteia, pentru a vedea dac unitatea este liber. Dac unitatea este ocupat, driverul ateapt pn cnd aceasta devine liber, dup care se trece la pasul urmtor. 3. Driverul transfer date din spaiul de memorie al procesului n regitrii de date ai controllerului. 4. Driverul scrie un cod de comand de ieire n registrul comand, pornind astfel unitatea. 5. Driverul citete n mod repetat registrul de stare, atta timp ct ateapt terminarea operaiei. 6. Dup terminarea operaiei, se revine la urmtoarea instruciune din program. Observaii. Fiecare operaie de I/O necesit o coordonare a componentelor software i hardware implicate. Prin metoda anterioar, aceast coordonare este realizat prin ncapsularea prii soft a interaciunii (driverul), cu controllerul unitii respective. Aceast metod duce la ncrcarea CPU cu sarcini suplimentare, i anume verificarea periodic a strii controllerului.

Manipularea intreruperilor Execuia unui program. CPU extrage i execut instruciunile cod main ale procesului ncrcat n memoria intern. n acest sens, CPU conine: o component care extrage o instruciune memorat ntr-o locaie de memorie; o component care decodific instruciunea; o component care se ocup de execuia instruciunii, mpreun cu alte componente ale SC. Regitrii contor de program PC (Program Counter), respectiv registrul instruciune IR (Instrucion Register), conin adresa de memorie, respectiv o copie a instruciunii n curs de prelucrare.

Modul de operare al CPU se desfoar dup urmtorul algoritm: PC = <Adresa de nceput a procesului> ; IR = M[PC]; HaltFlag = CLEAR; While (HaltFlag nu este setat n timpul execuiei ) { PC = PC+1; Execute(IR); IR = M[PC]; } Vectorul M identific locaiile de memorie intern ale SC, adic M[i] reprezint locaia de memorie i. Cnd un proces urmeaz s fie executat, PC este ncrcat cu adresa primei sale instruciuni, iar n IR este ncrcat codul instruciunii respective. Dup terminarea execuiei unei instruciuni, PC este incrementat, adic se trece la execuia urmtoarei instruciuni, .a.m.d. Fanionul HaltFlag este testat nainte de a se trece la execuia instruciunii, pentru a se verifica dac CPU este oprit. Execute reprezint procedura care corespunde instruciunii extrase.

Testarea fanioanele busy-done de ctre CPU prin intermediul driverelor de unitate duce la utilizarea ineficient a CPU. Cea mai bun soluie pentru desfurarea paralel a operaiilor de I/O i a activitii CPU, este ca atunci cnd operaia de I/O se termin, s se semanaleze acest lucru procesorului, lucru care se realizeaz prin intermediul ntreruperilor. n partea de hardware este ncorporat un fanion InReq (Interrupt Request) i unitatea de control este astfel conceput nct s poat verifica fanionul IR de fiecare dat cnd extrage o nou instruciune. Algoritmul de extragere i execuie al instruciunilor procesului atunci cnd SC folosete ntreruperi este: While (HaltFlag nu este setat) { IR = M[PC]; PC = PC + 1; Execute(IR); If (InReq) // Are loc ntrerupere procesului curernt {M[0] = PC; // Salveaz valoarea curent a lui PC la adresa 0 PC=M[1]} }

Partea de hardware conecteaz toate fanioanele done ale unitilor la fanionul InReq prin efectuarea unei operaii SAU. Oricnd este setat un fanion done al unui controller, fanionul InReq va fi i el setat. CPU va fi atenionat despre terminarea operaiei de I/O n intervalul de timp ct execut o instruciune, urmnd ca dup terminarea acesteia s trateze ntreruperea respectiv. Semnalul de la componenta hardware, la cea software (ntreruperea) are ca efect oprirea execuiei secvenei de instruciuni ale procesului respectiv de ctre processor (adresate de ctre PC) i saltul la o nou secven de instruciuni, a crei adres este coninut la o adres de memorie(de exemplu M[1] ). nainte de a se efectua saltul, valoarea lui PC (adresa instruciunii care urmez s fie executat) mpreun cu starea procesului sunt salvate prin intermediul hardwarelui. Adresa componentei SO care manipuleaz ntreruperile (IH - Interrupt Handler) este memorat n locaia de memorie M[1].

Cnd IH i ncepe execuia, regitrii CPU conin valori care urmeaz s fie folosite de ctre procesul care a fost ntrerupt. IH trebuie s execute o comutare de context pentru a salva coninutul tuturor regitrilor de stare i generali utilizai de proces i s-i pun propriile valori n regitrii CPU pentru a putea realiza terminarea operaiei de I/O corespunztoare ntreruperii lansate. Algoritmul dup care lucreaz IH este: SaveProcessorState(); For (i=0;i<Numrul de uniti; i++) If (Device[i].done == 1) goto device_handler(i); If (InReq && InterruptEnabled) { DisableInterrupts(); M[0] = PC; PC = M[1] }

IH testeaz valorile fanioanelor done ale controllerelor de unitate pentru a determina care unitate a terminat operaia de I/O(a cauzat ntreruperea). Dac dou sau mai multe uniti termin operaia de I/O n timpul execuiei aceleiai instruc. cod main, atunci, se va detecta numai prima dintre ele. Odat ce cauza ntreruperii a fost determinat, IH face un salt la codul ntreruperii coresp.unitii a crei terminare a operaiei de I/O trebuie tratat. Dac o ntrerupere este declanat n momentul cnd IH este n timpul execuiei, adic trateaz o ntrerupere aprut anterior, aceasta va atepta pn la terminarea ntrerup. ant. Dac IH ar trata ambele ntreruperi n paralel, ar exista posibilitatea ca apariia unor erori n execuia uneia dintre ntruperi s duc la eecul execuiei ambelor ntreruperi. Orice instruciune care seteaz fanionul HaltFlag al CPU este o instruciune privilegiat, deoarece poziionarea pe TRUE a lui HaltFlag are ca efect oprirea execuiei oricrei instruciuni. Dac CPU lucreaz n mod utilizator i un proces dorete s nceap execuia n modul supervizor, atunci modul de lucru este comutat din modul utilizator n cel supervizor si CPU va ncepe s execute instruciunile nucleului sistemului. Modul supervizor este setat printr-o instruciune cod main trap. Mai nti CPU comut din modul utilizator n supervizor, dup care va sri la o adres care conine adresa acelei secvene de instruciuni(ntreruperi) corespunztoare argumentului instruciunii trap.

Administrarea operaiilor de I/O orientat pe ntreruperi

Din punct de vedere funcional, operaia de I/O este realizat prin cooperarea mai multor componente hard i soft, i anume: Driverul de unitate, care declaneaz operaia. Tabela de stare a unitii. Administratorul (handler-ul) ntreruperilor. Administratorul unitii. Pentru a realiza o operaie de intrare sunt efectuai urmtorii pai: 1. Procesul cere efectuarea unei operaii read. 2. Driverul interogheaz registrul de stare pentru a vedea dac unitatea este liber. Dac este ocupat, driverul ateapt ca aceasta s devin liber (ateptare activ), dup care se trece la pasul urmtor. 3. Driverul pune codul operaiei n registrul comand al controllerului, pornind astfel unitatea.

4. Driverul i termin sarcina, salveaz informaia cu privire la operaia pe care a nceput-o n intrarea din tabela de stare a unitilor, corespunztoare unitii folosite; aceasta conine adresa de retur din procesul care a lansat operaia i ali parametri speciali ai operaiei de I/O. Astfel, din acest moment, CPU poate fi folosit de ctre alte programe, deci administratorul unitii transmite un mesaj corespunztor componentei de planificare a administratorului de procese. 5. Unitatea termin de efectuat operaia i atunci lanseaz o ntrerupere ctre CPU; de rezolvarea acesteia se va ocupa mai departe handler-ul de ntreruperi. 6. Administratorul(handler-ul) ntreruperilor determin care unitate a cauzat ntreruperea, dup care face un salt la administratorul (handler-ul) acelei uniti. 7. Administratorul unitii gsete informaiile de stare ale unitii de I/O n tabela de stare a unitilor; sunt utilizate pentru terminarea operaiei. 8. Administratorul unitilor copiaz coninutul regitrilor de date ai controllerului n spaiul de memorie al procesului. 9. Administratorul unitii transfer controlul procesului apelant.

Observaii. Operaia de ieire se desfoar similar. Din punctul de vedere al procesului n execuie, aceast activitate are aceeai semnificaie ca oricare apel de procedur. Cnd este folosit o instruciune read ntr-un program, aceasta trebuie s se termine nainte ca urmtoarea instruciune s fie executat. Dac CPU a nceput s execute o instrucuine n care este implicat o variabil n care s-a efectuat citirea, dup ce driverul de unitate a nceput s execute operaia de citire, dar nainte ca ea s se termine, atunci instruciunea respectiv va fi executat folosind o valoare veche a variabilei respective, nu cea care este n curs de citire de la unitate. Pentru a preveni aceasta situaie SO blocheaz explicit procesul care a iniiat apelul read. SO ateapt ca procesul s termine operaia de I/O nainte de a executa instruciunea urmtoare. Dei procesul nsui nu este capabil s obin avantajele desfurrii n paralel a activitii CPU i a operaiilor de I/O, totui SO poate comuta CPU la un alt proces, oricnd un proces cere efectuarea unei operatii de I/O. Astfel, perfomanele generale ale sistemului pot fi mbuntite prin lucrul n paralel al CPU, cu efectuarea unei operaii de I/O. Cnd operaia de I/O s-a terminat, procesul care a iniiat operaia va fi replanificat. Mecanismul de planificarea al proceselor va interveni att n momentul terminrii operaiei de I/O, ct i atunci cnd se realizeaz o serializare a operaiei de I/O i a instruciunii imediat urmtoare acesteia.

I/O cu corespondenta in memorie (Memory-Mapped I/O)


Fiecare controller conine regitri de control folosii pentru a comunica cu procesorul; prin aceti regitri SO poate transmite comenzi sau poate consulta starea echipamentului. De asemenea, multe echipamente au o memorie tampon de date in care SO poate citi sau scrie. Exemplu. Memoria video este o memorie tampon de tip RAM, n care se scriu date ce se vor transforma n pixeli pe ecran. Procesorul poate comunica cu regitrii de control i memoria tampon a unui echipament prin trei modaliti, care vor fi prezentate n continuare. (i) Fiecrui registru i se asociaz un numr de PORT DE I/O, care este un ntreg reprezentat pe 8 sau 16 bii; folosind instructiuni speciale de I/O ca: IN REG, PORT i OUT PORT, REG procesorul poate copia registrul de control PORT n registrul su REG, respectiv poate scrie coninutul registruluin REG ntr-un registru de control. Spaiul de adrese pentru memorie i cel pentru I/O sunt diferite. Exemplu. Instruciunile "IN REG,6" si "MOV REG,6" au semnificaii diferite: prima citete n registrul REG coninutul portului 6; a doua citeste n REG cuvntul de memorie de la adresa 6; deci cei doi 6 se refer la zone de adrese de memorie diferite i independente. Aceasta metoda a fost folosita de cele mai multe dintre primele calculatoare, inclusiv IBM 360 si succesorii sai.

(ii) Regitrii de control sunt pui n spaiul de adrese de memorie. Fiecrui registru de control i este repartizat o adres unic de memorie, creia nu-i corespunde o locaie de memorie fizica sau virtuala. Aceste sisteme se numesc I/O CU CORESPONDENTA IN MEMORIE (MEMORYMAPPED I/O). Aceast metod a fost introdus de minicalculatorul PDP11. De regul, adresele alocate regitrilor de control se afl la sfritul spaiului de adrese. (iii) O schema hibrid folosete o memorie tampon de I/O n spaiul de adrese de memorie i porturi de I/O pentru regitrii de control. Exemplu Pentium utilizeaz aceast arhitectur, cu adresele 640K - 1M rezervate pentru memoriile tampon ale echipamentelor compatibile cu IMB PC i porturi de I/O de la 0 la 64K. Toate aceste scheme functioneaza astfel: - Cnd procesorul vrea s citeasc un cuvnt, fie din memorie fie dintr-un port de I/O, pune adresa dorit pe liniile de adres ale magistralei (bus) i apoi transmite un semnal de citire pe linia de control a magistralei. Pe o alt linie a magistralei pune specificaia dac este vorba de spaiul de adrese de memorie sau spaiul de I/O. Atunci fie memoria, fie echipamentul de I/O va rpunde cererii. - Daca exista doar spatiu de memorie, atunci fiecare modul de memorie si fiecare echipament de I/O compara liniile de adresa cu domeniul de adrese pe care il foloseste; daca adresa se afla in domeniul sau, raspunde cererii, deoarece nici o adresa nu este repartizata atat memoriei cat si echipamentelor de I/O(nu exista ambiguitate).

Avantajele sistemului I/O cu coresponden n memorie. n cazul (i) sunt necesare instruciuni speciale de I/O pentru citirea/ scrierea la porturi (IN/OUT), care nu se regsesc n limbajele C/C++, astfel nct este necesar folosirea limbajului de asamblare. In cazul (ii) regitrii de control ai echipamentelor se pot asimila cu simple variabile alocate n memorie i se pot accesa n C/C++ ca orice alta variabil, deci driverele pentru echipamente pot fi scrise n aceste limbaje evoluate. Nu este necesar un mecanism de protecie suplimentar pentru a mpiedica procesele utilizator s efectueze operatii de I/O. E suficient ca SO s nu permit includerea poriunii de spaiu de adrese ce conine regitrii de control n spaiul virtual de adrese ale vreunui utilizator. Dac fiecare echipament are regitrii de control n pagini diferite ale spaiului de adrese, SO poate permite unui utilizator s controleze anumite echipamente, incluznd paginile respective n tabela lui de pagini.n felul acesta, drivere diferite pot fi plasate n spaii de adrese diferite, reducndu-se dimensiunea nucleului i fcnd totodat ca driverele s nu intefereze ntre ele. Aceleai instruciuni care pot referenia memoria pot iniializa i regitrii de control.

Accesul direct la memorie. n cazul accesrii directe a perifericelor de ctre CPU cu testare periodic, CPU este utilizat pentru a transfera date ntre regitrii de date ai controllerului i memoria primar. Driverul de unitate copiaz date din zona de date a procesului, n controller pentru fiecare operaie de ieire i invers, pentru operaiile de intrare. n cazul utilizrii ntreruperilor, administratorul unitii se ocup cu sarcina de transfer. Ambele modaliti presupun implicarea CPU, deci un consum al timpului su. Multe dintre calculatoarele moderne folosesc un alt mecanism care cere o implicare a CPU mai redus n efectuarea acestor operaii, prin utilizarea unui procesor specializat numit controller DMA (Direct Memory Access). Mecanismul DMA presupune c operaia de copiere n memorie s fie efectuat de ctre controller i nu de ctre unitatea central. nelegerea ntre controllerul DMA i controllerul de unitate este realizat prin intermediul unei perechi de semnale numite cerere DMA i confirmare DMA. Cnd are date de transmis, controllerul de unitate iniiaz o cerere DMA i ateapt pn cnd primete o confirmare DMA. Dup ce s-a efectuat transferul, controllerul DMA semnaleaz terminarea operaiei printr-o ntrerupere. Dei controllerul DMA lucreaz fr a ine ocupat CPU, totui cele dou concureaz pentru obinerea accesului la magistral. Cu toate acestea, DMA crete performanele calculatorului, n sensul c operaiile de I/O se fac printr-o participare mai restrns a CPU.

Procesul de transfer al informaiilor de pe disc, folosind DMA se desfoar astfel: 1. Driverului de unitate i se comunic s transmit date n bufferul de la adresa x. 2. Driverul de unitate transmite controllerului de disc s transfere c cuvinte de memorie de pe disc n bufferul de la adresa x. 3. Controllerul de disc ncepe transferul DMA. 4. Controllerul de disc transmite fiecare cuvnt controllerului DMA. 5. Controllerul DMA transfer cuvintele primite n bufferul de la adresa x, incrementnd adresa de memorie i decrementnd c, pn cnd c=0. 6. Cnd c=0, controllerul DMA semnaleaz CPU prin intermediul unei ntreruperi, c transferul de date s-a terminat.

Observaii. - Folosind DMA, controllerul de unitate nu trebuie s conin obligatoriu regitrii de date, deoarece controllerul DMA poate face transferul direct de la/la unitate. - Controllerul trebuie s conin un registru de adrese, n care se ncarc un pointer ctre un anumit bloc de memorie, de unde controllerul preia informaii sau depune informaii. - De asemenea, trebuie s cunoasc numrul de octei ai blocului pe care trebuie s-l manevreze. -Anumite calculatoare folosesc adrese de memorie fizic pentru DMA; altele, mai perfecionate execut transferul folosind adrese virtuale, adic adrese din memoria secundar, prin mecanismul denumit DVMA(Direct Virtual Memory Acces).

Utilizarea zonelor tampon(buffering) Utilizarea zonelor tampon la intrare (input buffering) este tehnica prin care informaiile citite de la un dispozitiv de intrare sunt depuse ntr-o zon de memorie primar, nainte ca procesul s le solicite pentru a le prelucra. Utilizarea zonelor tampon la ieire (output buffering) este metoda prin care datele de ieire sunt salvate n memorie i apoi scrise pe o anumit unitate, n acelai timp cu continuarea execuiei procesului. Buffering-ul are ca scop lucrul n paralel al CPU i unitilor periferice. Pentru a nelege mai bine cum buffering-ul poate crete performanele sistemului de calcul, s considerm cteva caracteristici ale proceselor: - Anumite procese sunt orientate ctre operaii de I/O, consumnd o mare cantitate de timp pentru a efectua aceste operaii. - Alte procese sunt orientate spre calcule. - Multe procese conin faze n care sunt orientate ctre operaii de I/O sau faze cnd sunt orientate ctre calcule. Driverul poate gestiona unul sau mai multe buffere, unde depune caracterele citite, nainte ca acestea s fie prelucrate de ctre procesul care a iniiat cererea, respectiv de unde preia caracterele depuse de CPU(procesul utilizator) la scriere.

Numrul de buffere poate fi extins de la 2 la n. Productorul de date (controllerul n cazul operaiilor de citire, respectiv CPU pentru operaiile de scriere) scrie n bufferul i n timp ce consumatorul (controllerul n cazul operaiilor de scriere, respectiv CPU n cazul operaiilor de citire) citete din bufferul j. n aceast configuraie, bufferele de la j la n-1 i de la 0 la i-1 sunt pline. n timp ce productorul introduce date n bufferul i, consumatorul citete date din bufferele j, j+1,...,n-1 i 0,1,...,i-1. Reciproc, productorul poate umple bufferele i, i+1,...,j-1 n timp ce consumatorul citete bufferul j. n aceast tehnic de dispunere circular a bufferelor, productorul nu poate trece n zona bufferelor administrate de consumator, deoarece el poate scrie peste buffere care nu au fost nc citite. Productorul poate scrie date numai n bufferele pn la j-1 n timp ce datele din bufferul j ateapt s fie prelucrate. n mod similar, consumatorul, nu poate trece n zonele administrate de productor deoarece el ar atepta s citeasc informaii, nainte ca acestea s fi fost plasate n zonele respective de ctre productor.

Observaii. Numrul bufferelor de citire, respectiv de


scriere trebuie ales n funcie de tipul proceselor. Pentru un proces orientat ctre I/O este mai potrivit s se aloce un numr ct mai mare de buffere de citire, pe cnd pentru un proces orientat spre calcule este necesar ca numrul de buffere de scriere s fie mai mare. Orice proces poate fi la un moment dat orientat ctre I/O, ca mai trziu s devin orientat ctre calcule i reciproc. Deci se impune un mecanism de comutare a procesului dintr-o stare n alta i, corespunztor de modificare a configuraiei zonelor tampon.

S-ar putea să vă placă și