Sunteți pe pagina 1din 11

Sisteme de operare

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

Fig. 6.1. Ratele de transfer pentru diferite dispozitive de I/O

Evoluia sistemului de I/O


- Procesorul controla direct dispozitivul periferic
- apar controller-ele de I/O
- procesorul utilizeaz mecanismul programmed I/O fr ntreruperi
- procesorul trebuie s gestioneze detaliile lucrului cu dispozitivul de I/O
- apar controller-ele sau modulele de I/O cu ntreruperi
- procesorul nu mai pierde timp ateptnd terminarea operaiei de I/O
- apariia DMA (Direct Memory Access)
- blocurile de date sunt mutate direct n memorie fr implicarea procesorului
- procesorul este implicat numai la nceputul i sfritul operaiei
- modulul de I/O este un procesor separat
- apar canalele de I/O
- este posibil accesul la memoria principal pentru instruciuni
- apar procesoarele de I/O cu propria memorie
- este un computer n adevratul sens al cuvntului
- pot fi controlate un set mare de dispozitive de I/O
- o utilizare frecvent este controlul comunicaiei cu terminalele interactive
Obiectivele proiectrii unui sistem de I/O
Eficiena
operaiile de I/O pot scade performanele sistemului (bottleneck)
este folosit tehnica de swapping pentru a mari numrul proceselor
aflate n starea ready
Generalitatea
uurina gestionrii uniforme a dispozitivelor de I/O
datorit diferenei ntre dispozitive este destul de greu de obinut o
generalizare
ascunderea detaliilor privind sistemul de I/O
procesele au la dispoziie funcii ca open/read/write/close
pentru toate dispozitivele

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

Fig. 6.2. Un model de organizare a sistemului de I/O

6.1.1. Structura hardware


Dispozitivele de I/O:
Dispozitivele de I/O se pot clasifica n dou categorii:
- dispozitive bloc(discul): stocheaz informaia sub forma unor blocuri de
dimensiune fix, fiecare avnd asociat o adres cu ajutorul creia poate fi
accesat individual.
- dispozitive caracter(imprimanta, mouse, terminale, adaptoare de reea ):
lucreaz cu iruri de caractere crora nu le confer o structur pe blocuri;
nu pot fi adresate individual i nu pot constitui obiectul unor operaii de
cutare.

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

Fig. 6.3. DMA schema bloc

Fig.6.4. Punctele de oprire a execuiei ciclului de instruciuni la apariia DMA i a ntreruperilor

Coninutul blocului de date este stocat n buffer-ul intern i verificat,


controller-ul ateapt eliberarea magistralei sistemului i transfer ntregul bloc n
memorie.
La prima vedere ar prea c, n cazul DMA, utilizarea de ctre controller a
buffer-ului sau intern nu conduce dect la necesitatea efecturii unei operaii de
copiere n plus, fa de cazul n care datele ar fi transferate prin intermediul
magistralei sistemului direct de pe disc n memorie. n realitate, buffer-ul intern al
controller-ului acioneaz n sensul prelurii vitezei relative ntre operaia de citire de

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

-Single bus cu modulele DMA-I/O integrate


- exist o cale de comunicaie separat ntre modulul DMA i modulele de I/O

Fig. 6.6. Sistem cu o singur magistral la care modulul DMA este integrat cu cel de I/O

- bus I/O separat


- o singur interfa ntre modulele DMA i I/O
- uureaz expandarea configuraiei

Fig. 6.7. Sistem cu o magistral de I/O separat de magistrala sistemului

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

Fig.6.8. ntreeserea sectoarelor pe un disc magnetic

Corelarea vitezei de transfer a informaiei cu viteza de rotaie a discului, n


scopul minimizrii acestei ateptri, conduce la ideea de ntreesere (interleaving),
care const n plasarea a dou sectoare adiacente din punct de vedere logic la o
distan de cteva sectoare fizice, astfel nct urmtorul sector logic s se gseasc sub
capul de citire/scriere exact n momentul ncheierii transferului sectorului logic
anterior.
Mecanismul DMA este aplicabil i n cazul operaiilor de scriere. Adresa
fizic i lungimea zonei memorie furnizate ca parametri controller-ului, vor indica
localizarea i dimensiunea datelor ce trebuie preluate de controller i scrise pe disc.
Buffer-ele sistemului de I/O
Operaiile de I/O din spaiul de memorie al utilizatorului duc la apariia
urmtoarelor probleme:
paginile care pstreaz data ce trebuie transferat trebuie s rmn
n memorie
apar limitri la adresa aciunilor sistemului de operare
procesele nu pot fi transferate complet n swap sau pot apare blocaje
(deadlock):
procesele ateapt terminarea unei operaii de I/O
sistemul de I/O ateapt ca procesul s fie adus din swap
Exist posibilitatea de a citi n avans unele date (read in advance), precum i
de a ntrzia scrierea (se combin mai multe cereri de scriere pe disc atunci cnd se
realizeaz scrierea).
Aceste motive au dus la folosirea buffer-elor n sistemul de I/O.

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.

Fig. 6.9. Sistem fr buffere

Fig. 6.10. Sistem cu un singur buffer

buffer-e de tip caracter:


- exemplu: introducerea datelor de la terminal. Scrierea la terminal se
face linie cu linie.
Dispozitivul de I/O transfer datele n buffer-ele sistemului i SO copie data
n spaiul de memorie al utilizatorului. Imediat ce un transfer este terminat se ncearc
citirea n avans a urmtorului bloc. Procesele utilizator pot lucra cu un singur bloc de
date, n timp ce urmtorul bloc este citit.
Timpul de transfer al unui bloc: max[C,T] + M, unde: C = timp de calcul,
T = timp de realizare a operaiei de I/O, M = timpul de transfer cu buffer-ul
Observaie: fr buffer-e timpul este C+T
Sistemul de operare va urmri buffer-ele atribuite utilizatorilor; nu este de
dorit trecerea n swap a unui proces care ateapt terminarea unei operaii de I/O.
Totui, sistemul de operare are posibilitatea de a transfera procesele n swap fr ca
acest lucru s afecteze operaiile de I/O. Pentru dispozitivele de tip caracter buffer-ele
pot transfera bii (bytes) sau linii.

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.

Fig. 6.11. Sistem cu dou buffere

Buffer circular:
Sunt folosite mai mult de dou buffer-e, fiecare buffer constituind o unitate de
buffer-e circulare.

Fig. 6.12. Sistem cu buffer circular

6.1.2. Structura software


Software-ul destinat gestiunii dispozitivelor periferice este structurat pe patru
nivele:
-

rutinele de tratare a ntreruperilor;


drivere-ele asociate dispozitivelor periferice;
programe sistem independente de dispozitive;
primitive de nivel utilizator.

Rutinele de tratare a ntreruperilor:


Pentru utilizarea eficient a unitii centrale n sistemele care lucreaz n regim
multitasking, un proces care iniiaz o operaie de I/O va fi blocat (n urma executrii
unei operaii wait la un semafor), urmnd s fie trecut n starea ready de ndat ce
operaia va fi ncheiat. Rolul rutinelor de tratare a ntreruperilor este de a identifica
sursa ntreruperii (adic dispozitivul care a generat-o), de a reiniializa linia de
ntrerupere respectiv, de a memora starea dispozitivului (n cazul n care aceasta va fi
necesar ulterior) i de a trezi (printr-o operaie signal) procesul care a iniiat
operaia de I/O.
Driver-e:
Un driver accept cereri la nivelul software superior i le transpune n comenzi
pe care le transmite controller-ului, nscriind valori corespunztoare n registrele

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.

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