Documente Academic
Documente Profesional
Documente Cultură
Curs nr. 12
6. Sistemul de I/O
Una dintre cele mai importante funcii ale sistemului de operare este
gestionarea dispozitivelor periferice ale sistemului de calcul. Acest lucru presupune
generarea de comenzi ctre dispozitive, tratarea ntreruperilor i a erorilor posibile
precum i furnizarea unei interfee utilizator ct mai uor de utilizat i cu un grad ct
mai ridicat de standardizare.
Sistemul de I/O este partea care se ocup de realizarea acestor funcii ale
sistemului de operare. n acest domeniu este destul de dificil de realizat o generalizare
din cauza multitudinii de dispozitive periferice, fiecare cu caracteristicile lui:
- viteza de acces variaz cu cteva ordine de mrime de la un dispozitiv la
altul;
- unitatea de transfer poate fi caracter, octet, cuvnt, bloc sau nregistrare,
n funcie de natura dispozitivului periferic;
- reprezentarea datelor datele pot fi codificate n diverse moduri,
depinznd de diferite medii de intrare/ieire;
- operaiile posibile cu un anumit dispozitiv I/O - sunt determinate n
principiu de sarcina pe care dispozitivul o ndeplinete n cadrul
sistemului. Astfel, dispozitivele se clasific n dispozitive de intrare
(tastatura, mouse) i dispozitive de ieire (display, imprimanta) n funcie
de sensul n care se vehiculeaz informaia. Sunt dispozitive care pot
vehicula informaie n ambele sensuri (discurile i benzile magnetice,
adaptoarele de reea). Operaiile de citire/scriere aplicabile n conjuncie cu
anumite dispozitive nu au sens pentru altele.
- condiiile de eroare au diferite cauze (de la lipsa hrtiei la eroarea
codului de control pentru un transfer de date) i implicit modalitile de
tratare sunt diferite.
Obiectivele care se urmresc la proiectarea unui sistem de I/O sunt:
- independena fa de codul de caractere sistemul de I/O trebuie s
recunoasc diversele coduri de caractere utilizate de dispozitivele
periferice i s prezinte datele ntr-un format standard.
- independena fa de dispozitivele periferice posibilitatea scrierii
programelor, astfel nct s nu necesite modificri ale codului atunci cnd
se modific tipul dispozitivului periferic fa de cel prevzut iniial, lucru
ce presupune furnizarea unor operaii a cror sintax i semantic s fie ct
mai asemntoare pentru o clas ct mai mare de dispozitive periferice.
Aici apare i denumirea uniform a dispozitivelor periferice din cazul
UNIX i Windows, unde fiecare dispozitiv are asociat un fiier,
dispozitivele fiind denumite prin intermediul numelui fiierului asociat.
- eficiena operaiilor n unele situaii, dispozitivele periferice introduc
penalizri sub aspectul timpului de acces, datorate att diferenei mari
dintre viteza de calcul a unitii centrale i cea de transfer a datelor precum
i dintre viteza de transfer a datelor i viteza ansamblurilor mecanice
mobile ce intr n componena multora dintre dispozitivele periferice. Din
acest motiv, au aprut mecanisme care s conduc la creterea eficienei
(DMA, spooling etc).
Sisteme de operare
Sisteme de operare
6.1. Structura sistemului de I/O
Structura ierarhic
nivelele sunt caracterizate de nivelul de complexitate, timp de acces, nivelul
de abstractizare
nivelele inferioare pot lucra la intervale de timp de ordinul nanosecundelor
Structura logic
dispozitive I/O logice toate dispozitivele sunt privite ca resurse logice
(permit operaii open, read, write)
Dispozitivele I/O operaiile i datele sunt convertite n secvene de
instruciuni I/O
Se pot folosi buffer-e pentru a crete viteza de lucru
Planificare i control creeaz i gestioneaz cozile de ateptare pentru
operaiile I/O i realizeaz planificarea acestor operaii
la acest nivel sunt gestionate ntreruperile
Sisteme de operare
ntre cele dou categorii se gsesc dispozitive ca unitile de band pentru care
nu se pot implementa n mod eficient operaii de acces aleator, dei sunt structurate
bloc i permit operaii de cutare.
Exist dispozitive care nu pot fi ncadrate n nici una din categoriile de mai
sus, ca de exemplu ceasul de timp real a crui sarcin este de a genera ntreruperi la
intervale de timp bine stabilite.
Controller-e:
Dispozitivele de I/O sunt formate dintr-o component mecanic i una
electronic numit controller. Un controller poate gestiona mai multe dispozitive
identice. Distincia ntre controller i dispozitivul propriu-zis este necesar, deoarece
sistemul de operare interacioneaz cu controller-ul.
Exemplu: pentru o operaie de citire de pe un disc magnetic, controller-ul este
cel care poziioneaz capetele i citete de pe disc un ir de bii care cuprinde:
- un antet ce conine informaiile nscrise la momentul formatrii discului:
numrul cilindrului, al sectorului, dimensiunea unui sector;
- bii de informaie stocai n sectorul respectiv;
- un cod de corecie a erorilor.
Controller-ul asambleaz bit cu bit un bloc de date cruia i calculeaz suma
de control, ce trebuie s fie identic cu codul citit de pe disc i abia dup aceea blocul
de date respectiv este trecut n memoria principal.
Comunicaia dintre controller-e i unitatea central se realizeaz prin
intermediul unor registre, care de cele mai multe ori fac parte din spaiul de adrese de
memorie (sunt mapate n memorie memory mapped I/O). Aceste registre mapate n
memorie se acceseaz la fel ca orice locaie de memorie, singura diferen fiind
timpul de acces mai redus. Aceste registre sunt utilizate de sistemul de operare pentru
a nscrie parametri i comenzi i pentru a citi starea dispozitivului respectiv i codurile
de eroare. O comand odat acceptat de controller, SO la dispozitivul s o execute n
timp ce el planific alte task-uri. Dup terminarea operaiei, controller-ul genereaz o
ntrerupere, care permite SO s preia controlul i s analizeze rezultatul.
Accesul direct la memorie (Direct Memory Access DMA):
Dac un controller de disc primete comanda de citire de pe disc a unui bloc
(corespunztor unuia sau mai multor sectoare) precizat prin adres, convertete adresa
ntr-un numr de cilindru-sector-cap. Coninutul blocului este citit bit-cu-bit n bufferul intern al controller-ului i verificat dac nu are erori, dup care controller-ul
semnalizeaz printr-o ntrerupere terminarea operaiei, urmnd ca sistemul de operare
s transfere cuvnt-cu-cuvnt coninutul buffer-ului intern n memoria principal
lucru ce duce la o utilizare ineficient a tipului de lucru a unitii centrale. Acest
mecanism se mai numete i programmed I/O.
Acest neajuns a fost eliminat odat cu introducerea DMA, care presupune ca
operaia de copiere n memorie s fie efectuat de ctre controller i nu de ctre
unitatea central. n acest mod se obine o utilizare mai eficient a acesteia. Utilitatea
acestui mecanism este justificat de necesitatea transferului unui volum mare de date.
Sisteme de operare
Sisteme de operare
pe disc i operaia de transfer a acestora n memoria principal. Aceast vitez relativ
apare datorit faptului c magistrala local a sistemului este o resurs comun pe care
se desfoar toate operaiile de transfer de date din sistem i nu este posibil s fie
liber de fiecare dat cnd controller-ul intenioneaz s fac un transfer.
Variante de implementare ale DMA
- Single bus cu modulul DMA separat
- toate modulele partajeaz aceeai magistral
- ieftin, dar ineficient
Fig. 6.5. Sistem cu o singur magistral la care este ataat modulul DMA
Fig. 6.6. Sistem cu o singur magistral la care modulul DMA este integrat cu cel de I/O
Sisteme de operare
Utilizarea DMA are implicaii i asupra organizrii informaiei pe discul
magnetic. Datorit micrii continue de rotaie a discului, citirea unui sector se
realizeaz numai n timpul ct el trece pe sub capul de citire/scriere. Dup citire,
controller-ul verific datele i le transfer n memoria principal, timp n care, n
general, nu poate citi i urmtorul sector care tocmai trece pe sub capul de
citire/scriere (se presupune c se transfer o cantitate de date mai mare dect cea
coninut ntr-un sector). La ncheierea transferului, controller-ul trebuie s atepte o
perioad de timp pn cnd urmtorul sector ce trebuie citit va ajunge sub capul de
citire/scriere.
Poziia capului de
citire/scriere
0
Sisteme de operare
Implementarea buffer-elor sistemului de I/O:
Un singur buffer:
Sistemul de operare atribuie un singur buffer n memoria principal pentru
operaiile de I/O. Buffer-ele pot fi de tip bloc sau caracter:
- buffer-e de tip bloc:
- transferul datelor se face n buffer,
- blocurile sunt mutate n memorie atunci cnd este necesar;
- un alt bloc este transferat n buffer.
Procesele utilizator pot procesa un bloc de date, n timp ce urmtorul bloc este
citit. Datorit tehnicii de swapping, blocurile de date care trebuie s fie trecute n
spaiul de memorie al utilizatorului sunt trecute n memoria sistemului. Sistemul de
operare pstreaz informaiile legate de atribuirea buffer-elor sistem proceselor
utilizatorilor. Transferul de date ctre dispozitivele de I/O se face prin scrierea de
ctre procese n buffer-e i apoi are loc transferul efectiv al datelor.
Sisteme de operare
Buffer dublu:
Se folosesc dou buffer-e n loc de unul. Un proces poate transfera data dintrun buffer, n timp ce sistemul de operare umple sau golete cellalt buffer.
Buffer circular:
Sunt folosite mai mult de dou buffer-e, fiecare buffer constituind o unitate de
buffer-e circulare.
Sisteme de operare
acestuia din urm. Driver-ele nglobeaz n totalitate acea parte a codului care este
dependent de dispozitivele periferice asociate, fiind totui capabile s gestioneze mai
multe tipuri de dispozitive periferice nrudite.
Exemplu: Presupunem c are loc o cerere de citire a blocului n a unui disc
magnetic. Driver-ul determin cilindrul, sectorul i capul corespunztoare blocului n,
apoi genereaz comenzi ctre controller, astfel nct acesta s atepte timpul necesar
pentru ca sectorul vizat s ajung sub capul de citire/scriere i s nceap transferul de
date. n acest moment, driver-ul se blocheaz n ateptarea terminrii operaiei de
citire. Odat operaia terminat, driver-ul este trezit, semnalnd nivelului software
superior disponibilitatea datelor (pentru operaia de citire) sau posibilitatea reutilizrii
zonei de memorie implicate n transferul de date (n cazul unei operaii de scriere). n
continuare driver-ul preia urmtoarea cerere adresat dispozitivului pe care l
gestioneaz, aflat n ateptare.
Exist controller-e capabile s gestioneze o list a cererilor aflate n coada de
ateptare, iar altele nu suport dect o singur cerere la un moment dat.
Programe sistem independente de dispozitive:
Sarcinile care revin acestor programe sistem independente de dispozitiv sunt:
- asigurarea unei interfari uniforme a tuturor driver-elor;
- realizarea corespondenei dintre numele simbolice ale dispozitivelor (nume
fiiere asociate) i driver-ele corespunztoare. Strns legat de denumirea
dispozitivelor este i protecia acestora (permisiunea de acces la dispozitiv
n cazul UNIX se face la fel ca la fiiere);
- utilizarea unor bufer-e sistem. n cazul dispozitivelor bloc aceast
necesitate este dictat de faptul c datele sunt citite/scrise n forma unor
blocuri de dimensiune fix, n condiiile n care utilizatorul este liber s
transfere date de orice dimensiune. Pentru dispozitivele caracter,
necesitatea provine din faptul c achiziionarea datelor de intrare
(producerea datelor de ieire) pot avea viteze mai mari dect procesarea
datelor de intrare (listarea (afiarea) datelor de ieire). Astfel se impune
utilizarea unor buffer-e care s preia aceste viteze relative;
- raportarea erorilor care pot aprea n conjuncie cu operaiile de I/O.
Aceste erori sunt, n general, independente de dispozitivele periferice i, n
consecin, sunt manipulate de driver-ele asociate dispozitivelor. Din acest
motiv, sarcina acestui nivel este aceea de raportare a erorilor n cazul n
care nu au putut fi reparate.
Primitive de nivel utilizator:
Dei cea mai mare parte a sistemului de I/O este nglobat n sistemul de
operare, exist i o parte a acestuia format din biblioteci ce includ proceduri prin
intermediul crora programele utilizator pot iniia operaii cu dispozitivele periferice.
Aceste proceduri au rolul de a transfera parametrii lor apelurilor sistem pe care le
iniiaz, iar uneori ofer posibilitatea formatrii datelor de intrare/ieire.
Aceste primitive pot lucra n mod sincron sau asincron.
O primitiv care lucreaz sincron returneaz parametrii numai dup ce
operaia de I/O a fost realizat efectiv, fapt care o recomand pentru a fi utilizat n
cazul operaiilor cu durat redus sau care poate fi estimat.
Sisteme de operare
O primitiv care lucreaz asincron are doar rolul de iniiere a operaiei, ea
returnnd imediat un cod de eroare n cazul n care operaia nu poate fi efectuat sau 0
n caz de succes. Ca urmare, un proces i poate continua execuia n paralel cu
efectuarea operaiei, testnd periodic starea de evoluie a acesteia. Momentul n care
operaia se ncheie este marcat printr-o notificare (procedur definit de utilizator i
asociat unui eveniment) pe care sistemul de operare o lanseaz automat. O problem
care apare la folosirea acestui tip de primitive este disponibilitatea buffer-ului ce
definete zona de memorie n care se afl datele ce urmeaz a fi transferate: procesul
iniiator trebuie s evite citirea/scrierea coninutului acestei zone att timp ct operaia
nu a fost terminat, sarcin ce revine, n general, programatorului. Acest tip de
primitive sunt folosite n cazul operaiilor cu o durat mare sau greu de estimat.
6.1.3. Spooling
Este de dorit ca dispozitivele periferice s poat fi folosite n mod concurent
de ctre mai multe procese, lucru care are o foarte mare importan n sistemele
multitasking.
n cazul discurilor magnetice, lista cererilor de citire/scriere a anumitor blocuri
de pe disc cuprinde cereri de la toate procesele din sistem care au iniiat operaii cu
discul i s-au blocat, urmnd a fi trezite la terminarea operaiei. Ordinea de tratare a
cererilor nu este neaprat aceea a formulrii lor de ctre procesele din sistem,
deoarece driver-ele de disc au posibilitatea de a implementa diferite politici de tratare
a cererilor care s conduc la minimizarea drumului parcurs de capetele de
citire/scriere (implicit este minimizat i timpul global de acces).
Dispozitivele bloc se preteaz la utilizare concurent, datorit faptului c
permit acces aleator la informaii i suport operaia de cutare (seek).
Exist dispozitive (cele de tip caracter) care sunt dedicate. Astfel, o
imprimant nu poate fi utilizat n mod concurent de mai multe procese.
Pentru a nu obliga procesele care au iniiat operaii de I/O cu astfel de
dispozitive s atepte prea mult timp terminarea operaiei, se folosete mecanismul de
spooling (simoultaneous peripheral operation on-line) care const n stocarea
informaiei destinate transferului pe un mediu intermediar (de regul, pe disc) i
deblocarea procesului iniiator.
n cazul imprimantei, aceasta se realizeaz prin stocarea ntr-un fiier a
textului pe care procesul dorete s-l tipreasc, urmat de deblocare procesului. Un
alt proces, destinat strict gestionrii cererilor ctre imprimant (printer daemon), va
iniia tiprirea efectiv a textului n momentul n care imprimanta va deveni liber.
Dispozitivele periferice dedicate au dus la apariia unor procese specializate
n gestionarea cererilor pe care alte procese din sistem le formuleaz ctre dispozitivul
respectiv i a unei zone (pe disc) reprezentnd mediul intermediar de stocare a datelor
care fac obiectul transferului.