Calculator

25.02.2013 Views

CAPITOLUL 1 SISTEME DE OPERARE SI RETELE DE CALCULAT OARE Programele actuale fac adesea ca un singur calculator sa execute activitati care pot concura între ele pentru a obtine accesul la resursele sistemului de calcul. De exemplu, un calculator poate fi conectat la mai multe terminale sau statii de lucru de la care diferiti utilizatori pot solicita simultan serviciile sale. Chiar si în cazul unui sistem cu un singur utilizator, este posibil ca acesta sa ceara executarea în paralele a mai multor actiuni distincte, cum ar fi tiparirea unui document, modificarea altui document si crearea unui grafic care sa fie inserat apoi într-un document. Aceste cerinte necesita un înalt grad de coordonare, care sa asigure faptul ca diferitele actiuni nu interfera una cu alta, iar comunicatia între actiunile asociate trebuie sa fie eficienta si fiabila. Aceasta coordonare se face prin intermediul unui sistem software denumit sistem de operare (operating system). De asemenea, în cazul conectarii mai multor calculatoare într-o retea apar probleme similare de coordonare si comunicatie. Rezolvarea lor reprezinta o extensie naturala a notiunii de sistem de operare. În acest capitol vom prezenta conceptele fundamentale referitoare la sistemele de operare si retele de calculatoare. 1. EVOLUTIA SISTEMELOR DE OPERARE Pentru început vom aborda studiul sistemelor de operare si al retelelor de calculatoare din perspectiva istorica, de la primele sisteme cu un singur procesor pâna la mult mai recentele sisteme multiprocesor. Sisteme cu un singur procesor Calculatoarele monoprocesor realizate în anii ’40 si ’50 nu erau nici prea flexibile nici eficiente. Executia programelor necesita o laborioasa activitate de pregatire a echipamentului, cum ar fi încarcarea benzilor magnetice, plasarea cartelelor perforate în cititorul de cartele, configurarea diverselor comutatoare si altele. De aceea, executia fiecarui program, denumit lucrare (job), era tratata ca o activitate izolata. Atunci când mai multi utilizatori doreau sa foloseasca în comun calculatorul, se faceau de obicei programari scrise, prin care îsi puteau rezerva diverse intervale din timpul comun. În timpul alocat unui utilizator, calculatorul se afla sub controlul total al acestuia. Sesiunea de lucru începea de obicei cu încarcarea programului, urma o scurta perioada în care se executa programul si se termina adesea cu încercarea de mai executa în graba înca ceva („Mai dureaza doar un minut”), în timp ce urmatorul utilizator astepta cu nerabdare sa-i vina rândul. Într-un asemenea mediu, sistemele de operare au început ca sisteme utilizate pentru simplificarea încarcarii programelor si reducerea perioadei de tranzitie dintre lucrari. Unul dintre primele progrese a constat în separarea utilizatorilor si a echipamentului, ceea ce elimina deplasarea persoanelor la si de la camera în care se afla calculatorul. În acest scop era angajat un operator care efectua toate operatiile cu calculatorul. Oricine voia sa ruleze un program trebuia sa-l înmâneze operatorului (împreuna cu datele necesare si specificatiile privind executia sa) si sa revina mai târziu pentru a primi rezultatele. Operatorul încarca aceste materiale pe suportul de stocare de masa al calculatorului, unde sistemul de operare avea acces la ele pentru a le executa. Acesta a fost începutul prelucrarii pe loturi (batch procession) – executarea lucrarilor prin plasarea lor într-un grup unic si apoi reluarea lor fara o alta interactiune cu utilizatorul. În vederea executiei, lucrarile stocate în memoria de masa erau plasate într-o coada de lucrari (job queue), ilustrata în figura 1.1. Coada reprezinta o structura de stocare în care obiectele (în cazul nostru, lucrarile) sunt organizate dupa principiul primul intrat, primul iesit (first-in, first-out – FIFO). Aceasta înseamna ca obiectele vor fi extrase din coada în ordinea sosirii. În realitate, nu toate cozile de lucrari respecta riguros structura FIFO, deoarece multe sisteme de operare permit alocarea de prioritati. Din aceasta cauza, o lucrare cu o prioritate mai mare se va executa înaintea unei lucrari deja existente în coada de lucrari, dar cu o prioritate mai mica. 1

CAPITOLUL 1<br />

SISTEME DE OPERARE SI RETELE DE CALCULAT OARE<br />

Programele actuale fac adesea ca un singur calculator sa execute activitati care pot concura între<br />

ele pentru a obtine accesul la resursele sistemului de calcul. De exemplu, un calculator poate fi conectat la<br />

mai multe terminale sau statii de lucru de la care diferiti utilizatori pot solicita simultan serviciile sale.<br />

Chiar si în cazul unui sistem cu un singur utilizator, este posibil ca acesta sa ceara executarea în paralele a<br />

mai multor actiuni distincte, cum ar fi tiparirea unui document, modificarea altui document si crearea unui<br />

grafic care sa fie inserat apoi într-un document. Aceste cerinte necesita un înalt grad de coordonare, care<br />

sa asigure faptul ca diferitele actiuni nu interfera una cu alta, iar comunicatia între actiunile asociate<br />

trebuie sa fie eficienta si fiabila. Aceasta coordonare se face prin intermediul unui sistem software<br />

denumit sistem de operare (operating system).<br />

De asemenea, în cazul conectarii mai multor calculatoare într-o retea apar probleme similare de<br />

coordonare si comunicatie. Rezolvarea lor reprezinta o extensie naturala a notiunii de sistem de operare.<br />

În acest capitol vom prezenta conceptele fundamentale referitoare la sistemele de operare si retele de<br />

calculatoare.<br />

1. EVOLUTIA SISTEMELOR DE OPERARE<br />

Pentru început vom aborda studiul sistemelor de operare si al retelelor de calculatoare din<br />

perspectiva istorica, de la primele sisteme cu un singur procesor pâna la mult mai recentele sisteme<br />

multiprocesor.<br />

Sisteme cu un singur procesor<br />

Calculatoarele monoprocesor realizate în anii ’40 si ’50 nu erau nici prea flexibile nici eficiente.<br />

Executia programelor necesita o laborioasa activitate de pregatire a echipamentului, cum ar fi încarcarea<br />

benzilor magnetice, plasarea cartelelor perforate în cititorul de cartele, configurarea diverselor<br />

comutatoare si altele. De aceea, executia fiecarui program, denumit lucrare (job), era tratata ca o<br />

activitate izolata. Atunci când mai multi utilizatori doreau sa foloseasca în comun calculatorul, se faceau<br />

de obicei programari scrise, prin care îsi puteau rezerva diverse intervale din timpul comun. În timpul<br />

alocat unui utilizator, calculatorul se afla sub controlul total al acestuia. Sesiunea de lucru începea de<br />

obicei cu încarcarea programului, urma o scurta perioada în care se executa programul si se termina<br />

adesea cu încercarea de mai executa în graba înca ceva („Mai dureaza doar un minut”), în timp ce<br />

urmatorul utilizator astepta cu nerabdare sa-i vina rândul.<br />

Într-un asemenea mediu, sistemele de operare au început ca sisteme utilizate pentru simplificarea<br />

încarcarii programelor si reducerea perioadei de tranzitie dintre lucrari. Unul dintre primele progrese a<br />

constat în separarea utilizatorilor si a echipamentului, ceea ce elimina deplasarea persoanelor la si de la<br />

camera în care se afla calculatorul. În acest scop era angajat un operator care efectua toate operatiile cu<br />

calculatorul. Oricine voia sa ruleze un program trebuia sa-l înmâneze operatorului (împreuna cu datele<br />

necesare si specificatiile privind executia sa) si sa revina mai târziu pentru a primi rezultatele. Operatorul<br />

încarca aceste materiale pe suportul de stocare de masa al calculatorului, unde sistemul de operare avea<br />

acces la ele pentru a le executa. Acesta a fost începutul prelucrarii pe loturi (batch procession) –<br />

executarea lucrarilor prin plasarea lor într-un grup unic si apoi reluarea lor fara o alta interactiune cu<br />

utilizatorul. În vederea executiei, lucrarile stocate în memoria de masa erau plasate într-o coada de<br />

lucrari (job queue), ilustrata în figura 1.1.<br />

Coada reprezinta o structura de stocare în care obiectele (în cazul nostru, lucrarile) sunt<br />

organizate dupa principiul primul intrat, primul iesit (first-in, first-out – FIFO). Aceasta înseamna ca<br />

obiectele vor fi extrase din coada în ordinea sosirii. În realitate, nu toate cozile de lucrari respecta riguros<br />

structura FIFO, deoarece multe sisteme de operare permit alocarea de prioritati. Din aceasta cauza, o<br />

lucrare cu o prioritate mai mare se va executa înaintea unei lucrari deja existente în coada de lucrari, dar<br />

cu o prioritate mai mica.<br />

1


Domeniul<br />

utilizatorului<br />

Domeniul<br />

calculatorului<br />

Figura 1.1. Prelucrare pe loturi<br />

În primele sisteme cu prelucrare pe loturi, fiecare lucrare era însotita de un set de instructiuni care<br />

descriau pasii de executie pentru a se pregati calculatorul în vederea executiei lucrarii respective. Aceste<br />

instructiuni erau codificate într-un limbaj de control al lucrarilor (Job Control Language – JCL) si erau<br />

stocate în coada, alaturi de lucrarea respectiva. La selectarea lucrarii pentru executie, sistemul de operare<br />

tiparea aceste instructiuni la imprimanta, operatorul trebuind apoi sa le citeasca si sa le execute.<br />

Instructiunile care necesitau actiunea operatorului se refereau în special la cuplarea dispozitivelor externe;<br />

în prezent, aceste activitati au fost reduse la minimum, iar limbajul de control al lucrarilor a devenit o cale<br />

de comunicare în primul rând cu sistemul de operare, nu cu operatorul. Într-adevar, în prezent postul de<br />

operator de calculator nu mai este necesar. În locul operatorilor, institutiile recurg astazi la administratori<br />

de sistem, care sa administreze sistemul informatic (activitatea lor constând în achizitia si supervizarea<br />

instalarii noilor echipamente si programe, stabilirea regulilor locale, de exemplu limitarea spatiului de<br />

disc pus la dispozitia fiecarui utilizator, precum si coordonarea eforturilor pentru rezolvarea problemelor<br />

care apar în cadrul sistemului).<br />

Principalul dezavantaj fata de metoda clasica a prelucrarii pe loturi este acela ca dupa ce l-a trimis<br />

în coada de lucrari utilizatorul nu mai poate interveni asupra programului. Aceasta situatie este<br />

acceptabila în cazul unor aplicatii cum ar fi prelucrarea statelor de plata, în care toate datele si deciziile de<br />

prelucrare sunt stabilite de la început, dar nu si atunci când utilizatorul trebuie sa interactioneze cu<br />

programul în timpul executiei acestuia, ca de exemplu în cazurile sistemelor de rezervari, unde efectuarea<br />

rezervarilor si anularilor trebuie raportata în momentul producerii, sistemelor de prelucrare a textelor, în<br />

care crearea documentelor este realizata în mod dinamic, prin scriere si modificare, jocurilor de<br />

calculator, în care interactiunea cu calculatorul reprezinta principala caracteristica a jocului.<br />

Pentru a raspunde acestor cerinte, au fost dezvoltate noi sisteme de operare, care permit<br />

prelucrarea interactiva (interactive processing) – ilustrata în figura 1.2. Aceste sisteme permit<br />

executarea unui program care poarta un dialog cu utilizatorul prin intermediul termin alelor de control la<br />

distanta sau al statiilor de lucru. Sistemele interactive au dat nastere conceptului de prelucrare în timp<br />

real (real – time processing), care prin definitie impune ca activitatile ce se desfasoara într-un calculator<br />

sa fie corelate cu activitatile din mediul calculatorului. Nemaifiind multumiti sa astepte pâna a doua zi<br />

rezultatele muncii lor, utilizatorii doreau sa obtina un raspuns rapid comunicând cu calculatorul prin<br />

intermediul unei statii de lucru aflata la distanta.<br />

Domeniul<br />

utilizatorului<br />

Domeniul<br />

calculatorului<br />

Lucrari: programe, date si<br />

directive de executie<br />

Coada de<br />

lucrari<br />

Figura 1.2. Prelucrare interactiva<br />

2<br />

Rezultate<br />

Executia<br />

lucrarii<br />

Programe, date si directive de<br />

executie si rezultate<br />

Executia<br />

programului


Daca sistemele interactive ar fi putut sa se adreseze unui singur utilizator la un moment dat,<br />

prelucrarea în timp real nu ar fi pus nici o problema. Dar calculatoarele erau scumpe si trebuia ca fiecare<br />

masina sa deserveasca mai multi utilizatori. De aceea a devenit un lucru obisnuit ca mai multi utilizatori<br />

sa solicite simultan servicii interactive unui calculator, iar în acest caz principiile prelucrarii în timp real<br />

deveneau mult mai dificil de respectat. Daca sistemul de operare al unui asemenea mediu multiutilizator<br />

persista în a executa numai o singura actiune la un moment dat, doar unul dintre utilizatori beneficia de un<br />

serviciu satisfacator de prelucrare în timp real.<br />

O solutie la aceasta problema era sa se proiecteze sistemul de operare astfel încât sa parcurga pe<br />

rând diferitele activitati care trebuiau executate, printr-un proces denumit partajarea timpului. Mai exact,<br />

partajarea timpului (time-sharing) se refera la tehnica de împartire a timpului în intervale, denumite<br />

felii de timp (time slices), cu restrictia executarii unei activitati numai într-o felie de timp la un moment<br />

dat. La sfârsitul fiecarei felii de timp, activitatea curenta era trecuta în repaus si o alta activitate primea<br />

dreptul de executie în urmatoarea felie de timp. Prin baleierea rapida a actiunilor în acest mod se crea<br />

iluzia executarii simultane a mai multor procese. În functie de tipul de activitati executate, primele<br />

sisteme cu partajarea timpului realizau prelucrari în timp real acceptabile pentru pâna la treizeci de<br />

utilizatori simultani.<br />

În prezent, partajarea timpului este utilizata atât în sistemele cu un singur procesor, cât si în<br />

sistemele multiprocesor, dar în cazul primelor este denumita de obicei multitasking, cu referire la iluzia<br />

ca mai multe activitati sunt efectuate simultan. Indiferent daca este vorba de un singur utilizator sau de<br />

mai multi, partajarea timpului reprezinta o cale de crestere a eficientei globale a unui calculator. Aceasta<br />

afirmatie poate parea surprinzatoare atunci când ne gândim ca procesul de baleiere a activitatilor, necesar<br />

la sistemele cu partajarea timpului, introduce o importanta complicatie suplimentara. Însa fara partajarea<br />

timpului, un sistem de calcul si-ar petrece cea mai mare parte a timpului asteptând ca dispozitivele<br />

periferice sa-si termine activitatile încredintate sau ca utilizatorul sa formuleze urmatoarea cerere.<br />

Partajarea timpului permite ca acest timp pierdut sa fie alocat altei actiuni. Astfel, se poate executa o<br />

activitate în timp ce alta este în asteptare. Ca rezultat, adesea un grup de activitati vor fi executate într-un<br />

timp mai scurt într-un mediu cu partajarea timpului decât într-unul ce lucreaza secvential.<br />

Sisteme multiprocesor<br />

În ultimii ani, nevoia de a partaja informatiile si resursele între diferite calculatoare a condus la<br />

ideea conectarii calculatoarelor pentru a putea schimba informatii. Pentru a raspunde acestei cerinte,<br />

sistemele de calculatoare conectate, denumite retele de calculatoare (network), au devenit din ce în ce<br />

mai raspândite. Într-adevar, principiul calculatorului central de mare putere care deserveste mai multi<br />

utilizatori a cedat treptat locul conceptului de structura de mai multe calculatoare mici care sunt conectate<br />

într-o retea prin care utilizatorii partajeaza resursele (cum ar fi imprimantele, pachetele software,<br />

capacitatile de stocare a datelor si informatiilor) distribuite în întregul sistem. Un foarte important<br />

exemplu este reteaua Internet, o retea de retele care conecteaza astazi milioane si milioane de<br />

calculatoare din toata lumea.<br />

Multe dintre problemele de coordonare care survin la proiectarea retelelor de calculatoare sunt<br />

aceleasi – sau foarte asemanatoare – cu cele aparute deja la sistemele de operare. De fapt, software-ul<br />

pentru controlul unei retele de calculatoare poate fi privit ca un sistem de operare în retea. Astfel,<br />

dezvoltarea software-ului de retea reprezinta o extensie naturala a domeniului sistemelor de operare. În<br />

timp ce primele retele au fost construite ca individuale cuplate slab, fiecare dintre ele fiind sub controlul<br />

propriului sistem de operare, cercetarea în domeniul retelelor se muta spre sistemele distribuite, în care<br />

resursele dintr-o retea sunt partajate în mod egal între activitatile existente în retea, iar procesoarelor din<br />

retea li se aloca sarcini în functie de necesitatile retelei si nu de pozitia lor spatiala în cadrul acesteia. Un<br />

exemplu este sistemul serverelor de nume utilizat în Internet. Acest sistem permite mai multor<br />

calculatoare diferite, raspândite în întreaga lume, sa coopereze pentru a transforma o adresa Internet din<br />

forma în care este specificata de utilizator (inteligibila pentru oameni si mai usor de memorat) în forma<br />

numerica potrivita retelei.<br />

Retelele de calculatoare reprezinta doar un exemplu de arhitecturi multiprocesor care au condus la<br />

dezvoltarea sistemelor de operare actuale. În timp ce o retea realizeaza un sistem multiprocesor prin<br />

combinarea calculatoarelor, fiecare dintre acestea continând eventual un singur procesor, alte sisteme<br />

multiprocesor sunt proiectate ca sisteme individuale cu mai mute procesoare. Un sistem de operare pentru<br />

un asemenea calculator trebuie nu numai sa coordoneze competitia dintre diferitele activitati executate<br />

simultan, ci si sa controleze alocarea activitatilor catre procesoarele din sistem. Acest proces implica<br />

probleme de echilibrare a încarcarii (load balancing – asigurarea utilizarii eficiente a tuturor<br />

3


procesoarelor) precum si de scalare (scaling – spargerea activitatilor într-un numar de operatii<br />

corespunzator numarului de procesoare din sistem).<br />

2. ARHITECTURA UNUI SIS TEM DE OPERARE<br />

Pentru a întelege arhitectura unui sistem de operare tipic, este util sa cunoastem spectrul complet<br />

al software-ului care exista într-un sistem de calcul uzual. Vom începe printr-o prezentare globala, în care<br />

vom grupa componentele software conform unei scheme de clasificare. Asemenea clasificari plaseaza<br />

invariabil unitati software similare în clase diferite, la fel cum fusul orar face ca localitati apropiate sa<br />

utilizeze ore diferite, desi nu exista vreo diferenta sesizabila între momentele de producere a rasaritului<br />

sau apusului. Mai mult chiar, în cazul clasificarii software-ului, dinamica evolutiei subiectului si lipsa<br />

unei autoritati general acceptate conduce la terminologii si clasificari contradictorii. De aceea, urmatoarea<br />

clasificare (figura 3) trebuie privita mai degraba ca o încercare de a oferi un punct de sprijin în descrierea<br />

unui subiect complex, decât ca o clasificare general acceptata.<br />

Software<br />

Aplicatie Sistem<br />

Utilitar Sistem de operare<br />

Interfata Nucleu<br />

Figura 1.3. Clasificarea software-ului<br />

Generalitati<br />

Sa împartim pentru început software-ul dintr-un calculator în doua categorii: software de<br />

aplicatii (application software) si software de sistem (system software). Software-ul de aplicatii<br />

contine programele care efectueaza anumite activitati particulare pentru care este utilizat calculatorul<br />

respectiv. Un calculator destinat tinerii inventarului unei companii de constructii de masini va contine<br />

aplicatii software diferite de cele aflate pe calculatorul unui scriitor. Exemplele de aplicatii software sunt<br />

reprezentate de programele de calcul tabelar, sistemele de baze de date, sistemele de tehnoredactare<br />

computerizata, pachetele de dezvoltare de programe si jocurile.<br />

Spre deosebire de software-ul de aplicatii, software-ul de sistem efectueaza acele activitati care<br />

sunt comune sistemelor de calcul în general. Într-un anumit sens, software-ul de sistem furnizeaza mediul<br />

în care lucreaza software-ul aplicativ, în acelasi mod în care infrastructura nationala constituie o baza pe<br />

care fiecare cetatean îsi dezvolta propriul stil de viata.<br />

Clasa software-ului de sistem se împarte în doua categorii: sistemul de operare propriu -zis si<br />

modulele software cunoscute sub numele de software utilitar. Cea mai mare parte din utilitarele instalate<br />

reprezinta programe care desfasoara activitati ce sunt esentiale pentru functionarea calculatorului, dar nu<br />

sunt înca incluse în sistemul de operare. Într-un anume sens, software-ul utilitar consta din unitati<br />

software care extind caracteristicile sistemului de operare. De exemplu, abilitatea de formatare a unui disc<br />

sau de copiere a unui fisier nu este întotdeauna implementata în cadrul sistemului de operare, dar este<br />

realizabila prin intermediului unui program utilitar. Alte exemple de utilitare sunt software-ul pentru<br />

comunicatie prin modem pe linia telefonica, software-ul de afisare a datei si orei pe ecranul<br />

calculatorului, precum si o data cu cresterea numarului de instalari, software-ul pentru administrarea<br />

activitatilor dintr-o retea de calculatoare.<br />

Diferenta dintre software-ul de aplicatii si cel utilitar este adesea foarte mica. Multi utilizatori de<br />

calculatoare includ în clasa de software utilitar orice software livrat odata cu sistemul de operare, la<br />

cumpararea acestuia. Ca atare uneori sunt incluse în categoria utilitarelor si sistemele de dezvoltare a<br />

programelor, deoarece adese astfel de pachete de programe au fost livrate la achizitia unui sistem de<br />

operare. Diferenta dintre software-ul utilitar si sistemul de operare este la fel de vaga. Unele sisteme<br />

4


furnizeaza astfel de servicii elementare, cum ar fi afisarea listei fisierelor de pe un sistem de stocare de<br />

masa, ca utilitar; altele includ aceste servicii în sistemul de operare.<br />

Este usor de observat ca prin implementarea anumitor activitati ca software utilitar, un sistem de<br />

operare se simplifica, nemaifiind obligat sa includa toate caracteristicile de baza necesare unui sistem de<br />

calcul. Mai mult chiar, rutinele implementate ca software utilitar pot fi adaptate cu mai multa usurinta<br />

cerintelor unei instalari particulare. Într-adevar, nu este ceva neobisnuit sa întâlnim companii sau<br />

persoane care au modificat, respectiv au completat, software-ul utilitar furnizat initial odata cu sistemul<br />

de operare al calculatorului lor.<br />

Interfata<br />

Partea dintr-un sistem de operare care defineste modul de interactiune dintre sistemul de operare<br />

si utilizatorii sai poarta numele de interfata (shell). Sarcina interfetei este aceea de a permite<br />

comunicarea cu utilizatorul (sau utilizatorii) calculatorului. Interfetele moderne realizeaza acest lucru prin<br />

intermediul unei interfete grafice cu utilizatorul (Graphical User Interface - GUI), în care obiectele<br />

care trebuie manipulate, cum ar fi fisierele si programele, sunt reprezentate grafic pe ecranul<br />

calculatorului prin pictograme (icons). Astfel de sisteme permit utilizatorului sa execute comenzi prin<br />

selectarea si deplasarea pictogramelor pe ecran cu un dispozitiv manevrat cu mâna si denumit mouse.<br />

Vechile interfete comunicau cu utilizatorul mesaje de tip text, folosind în acest scop tastatura si ecranul.<br />

Cu toate ca interfata unui sistem de operare joaca un rol important în stabilirea functionalitatii<br />

unui calculator, ea nu reprezinta altceva decât legatura între utilizator si „inima" sistemului de operare (a<br />

se vedea figura 1.4). Diferenta dintre interfata si partile interne ale sistemului de operare este scoasa în<br />

evidenta de faptul ca anumite sisteme de operare permit unui utilizator sa selecteze dintre mai multe<br />

interfete pe cea care îi convine mai mult. De exemplu, utilizatorii sistemului de operare UNIX pot alege<br />

dintre mai multe variante, cum ar fi interfata Borne, interfata C sau interfata Korn. Primele versiuni de<br />

Windows de la Microsoft Corporation constituiau de fapt interfete alternative pentru sistemul de operare<br />

MS-DOS. În aceste cazuri sistemul de operare ramâne neschimbat, modificându-se numai modul sau de<br />

comunicare cu utilizatorii calculatorului.<br />

Figura 1.4. Interfata realizeaza comunicatia dintre utilizatori si sistemul de operare<br />

Reciproc, interfete cu caracteristici similare se pot utiliza în lucrul cu sisteme de operare cu<br />

structuri interne diferite, în scopul obtinerii unei interfete om-masina unitare pe diferite tipuri de<br />

calculatoare. Prima aplicatie a acestui efect de standardizare a fost implementata de IBM în cadrul seriilor<br />

de calculatoare System/360, aparute în anii '60. Aceste serii constau dintr-o varietate de calculatoare,<br />

începând de la calculatoare proiectate pentru aplicatii pentru întreprinderi mici si mijlocii si ajungând la<br />

calculatoare pentru afaceri de mari dimensiuni. Toate calculatoarele erau livrate având sisteme de operare<br />

care comunicau cu mediul în aproximativ aceeasi maniera. Astfel, pe masura ce afacerea se dezvolta, se<br />

putea trece la un calculator mai puternic, fara mari eforturi de reprogramare si instruire a personalului.<br />

5


În zilele noastre avantajele interfetelor standardizate sunt bine cunoscute si urmarite în orice<br />

proiectare de software. De exemplu, comunicarea cu sistemele de calcul tabelar sau procesoarele de texte<br />

furnizate de diverse firme are caracteristici similare, simplificând migrarea utilizatorului de la un produs<br />

la altul. Dar, standardizarea a condus si la aparitia unui mare numar de probleme de legalitate, printre care<br />

si problema proprietatii asupra unei interfete. Atunci când interfata realizata de o firma devine populara,<br />

este avantajos pentru concurenta sa-si realizeze sistemele astfel încât sa arate similar cu cel deja bine<br />

cunoscut. Aceasta asemanare face ca trecerea utilizatorilor sistemului mai bine cunoscut la sistemul<br />

concurentei sa se faca mai usor, chiar daca structura interna a celor doua sisteme este foarte diferita.<br />

Desigur, firma care a proiectat sistemul original pretinde dreptul de proprietate asupra „aspectului si<br />

comportarii” („look and feel”) sistemului sau, la fel cum pretinde si dreptul de proprietate asupra<br />

structurii sistemului. Solutiile date de catre justitie în procesele legate de „aspect si comportare” nu permit<br />

deocamdata stabilirea unei reguli generale.<br />

Nucleul<br />

Partea din interiorul unui sistem de operare este adesea denumita nucleu (kernel). Nucleul unui<br />

sistem de operare contine acele componente software care efectueaza operatiile primare, necesare pentru<br />

functionarea calculatorului. Un astfel de modul este administratorul de fisiere (file manager), care are<br />

sarcina sa coordoneze utilizarea facilitatilor oferite de memoria de masa a calculatorului. Administratorul<br />

de fisiere stocheaza înregistrari referitoare la toate fisierele memorate pe suportul de stocare de masa, mai<br />

precis informatii referitoare la pozitiile fisierelor, utilizatorii cu drept de acces la ele si ce portiune din<br />

memoria de masa este disponibila pentru stocarea de noi fisiere sau extinderea celor existente.<br />

Pentru simplificarea utilizarii calculatorului, multe sisteme de administrare a fisierelor permit<br />

gruparea lor în unitati denumite directoare (directory) sau dosare (folder). Acest lucru permite<br />

utilizatorului sa-si organizeze fisierele conform scopului în care sunt folosite, plasând fisierele referitoare<br />

la acelasi lucru în acelasi director. Mai mult chiar, permitându-se ca directoarele sa contina alte<br />

directoare, denumite subdirectoare, se poate realiza o organizare ierarhizata a informatiilor. De exemplu,<br />

un utilizator poate crea un director denumit Inregistrari care sa contina subdirectoarele cu numele<br />

InregistrariFinanciare, InregistrariMedicale si InregistrariFamiliale. Fiecare dintre aceste subdirectoare<br />

poate contine fisiere care fac parte din respectiva categorie. Secventa de directoare care ind ica drumul<br />

pâna la un anumit subdirector sau fisier se numeste cale (path).<br />

Orice acces al unui modul software la un fisier se obtine prin intermediul administratorului de<br />

fisiere. Procesul începe cu cererea ca administratorul de fisiere sa acorde accesul la fisier, prin intermediul<br />

unei proceduri care se numeste deschiderea fisierului. Daca administratorul de fisiere accepta cererea de<br />

acces, el furnizeaza informatiile necesare pentru gasirea si manipularea fisierului. Informatiile sunt<br />

stocate într-o zona din memoria principala care poarta numele de descriptor de fisier (file descriptor), iar<br />

operatiile individuale asupra unui fisier se fac prin referirea la informatiile aflate aici.<br />

O alta componenta a nucleului consta dintr-o colectie de drivere de dispozitiv (device drivers )<br />

— module software care comunica cu controlerele (sau uneori direct cu dispozitivele) pentru efectuarea<br />

operatiilor de catre componentele periferice ale calculatorului. Fiecare driver de dispozitiv este proiectat<br />

în mod individual pentru un anumit tip de controler sau dispozitiv (ca de exemplu o imprimanta, un disc,<br />

o unitate de banda magnetica sau un monitor) si traduce cererile formulate în termeni generali într-o<br />

secventa de instructiuni specifice controlerului sau dispozitivului atasat acelui driver. Astfel, celelalte<br />

module software nu trebuie sa tina cont de detaliile constructive ale dispozitivelor atasate calculatorului.<br />

Ele trebuie doar sa lanseze cereri de uz general driverelor de dispozitiv si sa le lase apoi pe acestea sa se<br />

preocupe de detalii. De exemplu, un driver de dispozitiv pentru un disc poate converti o cerere generala<br />

de scriere a unei portiuni de fisier pe disc în instructiuni care se refera la pistele si sectoarele discului<br />

(utilizând informatiile din descriptorul de fisier) si transmite apoi aceste informatii controlerului respectiv.<br />

Dupa aceea, controlerul va prelua responsabilitatea pozitionarii capetelor de citire/scriere si supervizarii<br />

procesului de înregistrare. În schimb, un driver pentru imprimanta va traduce o cerere de tiparire a<br />

aceleiasi portiuni de fisier la imprimanta în instructiuni referitoare la transferul fonturilor, caracterelor si<br />

instructiunilor de control al imprimantei. De fapt, etapele necesare sunt diferite chiar si în cazul unor<br />

imprimante diferite, acesta fiind motivul pentru care proprietarul unui calculator personal care cumpara o<br />

imprimanta noua primeste adesea si un nou driver de imprimanta.<br />

O alta componenta a nucleului unui sistem de operare este administratorul de memorie<br />

(memory manager), însarcinat cu activitatea de coordonare a utilizare memoriei principale a<br />

calculatorului. Astfel de sarcin i se reduc la minimum într-un mediu în care calculatorului i se cere sa<br />

realizeze numai câte o activitate la un moment dat. În aceste situatii, programul care executa activitatea<br />

6


curenta este plasat în memoria principala, rulat si apoi înlocuit cu programul care va efectua urmatoarea<br />

operatie. Dar în mediile multiutilizator sau multitasking, în care calculatorului i se cere sa raspunda mai<br />

multor solicitari în acelasi timp, sarcinile administratorului de memorie sunt complexe, în aceste cazuri<br />

multe programe si blocuri de date trebuie stocate în memoria principala în mod concurent, fiecare fiind<br />

plasat într-o zona de memorie proprie alocata lui de catre administratorul de memorie. Pe masura ce<br />

diferitele activitati apar sau se încheie, administratorul de memorie trebuie sa gaseasca zone libere de<br />

memorie pentru a satisface cererile de memorie si sa tina evidenta zonelor de memorie care au fost<br />

eliberate.<br />

Sarcina administratorului de memorie se complica si mai mult atunci când cantitatea totala de<br />

memorie solicitata depaseste dimensiunea memoriei disponibile . În acest caz, administratorul de memorie<br />

poate crea iluzia unui spatiu suplimentar de memorie rotind programele si datele între memoria principala<br />

si disc. Aceasta memorie iluzorie este denumita memorie virtuala (virtual memory). Sa presupunem ca<br />

este nevoie de o memorie principala cu dimensiunea de 64 de megaocteti, dar sunt disponibili numai 32.<br />

Pentru a crea impresia unui spatiu de memorie mai mare, administratorul de memorie va împarti spatiul<br />

cerut în unitati denumite pagini si va transfera continutul acestor pagini pe disc. Dimensiunea obisnuita<br />

pentru o pagina de memorie nu depaseste patru kiloocteti. Pe masura ce alte pagini de memorie sunt<br />

necesare în memoria principala, administratorul de memorie le va încarca în locul paginilor care nu mai<br />

sunt necesare si astfel celelalte module software se vor executa ca si cum calculatorul ar avea o memorie<br />

principala de 64 de megaocteti.<br />

De asemenea, nucleul unui sistem de operare contine în plus secventiatorul (scheduler) si<br />

executorul (dispatcher), care vor fi prezentate în subcapitolul urmator. Deocamdata vom preciza doar ca<br />

într-un sistem cu partajarea timpului sec ventiatorul stabileste care actiuni trebuie luate în considerare<br />

pentru a fi executate, iar executorul controleaza alocarea feliilor de timp pentru aceste activitati.<br />

Pornirea calculatorului<br />

Am vazut cum comunica sistemul de operare cu utilizatorii calculatorului si cum coopereaza<br />

elementele componente ale sistemului de operare pentru coordonarea executiei activitatilor dintr-un<br />

calculator, dar nu ne-am referit deloc la modul în care este lansat în executie sistemul de operare. Acest<br />

lucru se realizeaza prin intermediul unei proceduri cunoscute sub numele de încarcarea sistemului de<br />

operare (boot straping), denumita adesea pe scurt încarcare (booting), ce este executata de calculator de<br />

fiecare data când este pornit. Primul pas în a întelege aceasta procedura este sa întelegem de ce este ea<br />

necesara.<br />

Unitatea centrala de prelucrare este realizata astfel încât registrul sau contor de program sa<br />

înceapa întotdeauna de la o anumita adresa predeterminata, de fiecare data când unitatea centrala este<br />

alimentata cu curent electric. Aici deci se asteapta unitatea centrala sa gaseasca programul pe care trebuie<br />

sa-l execute. Pentru a se asigura existenta programului dorit, aceasta zona de memorie este construita<br />

astfel încât continutul ei sa fie permanent. O astfel de memorie este cunoscuta sub numele de memorie<br />

permanenta (read-only memory - ROM). Dupa înscrierea sirurilor de biti în memoria ROM printr-un<br />

procedeu analog fotografierii circuitelor de pe un cip, acestia ramân stocati, indiferent daca sistemul de<br />

calcul este pornit sau oprit.<br />

În cazul calculatoarelor simple utilizate pentru controlul cuptoarelor cu microunde, al sistemelor<br />

de aprindere ale automobilelor sau al receptoarelor stereofonice, este utila realizarea unei parti<br />

semnificative de memorie ca memorie permanenta, deoarece aceste aparate nu trebuie sa fie flexibile.<br />

Programele executate de asemenea dispozitive sunt la fiecare pornire aceleasi. Acest lucru nu mai este<br />

adevarat în cazul calculatoarelor de uz general, asa ca nu este practic sa se construiasca mari parti din<br />

memoria acestora ca memorie ROM. De fapt, cea mai mare parte din memoria unui calculator de uz<br />

general este memorie volatila, continutul memoriei pierzându-se la oprirea calculatorului.<br />

În scopul încarcarii sistemului de operare al unui calculator de uz general, portiunea de memorie<br />

realizata sub forma de memorie ROM contine un program de mici dimensiuni, denumit bootstrap. La<br />

pornirea calculatorului, acest program este executat în mod automat. El conduce procesorul de-a lungul<br />

procesului de transfer al unui material din locatia predeterminata de pe suportul de stocare de masa în<br />

memoria principala a calculatorului. În multe cazuri, obiectul transferului este reprezentat de sistemul de<br />

operare. Dupa plasarea sistemului de operare în memoria principala, programul de bootstrap instruieste<br />

unitatea centrala de prelucrare sa sara la zona de memorie care-l contine. Din acest punct, sistemul de<br />

operare devine activ si preia controlul asupra activitatilor calculatorului.<br />

7


ROM<br />

Memorie volatila<br />

(Pasul l) <strong>Calculator</strong>ul începe prin executarea programului de încarcare aflat deja în memorie.<br />

Sistemul de operare se afla plasat pe dispozitivul de stocare de masa.<br />

ROM<br />

Memorie volatila<br />

Memoria principala<br />

Program de<br />

încarcare<br />

Memoria principala<br />

Program de<br />

încarcare<br />

Sistem de<br />

operare<br />

(Pasul 2) Programul de încarcare realizeaza transferul sistemului de operare în memoria<br />

principala si îi cedeaza apoi controlul.<br />

Figura 1.5 Procesul de încarcare a sistemului de operare<br />

3. COORDONAREA ACTIVITATILOR DESFASURATE D E CALCULATOR<br />

În acest subcapitol vom discuta despre modul în care sistemul de operare coordoneaza executia<br />

software-ului de aplicatie si utilitar, precum si pe cea a propriilor sale module. Vom începe prin a<br />

prezenta conceptul de proces.<br />

Conceptul de proces<br />

În cazul sistemelor de operare moderne, unul dintre cele mai importante concepte este deosebirea<br />

dintre program si actiunea de executie a acestuia. Programul reprezinta un set static de directive, iar<br />

executia lui este o activitate dinamica, ale carei proprietati se modifica în timp. Aceasta activitate poarta<br />

numele de proces. Procesul este caracterizat de starea curenta a activitatii, denumita starea procesului.<br />

Ea include pozitia curenta în programul care este executat (valoarea contorului de program), precum si<br />

valori din alti registri ai unitatii centrale si din celulele de memorie asociate. Aproximând, putem spune ca<br />

starea procesului reprezinta un instantaneu al calculatorului la un moment dat. La diferite momente din<br />

timpul executiei unui program (la diferite momente dintr-un proces) vor fi obtinute diferite instantanee<br />

(diferite stari ale procesului).<br />

Pentru a face distinctia între program si procese, trebuie remarcat ca un singur program poate fi<br />

asociat în acelasi timp mai multor procese. De exemplu, într-un sistem multiutilizator cu partajarea<br />

timpului, doi utilizatori pot sa editeze simultan documente diferite. Ambele activitati pot utiliza acelasi<br />

program, dar fiecare dintre ele va constitui un proces separat, având propriile seturi de date si propria<br />

8<br />

Disc<br />

Sistem de<br />

operare<br />

Disc<br />

Sistem de<br />

operare


viteza de desfasurare. În aceasta situatie, sistemul de operare poate pastra în memorie numai o singura<br />

copie a programului de editare, permitând fiecarui proces sa-l utilizeze în timpul feliei de timp alocate.<br />

Într-un calculator cu partajarea timpului exista de obicei mai multe procese care concureaza<br />

pentru feliile de timp. Între ele se numara atât executia programelor aplicative sau utilitare, cât si a unor<br />

parti din sistemul de operare. Sarcina sistemului de operare este sa coordoneze aceste procese.<br />

Coordonarea implica alocarea resurselor necesare fiecarui proces (dispozitive periferice, spatiu în<br />

memoria principala, acces la date si acces la unitatea centrala de prelucrare), împiedicarea interfetei<br />

proceselor independente si asigurarea faptului ca procesele care trebuie sa schimbe informatii între ele pot<br />

s-o faca. Pentru aceasta comunicatie se foloseste numele de comunicatie între procese (interprocess<br />

communication).<br />

Administrarea proceselor<br />

Operatiile asociate coordonarii proceselor sunt efectuate de catre secventiatorul (scheduler) si<br />

executorul (dispatcher) din nucleul sistemului de operare. Astfel, secventiatorul memoreaza o înregistrare<br />

a proceselor prezente în sistemul de calcul, introduce noile procese în aceasta lista si elimina procesele<br />

care s-au terminat. Pentru a putea urmari toate procesele, secventiatorul înregistreaza un bloc de<br />

informatii, denumit tabel de procese (process table), în memoria principala. Pentru fiecare noua<br />

activitate, creeaza un proces dedicat acesteia, plasând un nou element în tabelul de procese. Aici sunt<br />

memorate informatii cum ar fi zona de memorie alocata procesului (obtinuta de la administratorul de<br />

memorie), prioritatea procesului s i daca procesul este gata sa continue sau este în asteptare. Un proces<br />

este gata sa continue (ready) daca este într-o stare în care desfasurarea actiunii poate cont inua; este în<br />

asteptare (waiting) daca desfasurarea sa este întârziata pâna la aparitia unor evenimente externe, ca de<br />

exemplu terminarea unui acces la disc sau sosirea unui mesaj de la alt proces. Astfel, secventiatorul<br />

memoreaza informatiile referitoare la modul în care se desfasoara procesele, în particular, un proces trece<br />

adesea de la starea de gata la cea de asteptare si invers; prioritatea proceselor se modifica de-a lungul<br />

timpului; si, desigur, secventiatorul trebuie sa elimine procesul din tabelul de procese atunci când acesta<br />

se termina.<br />

Executorul este o componenta a nucleului care asigura în fapt executia proceselor active,<br />

programate de secventiator. Într-un sistem cu partajarea timpului, aceasta sarcina este dusa la îndeplinire<br />

prin împartirea timpului în intervale scurte, fiecare purtând numele de felie de timp (time slice) sau<br />

cuanta (quantum - având de obicei o durata de 50 de milisecunde); atentia unitatii centrale de prelucrare<br />

este îndreptata catre fiecare proces în parte, fara ca executia acestuia sa poata de pasi o cuanta de timp<br />

(figura 1.6). Procedura de trecere de la un proces la altul poarta numele de comutare între procese<br />

(process switch).<br />

Întrerupere<br />

Proces A<br />

Comutare între<br />

procese<br />

Întrerupere<br />

Comutare între<br />

procese<br />

Proces A<br />

Întrerupere<br />

Axa timpului<br />

Figura 1.6 Partajarea timpului între procesele A si B<br />

De fiecare data când un proces îsi începe felia de timp, executorul initializeaza un circuit de<br />

temporizare care va masura urmatoarea cuanta. La sfârsitul cuantei, circuitul de temporizare genereaza un<br />

semnal care poarta numele de întrerupere. Unitatea centrala reactioneaza la acest semnal într-un mod<br />

foarte asemanator celui în care reactionam atunci când suntem întrerupti în timpul desfasurarii unei<br />

activitati: oprim activitatea, memoram unde anume ne aflam în operatia respectiva si acordam apoi atentia<br />

cuvenita sursei întreruper ii. La primirea unui semnal de întrerupere, unitatea centrala de prelucrare<br />

completeaza ciclul curent de extragere-decodificare-executie, salveaza pozitia din procesul curent (pas la<br />

9<br />

Proces B<br />

Comutare între<br />

procese<br />

Întrerupere<br />

Comutare între<br />

procese<br />

Proces A<br />

Întrerupere<br />

Proce<br />

Comutare între<br />

procese


care vom reveni imediat) si începe executia unui program de tratare a întreruperilor (interrupt<br />

handler), care este stocat la o locatie predeterminata din memoria principala.<br />

În scenariul nostru de partajare a timpului, programul de tratare a întreruperilor este o<br />

componenta a executorului. De aceea efectul semnalului de întrer upere este de suspendare a procesului<br />

curent si de transfer al controlului catre executor. În acest punct, executorul permite secventiatorului sa<br />

actualizeze tabelul de procese (de exemplu, prioritatea procesului care tocmai s-a executat în ultima<br />

cuanta trebuie sa fie redusa, iar prioritatea altor procese ar putea sa creasca). Executorul selecteaza apoi<br />

procesul care are cea mai mare prioritate dintre procesele gata sa continue din tabel, reporneste circuitul<br />

de temporizare si permite procesului selectat sa-si înceapa felia de timp.<br />

Abilitatea de oprire si de repornire ulterioara a unui proces este de o importanta vitala pentru<br />

succesul unui sistem cu partajarea timpului. Daca sunteti întrerupti în timp ce cititi o carte, posibilitatea<br />

de a relua mai târziu lectura depinde de abilitatea dumneavoastra de a va reaminti atât pagina la care va<br />

aflati cât si informatiile pe care le -ati acumulat pâna atunci. Pe scurt, trebuie sa puteti recrea mediul care<br />

exista chiar înainte de producerea întreruperii. În cazul un ui proces, un asemenea mediu este starea<br />

procesului. Amintiti-va ca aceasta stare include valoarea contorului de program, precum si continutul<br />

registrilor si al celulelor de memorie asociate. Calculatoarele proiectate pentru sisteme cu partajarea<br />

timpului includ actiunea de salvare a acestor informatii ca parte a reactiei unitatii centrale de prelucrare la<br />

semnalul de întrerupere. Ele dispun de obicei de instructiuni în limbaj masina pentru reîncarcarea unei<br />

stari salvate anterior. Astfel de facilitati simplifica sarcina executorului la efectuarea comutarii între<br />

procese s i constituie un exemplu referitor la modul în care arhitectura calculatoarelor moderne este<br />

influentata de cerintele sistemelor de operare actuale.<br />

Uneori, actiunea efectuata de un proces în cuanta alocata lui se termina înainte de expirarea<br />

timpului alocat. De exemplu, daca un proces executa o cerere de intrare/iesire, cum ar fi o cerere de<br />

furnizare a unor date de pe un disc, partea ramasa din felia de timp alocata acelui proces va fi iros ita cât<br />

timp acesta asteapta ca cererea sa îi fie onorata de catre controler, în acest caz, secventiatorul va actualiza<br />

tabelul de procese pentru a reflecta starea de asteptare a procesului, iar executorul va aloca o noua cuanta<br />

unui proces care este gata de executie. Mai târziu (probabil dupa mai multe sute de milisecunde), atunci<br />

când controlerul semnaleaza ca cererea de intrare/iesire a fost executata, secventiatorul va schimba starea<br />

procesului în „gata” si astfel procesul va intra din nou în competitia pentru primirea unei cuante.<br />

Modelul Client/Server<br />

Diferitele module ale sistemului de operare, care într-un sistem cu partajarea timpului se executa<br />

de obicei ca procese individuale, concureaza între ele sub controlul executorului pentru cuantele de timp.<br />

Pentru a-si coordona activitatile, procesele trebuie sa comunice între ele. Pentru programarea unui nou<br />

proces, secventiatorul trebuie sa obtina spatiu de memorie de la administratorul de memorie. Pentru a<br />

dobândi accesul la un fisier aflat pe un dispozitiv de stocare de masa, orice proces trebuie sa capete mai<br />

întâi informatiile necesare de la administratorul de fisiere.<br />

Pentru simplificarea comunicatiei între procese, componentele unui sistem de operare sunt adesea<br />

proiectate în conformitate cu modelul client/server (figura 1.7).<br />

Un calculator<br />

Client Server<br />

Client Server<br />

Cerere<br />

Client Server<br />

Client<br />

Figura 1.7 Modelul client/server<br />

Patru calculatoare independente<br />

Client Server<br />

Client Server<br />

Client<br />

Figura 1.8 Structuri identice de comunicatie între clienti si servere, care opereaza pe acelasi calculator sau<br />

sunt distribuite pe mai multe calculatoare<br />

10


Acest model defineste cele doua roluri fundamentale pe care le pot juca diferitele componente:<br />

client, care emite cereri catre alte unitati, respectiv server, care satisface cererile emise de clienti. De<br />

exemplu, administratorul de fisiere va juca rolul unui server care furniz eaza accesul la fisiere dupa cum i<br />

se cere de catre clientii sai. În cadrul acestui model, comunicatia între procesele dintr-un sistem de<br />

operare consta din cereri adresate de procesele care joaca rolul de clienti si din raspunsuri de la procesele<br />

care joaca rolul de servere.<br />

Aplicarea modelului client/server în proiectarea software-ului conduce la uniformizarea tipurilor<br />

de comunicatii care au loc în sistem. Acesta este unul din principalele motive pentru care modelul a fost<br />

adoptat pe scara larga la proiectarea sistemelor de operare. Atunci când componentele unui sistem de<br />

operare sunt proiectate ca servere si clienti, comunicatia dintre ele are aceeasi forma indiferent daca<br />

aceasta comunicatie se desfasoara între componente din cadrul aceluiasi calculator sau între componente<br />

ale unor calculatoare aflate la mare distanta unele de altele (figura 1.8). Un client va trimite pur si simplu<br />

cereri serverelor si va astepta raspunsurile; serverul va presta serviciile cerute si va trimite raspunsurile<br />

înapoi client ilor, în consecinta, atâta timp cât o retea de calculatoare permite trimiterea de cereri si<br />

raspunsuri între calculatoare, mai multi clienti si mai multe servere se pot distribui în orice configuratie<br />

convenabila pentru reteaua respectiva.<br />

4. GESTIONAREA PROCESELOR CONCURENTE<br />

Asa cum am vazut, componentele nucleului unui sistem de operare se ocupa în principal cu<br />

alocarea resurselor calculatorului catre procesele ce se desfasoara în sistem, în cazul de fata atribuim<br />

termenului resurse un sens larg, incluzând atât dispozitivele periferice ale calculatorului, cât si functiile<br />

de care dispune calculatorul propriu-zis. Administratorul de fisiere aloca atât accesul la fisierele existente,<br />

cât si spatiul pe disc pentru crearea de noi fisiere; administratorul memoriei aloca spatiu în memorie;<br />

secventiatorul aloca spatiu în tabelul de procese; executorul aloca feliile de timp pentru executia<br />

proceselor. Ca si alte activitati, sarcina de alocare a resurselor pare la o prima vedere destul de simpla.<br />

Totusi, sub aceas ta aparenta simplitate se ascund multe probleme care tratate superficial pot duce la<br />

functionarea defectuoasa a sistemului. Amintiti-va ca un calculator nu gândeste independent, ci doar<br />

executa instructiuni. De aceea, pentru obtinerea unor sisteme de operare fiabile va trebui sa dezvoltam<br />

algoritmi care sa acopere orice problema posibila, chiar daca pare lipsita de importanta.<br />

Semafoare<br />

Sa luam în discutie un calculator care are un sistem de operare cu partajarea timpului si la care<br />

este conectata o singura imprimanta. Daca un proces este în situatia de a-si tipari rezultatele, el trebuie sa<br />

solicite sistemului de operare acces la programul driver al imprimant ei. În acest moment, sistemul de<br />

operare trebuie sa decida daca satisface aceasta cerere, verificând daca imprimanta nu este cumva utilizata<br />

de alt proces. Daca imprimanta este libera, sistemul de operare trebuie sa acorde permisiunea utilizarii ei<br />

si sa permita procesului sa continue; altfel, trebuie sa respinga cererea s i probabil sa clasifice procesul ca<br />

proces în asteptare, pâna în momentul în car e imprimanta devine disponibila. Într-adevar, daca doua<br />

procese ar capata simultan acces la imprimanta atasata calculatorului, rezultatul n-ar prezenta nici o<br />

utilitate pentru nici unul din ele.<br />

Acordarea accesului la imprimanta reclama ca sistemul de operare sa urmareasca daca<br />

imprimanta a fost sau nu alocata vreunui proces. O solutie ar constitui-o utilizarea unui indicator (flag) -<br />

un bit în memorie ale carui stari sunt setat (1) si sters (0). Un indicator sters arata ca imprimanta este<br />

libera, iar un indicator setat indici faptul ca imprimanta este deja alocata, în aparenta, aceasta solutie pare<br />

foarte buna. Sistemul de operare sterge indicatorul la pornire, apoi îi verifica starea de fiecare data când<br />

apare o cerere de acces la imprimanta. Daca indicatorul are valoarea zero, se acorda accesul si sistemul de<br />

operare seteaza indicatorul. Daca indicatorul are valoarea 1, sistemul de operare trece procesul solicitant<br />

în asteptare. De fiecare data când un proces termina de utilizat imprimanta, sistemul de operare aloca<br />

imprimanta unui proces aflat în asteptare sau, daca nu exista procese în asteptare, sterge indicatorul.<br />

Desi aceasta solutie pare buna la prima vedere, exista totusi o problema. Operatia de testar e si<br />

eventual de setare a indicatorului necesita mai multi pasi masina. Nu ar fi exclus ca operatia sa fie<br />

întrerupta dupa detectarea unui indicator nul, dar înainte ca indicatorul sa fie setat, ceea ce face posibila<br />

aparitia urmatoarei situatii.<br />

Presupunem ca imprimanta este disponibila si un proces cere s-o utilizeze. Indicatorul care<br />

corespunde imprimantei este verificat si gasit ca fiind sters, ceea ce indica faptul ca imprimanta este<br />

disponibila. Dar în acest moment procesul este întrerupt si alt proces îsi începe felia de timp. De<br />

11


asemenea, si acest proces doreste sa utilizeze imprimanta. Indicatorul este verificat din nou si gasit tot<br />

sters, deoarece procesul precedent a fost întrerupt înainte de a-l putea seta. În consecinta, sistemul de<br />

operare perm ite celui de-al doilea proces sa înceapa utilizarea imprimantei. Ulterior, primul proces revine<br />

în executie în locul în care se afla când a fost întrerupt, adica imediat dupa ce sistemul de operare gasise<br />

nul indicatorul imprimantei. Asa ca sistemul de operare continua prin a acorda si primului proces dreptul<br />

de utilizare a imprimantei. Se ajunge deci la o situatie în care doua procese utilizeaza simultan aceeasi<br />

imprimanta.<br />

În cazul descris, problema este aceea ca operatia de testare si eventual de setare a indicatorului<br />

trebuie sa fie terminata fara a fi întrerupta. O solutie pentru a face acest lucru o constituie utilizarea<br />

instructiunilor de invalidare si validare a întreruperilor, disponibile în multe dintre limbajele masina. Daca<br />

sistemul de operare începe rutina de testare a indicatorului cu o instructiune de invalidare a întreruperilor<br />

si o termina cu o instructiune de validare, nici o alta activitate nu poate întrerupe aceasta rutina, odata<br />

pornita.<br />

O alta solutie o reprezinta utilizarea instructiunii de testare-si-setare (test-and-set), care este de<br />

asemenea disponibila în multe dintre limbajele masina. Unitatii centrale de prelucrare i se cere sa citeasca<br />

valoarea unui indicator, sa o memoreze si apoi sa seteze indicatorul, toate acestea printr-o singura<br />

instructiune masina. Avantajul acestei metode este ca de vreme ce unitatea centrala termina întotdeauna<br />

de executat o instructiune înainte de a sesiza o întrerupere, operatia de testare si setare a indicatorului,<br />

implementata ca o singura instructiune, nu poate fi întrerupta.<br />

Un indicator implementat corect, asa cum am aratat mai sus, poarta numele de semafor<br />

(semaphore), prin analogie cu dispozitivele folosite la caile ferate pentru controlul accesului în diferite<br />

portiuni ale liniilor, într-adevar, utilizarea semafoarelor în cadrul sistemelor informatice este foarte<br />

asemanatoare cu întrebuintarea lor în sistemele de transport pe calea ferata. O secventa de instructiuni<br />

care trebuie executate fara întreruperi corespunde unei portiuni de cale ferata pe care poate trece la un<br />

moment dat un singur tren. O asemenea secventa de instructiuni poarta numele de zona critica (critical<br />

region). Înainte de a intra într-o zona critica, un proces trebuie sa gaseasca nul semaforul asociat ei si sa-l<br />

seteze; apoi trebuie sa stearga semaforul dupa iesirea din zona critica.<br />

Interblocarea<br />

O alta problema care poate aparea în timpul alocarii resurselor este interblocarea (deadlock) -<br />

situatia în care desfasurarea a doua sau mai multe procese este blocata deoarece fiecare dintre ele asteapta<br />

acces la resurse alocate celuilalt. De exemplu, un proces poate sa aiba acces la imprimanta atasata<br />

calculatorului, dar sa astepte dobândirea accesului la unitatea de banda magnetica, în timp ce alt proces<br />

are acces la unitatea de banda magnetica, dar asteapta dobândirea accesului la imprimanta. Un alt<br />

exemplu apare în situatia în care procesele creeaza noi procese pentru efectuarea unor operatii mai<br />

simple. Daca secventiatorul nu are destul spatiu în tabelul de procese si fiecare proces din sistem trebuie<br />

sa creeze un proces suplimentar înainte de a-si termina treaba, atunci nici un proces nu va putea continua.<br />

Asemenea situatii, precum si altele pot reduce drastic performantele unui sistem.<br />

Poate sa apara o interblocare numai daca sunt satisfacute simultan urmatoarele trei conditii:<br />

1. Exista o competitie pentru resurse care nu pot fi partajate.<br />

2. Resursele sunt solicitate în mod partial, ceea ce înseamna ca dispunând de anumite resurse, un<br />

proces va reveni ulterior solicitând mai multe.<br />

3. O data ce o resursa a fost alocata, nu se poate forta eliberarea sa.<br />

Concluzia care rezulta este ca eliminarea interblocarii se poate face prin eliminare uneia dintre<br />

cele trei conditii de mai sus. În gener al, tehnicile care se ocupa de a treia conditie sunt grupate într-o<br />

categorie cunoscuta sub numele de scheme de detectie si corectie a interblocarilor. Ele pornesc de la<br />

ipoteza ca ocurenta unei interblocari este atât de improbabila încât nu merita sa se faca nici un efort<br />

pentru evitarea acestei situatii. Solutia o reprezinta detectarea interblocarii atunci când apare si apoi<br />

corectarea problemei prin eliberarea fortata a unora dintre resursele alocate. Cazul unui tabel de procese<br />

plin, de exemplu, face parte din aceasta clasa. De obicei, administrator de sistem va crea un tabel de<br />

procese suficient de mare pentru instalare particulara. Daca totusi survine o interblocare datorita umplerii<br />

tabelului, administratorul îsi va utiliza drepturile sale de „super utilizator” pentru a elimina (termenul<br />

tehnic este kill) unele dintre procese, eliberând astfel spatiu în tabelul de procese, pentru ca procesele<br />

ramase sa-si poata continua activitatile.<br />

Tehnicile care se ocupa de primele doua conditii sunt denumite în general scheme de evitare a<br />

interblocarii. De exemplu, o astfel de tehnica se poate ocupa de a doua conditie, cerând fiecarui proces sa<br />

solicite resursele de care are nevoie nu rând pe rând, ci toate o data. O alta tehnica, mai imaginativa, se<br />

12


ocupa de prima conditie, si anume nu prin eliminarea directa a competitiei, ci prin transformarea<br />

resurselor nepartajabile în resurse partajabile. De exemplu, sa presupunem ca resursa în discutie este o<br />

imprimanta si mai multe procese doresc s-o utilizeze. De fiecare data când un proces cere sa utilizeze<br />

imprimanta, sistemul de operare îi satisface cererea, însa în loc sa-l conecteze la imprimanta, sistemul de<br />

operare îl conecteaza la un driver care stocheaza pe disc informatiile ce trebuie tiparite, fara s-o trimita la<br />

imprimanta. Astfel, fiecare proces, crezând ca are acces la imprimanta, se executa în mod normal. Mai<br />

târziu, când imprimanta este libera, sistemul de operare poate transfera datele de pe disc la imprimanta, în<br />

acest mod sistemul de operare a facut ca resursa nepartajabila sa apara ca partajabila, creând iluzia<br />

existentei mai multor imprimante. Tehnica de memorare a datelor si de trimitere a lor la iesire într-un<br />

moment ulterior, mai convenabil, poarta numele de spooling si este o tehnica destul de raspândit a în<br />

cadrul sistemelor de operare.<br />

Desigur, atunci când procesele intra în competitie pentru resursele unui calculator pot surveni si<br />

alte probleme. De exemplu, un administrator de fisiere permite de regula mai multor procese accesul la<br />

acelasi fisier pentru a citi date din el, dar pot sa apara conflicte daca mai multe procese încearca simultan<br />

sa modifice fisierul. De aceea, un administrator de fisiere poate aloca accesul la fisiere în conformitate cu<br />

cerintele proceselor, permitând mai multor procese accesul simultan pentru citire, dar numai unui singur<br />

proces dreptul de scriere la un moment dat. Alte sisteme pot sparge fisierul în mai multe parti, astfel încât<br />

diverse procese sa poata altera simultan diferite parti ale fisierului. Totusi, ramân înca de rezolvat alte<br />

probleme. De exemplu, cum ar trebui avertizate acele procese care cer acces la un fisier numai pentru a<br />

citi date ca un proces care are dreptul de scriere modifica fisierul?<br />

5. RETELE DE CALCULATO ARE<br />

La început, o retea tipica era compusa din calculatoare izolate care nu puteau face mare lucru în<br />

plus fata de transferul fisierelor pe linii telefonice utilizând programe integrate în sistemele de operare sub<br />

forma de software utilitar. Astazi, o mare parte dintre functiile de administrare a retelei sunt înca<br />

implementate sub forma de software utilitar, cu toate ca sistemele de operare moderne, proiectate special<br />

în eventualitatea lucrului cu retelele de calculatoare, încep sa înglobeze multe dintre aceste caracteristici.<br />

De exemplu, implementarea software a suitei de protocoale TCP/IP (pe care o vom prezenta mai târziu în<br />

acest capitol) este furnizata astazi ca parte componenta a sistemului de operare UNIX. În acest subcapitol<br />

si în urmatorul vom prezenta unele dintre subiectele asociate acestui domeniu al sistemelor de operare,<br />

domeniu aflat în plina dezvoltare.<br />

Clasificarea retelelor<br />

Fiecare retea de calculatoare se încadreaza într-una din urmatoarele categorii: retele locale de<br />

calculatoare (Local Area Networks - LAN) si retele de arie larga (Area Networks - WAN). O retea<br />

locala consta de obicei dintr-un grup de calculat plasate într-o singura cladire sau într-un complex de<br />

cladiri. De exemplu, calculatoarele utilizate într-un campus universitar sau într-o fabrica pot fi conectate<br />

într-o retea locala. O retea WAN cuprinde calculatoare care se pot afla în diverse colturi ale unui oras sau<br />

ale lumii. Diferenta principala dintre retelele locale si cele de arie larga tine de tehnologiile utilizate<br />

pentru stabilirea cailor de comunicatie. (De exemplu, legaturile prin satelit sunt adecvate pentru retele<br />

WAN, dar nu si pentru retele LAN). În prezent, programele care trateaza aceste diferente sunt izolate de<br />

regula într-o mica parte a pachetului software global de retea, asa ca din punct de vedere softwar e<br />

deosebirile dintre retelele locale si cele de arie larga devin din ce în ce mai nesemnificative.<br />

Alt criteriu de clasificare a retelelor de calculatoare este alcatuirea retelei din hardware si<br />

software produs de un furnizor unic sau implementarea ei ca un conglomerat de produse de la diversi<br />

fabricanti. Retelele din primul tip sunt denumite uneori retele închise (sau retele brevetate), iar cele din al<br />

doilea tip sunt cunoscute sub numele de retele deschise. (De fapt, termenul deschis se refera la faptul ca<br />

specificatiile pentru componentele retelei sunt deschise pentru public, ceea ce conduce la compatibilitatea<br />

dintre produse ale diferitilor furnizori, implicându-se astfel faptul ca reteaua consta din dispozitive si<br />

programe din surse aflate în competitie). Retelele închise sunt o prezenta mult mai obisnuita în cadrul<br />

retelelor locale, deoarece în acest caz întreaga retea este utilizata de regula de catre o singura organizatie,<br />

în schimb, retelele de arie larga tind sa fie retele deschise, deoarece includ adesea organizatii diferite,<br />

fiecare dintre ele având propriul sau echipament. Reteaua Internet este un sistem deschis. Într-adevar<br />

13


comunicatia prin Internet este realizata prin intermediul unui ansamblu deschis de standarde, cunoscut<br />

sub numele de suita de protocoale TCP/IP 1 , despre care vom discuta în subcapitolul urmator.<br />

O alta metoda de clasificare a retelelor de calculatoare se bazeaza pe topologie, adica pe modul în<br />

care sunt conectate calculatoarele. Figura 10 reprezinta câteva dintre topologiile uzuale: inel (ring), în<br />

care calculatoarele sunt conectate circular; magistrala (bus), în care calculatoarele sunt conectate printr-o<br />

linie de comunicatie comuna, denumita magistrala; stea, în care o masina serveste drept conector (hub) la<br />

care sunt cuplate toate celelalte calculatoare; si topologie neregulata, în care calculatoarele sunt conectate<br />

într-un mod aparent aleator. Topologia neregulata este frecventa în cazul retelelor de arie larga, în timp ce<br />

topologiile de tip inel si magistrala se întâlnesc de obicei în mediile locale, în care realizarea retelelor<br />

cade de obicei sub o autoritate unica.<br />

(a) Topologie de tip inel<br />

(c) Topologie de tip stea<br />

Figura 1.9 Topologii de retele de calculatoare<br />

(b) Topologie de tip magistrala<br />

(d) Topologie neregulata (retea)<br />

Reteaua Internet<br />

Reteaua Internet este o retea de retele care s-a dezvoltat de-a lungul timpului, începuturile sale se<br />

leaga de un program de cercetare initiat în anul 1973 de catre Defense Advanced Research Projects<br />

Agency (DARPA). Scopul acestui program îl constituia dezvoltarea abilitatii de conectare a diferitelor<br />

retele de calculatoare astfel încât ele sa poata functiona ca o singura retea. În prezent, Internet reprezinta o<br />

combinatie de retele WAN si retele LAN continând o magistrala alcatuita din cai de comunicatie de mare<br />

viteza între diversele zone ale Statelor Unite ale Americii. Pentru conectarea la aceasta magistrala a altor<br />

retele, grupate de obicei pe o arie mult mai restrânsa, se utilizeaza calculatoare special proiectate,<br />

denumite routere (routers). La rândul lor, aceste retele sunt conectate prin intermediul altor routere cu<br />

alte retele. În acest mod s-a dezvoltat o retea ce contine milioane de calculatoare, fiecare dintre ele<br />

purtând numele de gazda (host), raspândite în lumea întreaga; reteaua continua sa se dezvolte, noi<br />

calculatoare adaugându-i-se în fiecare zi.<br />

Adresarea în Internet<br />

Din punct de vedere conceptual, Internet poate fi considerat o colectie de grupuri de retele,<br />

cunoscute sub numele de domenii (figura 1.10), fiecare dintre aceste domenii constând din acele retele<br />

1<br />

Acest fir comun stabileste domeniul retelei Internet. Cu toate acestea, definitia este contrazisa de faptul ca<br />

organizatii care detin retele brevetate sunt conectate prin intermediul retelei Internet cu ajutorul unor calculatoare ce<br />

poarta numele de porti (gateway), care fac conversia între protocolul TCP/TP si cele utilizate de reteaua brevetata<br />

respectiva. Astfel, termenul de Internet este folosit uneori cu referire la un sistem mai larg decât cel specificat prin<br />

definitia de mai sus.<br />

14


care sunt utilizate de catre o singura organizatie, cum ar fi o universitate, o firma sau o institutie<br />

guvernamentala. Fiecare domeniu este un sistem autonom, care poate fi configurat asa cum doreste<br />

autoritatea locala, uneori chiar ca un ansamblu global de retele WAN.<br />

Figura 1.10 Gruparea retelelor locale în domenii<br />

Adresa unui calculator (gazda) din Internet consta dintr-un sir de biti (având în mod curent o<br />

lungime de 32 de biti) ce contine doua parti - o parte care precizeaza domeniul în care este inclus<br />

calculatorul gazda si o parte care identifica adresa gazdei în cadrul domeniului. Partea din adresa care<br />

defineste domeniul, identificatorul de retea (network identifier), este atribuita de catre InterNIC<br />

(Internet Network Information Center) la crearea domeniului si este înregistrata. Acest proces de<br />

înregistrare asigura faptul ca fiecare domeniu din Internet are un identificator unic de retea. Partea din<br />

adresa care defineste un calculator gazda individual din cadrul unui domeniu, adresa gazdei (host<br />

address), este atribuita de catre autoritatea locala. De exemplu, identificatorul de retea alocat editurii<br />

Addison Wesley Longman, Inc. este 192.207.177 (identificatorii de retea sunt scrisi în mod uzual în<br />

notatie zecimala cu punct). La rândul lui, un calculator din cadrul acestui domeniu va avea o adresa de<br />

tipul 192.207.177.133, ultimul octet al adresei reprezentând adresa calculatorului gazda.<br />

Oamenii lucreaza însa mai greu cu adrese sub forma unui sir de biti. Din aceasta cauza, InterNIC<br />

a alocat în plus fiecarui domeniu o adresa simbolica unica - numele domeniului (domain name). Fiecare<br />

autoritate locala este apoi libera sa extinda numele domeniului pentru a obtine nume semnificative pentru<br />

calculatoarele gazda din domeniul respectiv. De exemplu, numele domeniului editurii Addison Wesley<br />

Longman, Inc. este aw. com, iar un calculator gazda din cadrul acestui domeniu ar putea fi identificat sub<br />

numele mozart. aw. com .<br />

Notatia cu puncte utilizata în adresele simbolice nu are legatura cu notatia cu puncte utilizata la<br />

reprezentarea adresei sub forma unui sir de biti. Partile componente ale adresei simbolice precizeaza<br />

localizarea calculatorului gazda într-un sistem ierarhizat. În particular, adresa mozart. aw. com specifica<br />

un calculator gazda cunoscut sub numele de mozart, aflat în interiorul institutiei aw din categoria<br />

institutiilor comerciale com. În cazul unor domenii foarte mari, autoritatea locala poate decide spargerea<br />

lor în subdomenii, în acest caz adr esa simbolica a calculatoarelor gazda devenind mai lunga. De exemplu,<br />

sa presupunem ca Nowhere University are alocat numele de domeniu nu. edu si decide sa-si împarta<br />

domeniul în subdomenii. Atunci, un calculator gazda de aici ar putea avea o adresa de forma laststop.<br />

compsc. nu. edu cu semnificatia ca gazda laststop este inclusa în subdomeniul compsc din cadrul<br />

institutiei nu, care face parte din clasa domeniilor educationale edu.<br />

În scopul transmiterii de mesaje între utilizatorii individuali ai retelei Internet (un sistem cunoscut<br />

sub numele de e-mail, prescurtarea pentru posta electronica - în engleza, electronic mail), fiecare<br />

autoritate locala poate atribui o adresa de e-mail fiecarui utilizator autorizat din cadrul domeniului sau.<br />

Aceasta adresa consta dintr-un sir de caractere ce identifica utilizatorul, urmat de caracterul @ si apoi de<br />

numele de domeniu alocat calculatorului care are sarcina de gestionare a activitatilor de posti electronica<br />

15


din cadrul domeniului. Astfel, adresa de e-mail a unui utilizator individul care lucreaza la editura Addison<br />

Wesley Longman, Inc. ar putea arata astfd wshakespeare@mozart.aw.com . Cu alte cuv inte, calculatorul<br />

gazda cu numit mozart din cadrul domeniului aw.com administreaza posta electronica a utilizatorului<br />

wshakespeare.<br />

Autoritatea locala a fiecarui domeniu este raspunzatoare de pastrarea unui director care sa contina<br />

adresele simbolice s i adresele numerice Internet corespondente ale acelor calculatoare gazda care trebuie<br />

sa fie accesibile din exteriorul domeniulu i. Acest director este implementat pe un calculator dedicat din<br />

cadrul domeniului, denumit server de nume (name server), care raspunde cererilor referitoare la<br />

informatii despre adrese. Împreuna, toate serverele de nume din cadrul retelei Internet constituie un<br />

sistem, distribuit de directoare, utilizat pentru convertirea adreselor din forma simbolica în formele<br />

numerice echivalente. În particular, atunci când un utilizator solicita transmiterea unui mesaj la o anumita<br />

destinatie specificat în forma simbolica, este folosit sistemul de servere de nume pentru a converti adres a<br />

simbolica în sirul de biti echivalent compatibil cu software-ul Internet. Aceasta operatie se efectueaza în<br />

mod normal într-o fractiune de secunda.<br />

Atunci când o organizatie decide sa se conecteze la Internet, ea poate fie devina o parte a unui<br />

domeniu existent, fie sa gaseasca un loc în Internet în care poata plasa un router si sa-si stabileasca<br />

propriul domeniu. Avantajul crearii unui n domeniu este acela ca organizatia are autoritate locala asupra<br />

caracteristicilor domeniului, în loc sa fie supusa autoritatii unei alte organizatii. La crearea unui domeniu<br />

nou, organizatia trebuie sa se înregistreze la InterNIC pentru a obtine un identificator si un nume de<br />

domeniu.<br />

Un individ obtine de obicei acces la Internet devenind membru al unei organizatii care<br />

controleaza un domeniu. Multe firme ofera persoanelor private acces la Internet pe baze comerciale.<br />

Aceste firme, care de obicei dispun de propriul domeniu în Internet, furnizeaza pe calculatoarele lor<br />

programe care permit clientilor sa se conecteze utilizând liniile telefonice. Prin intermediul unei asemenea<br />

conexiuni, un client poate accede la serviciile Internet la care a subscris.<br />

World Wide Web<br />

Pe lânga faptul ca este un mijloc de comunicare prin e-mail, reteaua Internet a devenit un mediu<br />

de transmitere a informatiilor prin intermediul documentelor de tip hipertext (hypertext). Documentele<br />

hipertext contin cuvinte, expresii sau imagini specifice care sunt legate la alte documente. Cititorul unui<br />

document hipertext poate accede dupa dorinta la aceste documente corespondente, de obicei indicând si<br />

apoi executând un clic de mouse asupra elementelor de legatura sau utilizând tastele sageti. De exemplu,<br />

sa presupunem ca într-un document hipertext apare urmatoarea propozitie: „Orchestra a executat<br />

stralucitor 'Bolero-ul' lui Maurice Ravel” s i numele Maurice Ravel este legat la alt document - care<br />

furnizeaza probabil informatii despre compozitor. Cititorul poate decide sa studieze materialul asociat<br />

deplasând cursorul deasupra numelui Maurice Ravel si apoi apasând butonul mouse-ului.<br />

Astfel, cititorul documentelor hipertext poate explora documentele aflate în legatura, urmarind<br />

continuarea unei idei dintr-un document în altul. Prin realizarea le gaturilor între documente, se creeaza o<br />

pânza (web) întretesuta de informatii aflate pe diferite calculatoare. Astfel, pânza care s-a dezvoltat pe<br />

Internet este distribuita pe întregul glob si este cunoscuta sub numele de World Wide Web (prescurtat<br />

WWW sau Web).<br />

Pachetele de programe care-i asista pe cititorii documentelor hipertext în parcurgerea acestora se<br />

împart în doua categorii: programe care joaca rolul de clienti si programe care joaca rolul de servere.<br />

Clientul este rezident pe calculatorul cititorului si raspunde de obtinerea materialelor solicitate de cititor si<br />

prezentarea acesta informatii într-o maniera organizata. Programul client este acela care furnizeaza<br />

interfata cu utilizatorul care-i permite cititorului sa navigheze (browse) prin Web. De aceea, adesea<br />

programul client este denumit browser, sau uneori browser Web. Un program server este rezident pe un<br />

calculator care contine documente la care se poate obtine acces. Sarcina sa este sa furnizeze, la cererea<br />

clientilor, acces la documentele stocate în calculator. Pe scurt, un utilizator capata acces la documente<br />

hipertext prin intermediul unui browser rezident pe calculatorul sau, iar acest browser satisface cererile lui<br />

solicitând serviciile serverelor hipertext distribuite în Internet.<br />

Câteva dintre browserele disponibile astazi sunt Lynx, Mosaic si Netscape Navigator. Ele difera<br />

în ceea ce priveste tipul documentelor cu care pot lucra. De exemplu, browserul Lynx este proiectat sa<br />

opereze doar cu documentele hipertext clasice, ce constau numai din text. Alte browsere pot lucra cu<br />

documente ce con tin sunete, imagini si clipuri video. Aceste documente poarta numele de documente<br />

hipermedia (hypermedia), pentru a se deosebi de documentele hipertext clasice.<br />

16


Crearea de documente hipertext necesit a o metoda de stabilire a legaturilor între documente. În<br />

acest scop, fiecare document este identificat printr-o adresa unica, denumita adresa URL (uniform<br />

resource locator) , prin intermediul careia un browser sa poata contacta serverul potrivit si sa solicite apoi<br />

documentul dorit. În figura 12 este descrisa o adresa URL tipica, în cazul multora dintre calculatoarele<br />

gazda din Internet, un anumit document este desemnat ca document implicit. Daca exista documentul<br />

implicit poate fi apelat printr-o adresa URL scurta, care contine numai protocolul si numele simbolic al<br />

calculatorului gazda.<br />

http://mozart.aw.com/authors/Shakespeare/Julius_Caesar.html<br />

Figura 1.11 Adresa URL tipica<br />

Un document hipertext este similar unui document clasic de tip text, prin faptul ca textul pe care-l<br />

contine este codificat caracter cu caracter utilizându-se un sistem cum ar fi ASCII. Diferenta este aceea ca<br />

documentul hipertext contine în plus si marcaje speciale, care - printre altele - permit autorului sa indice<br />

care elemente din document sunt legate la alte documente si sa furnizeze adresele URL necesare pentru<br />

efectuarea acestor legaturi. Acest sistem de marcaje este cunoscut sub numele de Limbaj de Marcare<br />

Hipertext (Hypertext Markup Language - HTML). Utilizând elementele HTML, autorul unui<br />

document hipertext descrie informatiile necesare unui browser pentru a-si duce sarcinile la bun sfârsit.<br />

Probleme de securitate<br />

Atunci când un calculator este conectat la o retea, el devine accesibil multor utilizatori potentiali.<br />

Problemele care apar în acest caz se împart în doua categorii: accesul neautorizat la informatii si actele de<br />

vandalism. Una dintre solutiile pentru rezolvarea problemei accesului neautorizat o reprezinta utilizarea<br />

parolelor, fie pentru controlul accesului la calculatorul propriu-zis, fie pentru controlul accesului la<br />

anumite date. Din pacate, parolele nu ramân întotdeauna secrete. Cea mai raspândita metoda de a le afla<br />

este prin încercari. De exemplu, s-ar putea ca utilizatorii care se tem ca-si vor uita parola sa utilizeze ca<br />

parola propriul nume sau date importante, precum cea de nastere; aceste parole sunt usor de depistat.<br />

Într-o încercare de a se opune acestui joc de-a ghicitul parolei, sistemele de operare pot fi<br />

proiectate astfel încât sa raporteze orice avalansa de parole incorecte sau sa comunice fiecarui utilizator la<br />

începutul fiecarei noi sesiuni de lucru data si ora la care a fost folosit ultima data contul respectiv. Aceasta<br />

metoda permite utilizatorilor sa detecteze orice întrebuintare neautorizata a conturilor lor. O metoda de<br />

aparare mai sofisticata împotriva celor care încearca sa ghiceasca parolele este aceea de a se crea iluzia<br />

succesului la introducerea parolelor false si de a se furniza intrusului informatii false, înregistrându-se<br />

totodata originea acestuia.<br />

O alta solutie pentru protectia datelor împotriva accesului neautorizat o reprezinta criptarea lor, în<br />

ideea ca în acest fel chiar daca intrusul obtine datele, informatiile continute ramân inaccesibile, în acest<br />

scop au fost dezvoltate si continua sa fie perfectionate diverse tehnici de criptare.<br />

Problema vandalismului este ilustrata de aparitia unor afectiuni cum ar fi virusii calculatoarelor si<br />

viermii de retea, termeni destinati mai degraba sa atraga interesul publicului decât sa identifice din punct<br />

de vedere tehnic un anumit tip de vandalism, în general, un virus este un segment de program care se<br />

ataseaza la alte programe din calculator. De exemplu, un virus se poate insera la începutul unui program<br />

deja existent în sistem, astfel încât la fiecare executie a programului gazda sa se execute mai întâi virusul.<br />

Atunci când este executat, virusul poate realiza diverse activitati daunatoare usor de remarcat sau poate<br />

cauta pur si simplu alte programe la care sa ataseze copii ale sale. Daca un program infectat este transferat<br />

17<br />

Numele documentului<br />

Calea de directoare care precizeaza localizarea<br />

documentului în cadrul sistemului de fisiere de pe<br />

calculatorul gazda<br />

Numele simbolic al calculatorului gazda care contine documentul<br />

Protocolul necesar pentru accesul la document. În acest caz este vorba de<br />

protocolul de transfer hipertext (hypertext transfer protocol – http).


la alt calculator, fie prin intermediul unei retele de calculatoare, fie pe discheta, virusul începe sa infecteze<br />

programele noului calculator imediat ce programul transferat este executat. Astfel, virusii migreaza de la<br />

un calculator la altul, în unele cazuri, virusii sunt proiectati astfel încât sa se raspândeasca în alte<br />

programe pâna la aparitia unei conditii predeterminate, cum ar fi o anumita data calendaristica, când<br />

efectueaza diferite operatii daunatoare. Acest comportament sporeste posibilitatea ca virusul sa se<br />

raspândeasca pe numeroase calculatoare înainte de a se manifesta.<br />

Termenul de vierme se refera de obicei la un program autonom care se transfera pe sine însusi<br />

într-o retea de calculatoare, ramâne rezident în calculatoarele din retea si trimite copii ale sale în retea. Ca<br />

si în cazul virusilor, aceste programe pot fi realizate astfel încât sa se multiplice sau sa efectueze alte acte<br />

de vandalism.<br />

Pe masura ce popularitatea retelelor de calculatoare creste, pagubele potentiale produse de accesul<br />

neautorizat la informatii si de actele de vandalism cresc si ele. Acest fapt ridica multe întrebari legate de<br />

oportunitatea plasarii de informatii strict secrete pe un calculator conectat într-o retea, de responsabilitatea<br />

furnizarii unei protectii inadecvate a in formatiilor, precum si de responsabilitatea pentru actele de<br />

vandalism. De aceea, problemele de etica si de legislatie asociate acestor subiecte i promit sa genereze odezbatere<br />

aprinsa în viitor.<br />

6. PROTOCOALE DE RETEA<br />

Ansamblul de reguli care guverneaza comunicatia dintre diferite componente ale unui calculator<br />

poarta numele de protocol, facându-se astfel analogia cu protocoale utilizate în cadrul societatii pentru<br />

controlul interactiunilor dintre oameni. În cadrul unei retele de calculatoare, protocoalele definesc<br />

detaliile fiecarei activitati, între modurile în care sunt adresate mesajele, în care se deleaga de la un<br />

calculator la altul dreptul de a transmite mesaje si în care sunt tratate operatiile de împachetare a<br />

mesajelor pentru transmisie si de despachetare a acestora la receptie. Sa începem a studia protocoalele<br />

care controleaza dreptul unui calculator de a-si trimite în retea propriile mesaje.<br />

Drepturi de control al transmisiei<br />

Una dintre solutiile utilizate pentru coordonarea dreptului de transmitere a mesajelor este<br />

protocolul inel cu jeton (token ring) pentru retelele cu topologie în inel. În cadrul acestui protocol,<br />

fiecare calculator transmite mesajele numai spre „dreapta” receptioneaza numai din partea „stânga”, asa<br />

cum se poate vedea în figura 13. Un mesaj din partea unui calculator catre alt calculator trebuie deci<br />

transmis în retea în sensul invers acelor de ceasornic pâna când ajunge la destinatie, în acel moment,<br />

calculatorul destinatar îsi pastreaza o copie a mesajului si trimite mai departe în inel alta copie. Când<br />

copia ajunge la calculatorul care a trimis mesajul, acesta stie ca mesajul a ajuns la destinatie si elimina<br />

mesajul din inel. Desigur, functionarea sistemului depinde de colaborarea dintre calculatoare. Daca<br />

fiecare calculator va insista sa-si trimita propriul mesaj, în loc sa le retransmita pe cele emise de celelalte,<br />

sistemul nu va functiona.<br />

Figura 1.12 Comunicatia în cazul unei topologii în inel<br />

18


Pentru a rezolva aceasta problema, de-a lungul inelului este transmis un sir unic de biti, denumit<br />

jeton (token). Posesia acestui jeton da unui calculator dreptul de a-si transmite propriile mesaje; fara<br />

jeton, unui calculator i se permite numai sa transmita mai departe mesajele primite din inel. în mod<br />

normal, fiecare calculator transmite jetonul de la stânga la dreapta similar transmiterii mesajelor. Daca<br />

totusi calculatorul care receptioneaza jetonul are mesaje de transmis în inel, el va retine jetonul si va<br />

transmite un mesaj. Dupa ce acest mesaj îsi completeaza ciclul în jurul inelului, calculatorul transmite<br />

jetonul urmatorului calculator din inel. La fel, atunci când urmatorul calculator receptioneaza jetonul, el<br />

poate sa-l transmita imediat mai departe sau sa-si emita mai întâi propriul mesaj. Astfel, toate<br />

calculatoarele din retea au sanse egale sa-si transmita propriile mesaje, în timp ce jetonul se roteste de-a<br />

lungul inelului.<br />

Un alt protocol pentru controlul dreptului de transmisie este întâlnit la Ethernet, care este o<br />

versiune foarte raspândita a topologiei de retea de tip magistrala. Într-o retea Ethernet, dreptul de<br />

transmisie a mesajelor este controlat de un protocol cunoscut sub numele de CSMA/CD (Carrier Sense,<br />

Multiple Access with Collision Detection - acces multiplu cu detectarea purtatoarei si a coliziunilor).<br />

Acest protocol impune ca fiecare mesaj emis de orice calculator sa fie transmis tuturor calculatoarelor de<br />

pe magistrala (figura 14). Fiecare calculator monitorizeaza toate mesajele, dar le pastreaza numai pe cele<br />

care-i sunt adresate. Pentru a transmite un mesaj, un calculator asteapta pâna când magistrala este libera,<br />

moment în care începe transmisia, continuând sa asculte magistrala. Daca alt calculator începe de<br />

asemenea sa transmita, ambele calculatoare vor detecta coliziunea si dupa un scurt interval de pauza cu<br />

durata aleatoare vor încerca din nou sa transmita. Rezultatul este un sistem similar cu cel utilizat de un<br />

mic grup de oameni care discuta între ei. Daca doua persoane încep sa vorbeasca simultan, ambele se<br />

opresc. Diferenta este ca cele doua persoane pot continua apoi invitându-se reciproc sa continue: „Ma<br />

scuzati, continuati va rog.”, „Nu, nu, dupa dumneavoastra”, în timp în cazul protocolului CSMA/CD<br />

fiecare calculator va încerca pur si simplu sa transmita din nou.<br />

Figura 1.13 Comunicatia în cadrul unei retele cu topologie de tip magistrala<br />

Dezvoltarea unui software de retea structurat pe niveluri<br />

Una dintre principalele sarcini ale unui software de retea este sa furnizeze instrumentele abstracte<br />

pentru transferul mesajelor în cadrul retelei, într-adevar, asemenea unelte formeaza infrastructura pe care<br />

se bazeaza, modelul client/server. Interesul nostru pentru studierea structurii acestui software este dublu:<br />

întelegerea ei este utila pentru întelegerea retelei Internet, iar solutia structurarii pe niveluri exemplifica<br />

multe dintre j principiile pe care se bazeaza o mare parte din sistemele software.<br />

Analogie (exemplul este citat din [Gleen8])<br />

Vom considera pentru început urmatoarea analogie: sa presupunem ca firma la care lucrati vrea sa<br />

livreze piese de schimb unui client aflat în alt oras. Sarcina dumneavoastra este sa strângeti aceste piese si<br />

sa le împachetati conform specificat iei companiei de expeditii. Livrati apoi pachetul, cu adresa<br />

destinatarului complet corect, companiei de expeditii pe care ati ales-o. În acest moment v-ati îndeplinit în<br />

întregime sarcina încredintata; responsabilitatea în ceea ce priveste livrarea pieselor a fost trecuta firmei<br />

de transport.<br />

Desigur, compania de transport nu vede aceasta sarcina ca pe transportarea unor piese de schimb.<br />

Sarcina ei este sa transporte un colet având o anumita greutate si anumite dimensiuni la o anumita adresa,<br />

într-un anumit interval de timp. Câta vreme respecta aceste specificatii, expeditorul poate opta între a<br />

trimite pachetul cu camionul, trenul sau avionul. Astfel, coletul dumneavoastra, alaturi de altele, poate fi<br />

19


plasat într-un container conform regulilor transportului aerian. Conformându-se specificatiilor companiei<br />

aviatice, firma de expeditie transfera acesteia respons abilitatea pentru piesele de schimb din colet.<br />

În acest punct, compania de aviatie are sarcina de a transporta un container mare de la un aeroport<br />

la altul, în functie de încarcatura, ea poate decide sa plaseze acel container într-un zbor direct, sa-l trimita<br />

printr-un zbor cu escala sau sa subcontracteze transportul containerului unei alte linii aeriene.<br />

În oricare dintre aceste cazuri, linia aeriana va livra la sfârsit containerul firmei de expeditii din<br />

orasul de destinatie, conform specificatiilor acesteia din urma. Firma de expeditii descarca containerul si<br />

livreaza apoi coletul dumneavoastra la adresa pe care ati precizat-o.<br />

Pe scurt, transportul unor piese se realizeaza prin intermediul unei ierarhii cu trei niveluri: nivelul<br />

utilizatorului (al dum neavoastra si al clientului dumneavoastra), firma de expeditii si compania de aviatie.<br />

Fiecare nivel foloseste nivelul imediat inferior ca pe un instrument abstract. (Dumneavoastra nu sunteti<br />

preocupati de detaliile legate de activitatea firmei de expeditii, iar firma de expeditii nu este interesata de<br />

operatiile interne din cadrul companiei aviatice.) Fiecare nivel din aceasta ierarhie este reprezentat atât la<br />

origine cât si la destinatie, sensul operatiilor de la receptie fiind invers celor de la origine. Ac esta este si<br />

cazul software-ului de control al comunicatiilor dintr-o retea, cu exceptia faptului ca de obicei exista mai<br />

mult de trei niveluri, iar fiecare nivel, denumit strat (layer), este alcatuit dintr-un ansamblu de rutine<br />

software, nu din persoane si firme.<br />

Dumneavoastra Client<br />

Pachet de dimensiuni mici Pachet de dimensiuni mici<br />

Firma de expeditii Firma de expeditii<br />

Container Container<br />

Avion<br />

Companie aviatica Companie aviatica<br />

Figura 1.14 Exemplul referitor la expedierea unui colet<br />

Diviziunea muncii într-o ierarhie de straturi are doua consecinte importante care reprezinta<br />

obiective comune în realizarea oricarei arhitecturi ierarhizate. În primul rând, operatia generala poate fi<br />

împartita în suboperatii administrabile separat, fiecare dintre ele având scopuri specifice. În al doilea rând,<br />

arhitectura ierarhizata duce la stabilirea de frontiere bine definite între suboperatii, între ele putând fi<br />

implementate interfete standard. Daca se conformeaza acestora interfete standard, diferite solutii pentru<br />

realizarea aceleiasi suboperatii pot fi schimbate între ele fara ca restul sistemului sa fie afectat. Întradevar,<br />

solutia particulara utilizata pentru rezolvarea unei suboperatii de la un anumit nivel poate fi<br />

utilizata ca instrument abstract în rezolvarea operatiilor de la nivelurile superioare.<br />

Arhitectura software a retelei Internet<br />

Cele patru niveluri ale software-ului Internet sunt prezentate în figura 1.15. Coloane din stânga<br />

reprezinta nivelurile software utilizate de calculatorul de la originea mesajului; coloana din dreapta<br />

reprezinta nivelurile utilizate de calculatorul de la destinatia mesajului. Ca si în analogia noastra legata de<br />

livrarea unui colet, nivelurile software de la origine si destinatie sunt aceleasi. Sagetile din figura 16<br />

precizeaza calea parcursa de fiecare mesaj. Ca preliminarii pentru transmisie, un mesaj poate fi împartit în<br />

unitati mai mici. Apoi, fiecare unitate de mesaj este „împachetata” repetat de catre nivelurile software, pe<br />

masura ce se deplaseaza în jos în coloana consta din stânga. Împachetarea consta din adaugarea de biti<br />

suplimentari înainte si dupa fiecare unitate de mesaj. O astfel de unitate împachetata poarta numele de<br />

pachet. Astfel, pachetele care sunt receptionate de catre calculatorul de la destinatie sunt de fapt pachete<br />

continute în alte pachete. Aceste pachete incluse unele în altele sunt apoi despachetate, nivel cu nivel, pe<br />

masura ce unitatea de mesaj se propaga în sus în coloana din dreapta din figura 1.15, pâna când unitatile<br />

sunt în sfârsit reasamblate si livrate modulului software adecvat de la calculatorul destinatie.<br />

Nu este ceva neobisnuit ca dimens iunea suplimentara datorata împachetarii sa fie mai mare decât<br />

lungimea unitatii de mesaj continute în pachet. Unitati de mesaj având dimensiunea de un octet sunt ceva<br />

obisnuit, în timp ce fiecare pachet contine mai mult de 50 de biti de împachetare. Desi în aceste conditii<br />

transmisia poate sa para ineficienta, sistemul functioneaza foarte bine.<br />

20


Nivelul plasat cel mai sus în ierarhia software Internet este nivelul aplicatiei. El include software<br />

care trateaza activitat ile specifice unei anumite aplicatii. De exemplu, în cazul postei electronice,<br />

software-ul din nivelul aplicatiei stocheaza mesajele receptionate si supervizeaza transmisia mesajelor. În<br />

cazul transferului de fisiere de la un calculator la altul, software-ul de la nivelul de aplicatie comunica cu<br />

administratorul de fisiere pentru a obtine acces la fis ierul care trebuie transferat, precum si cu<br />

administratorul de fisiere de la calculatorul destinatie pentru a stoca fisierul transferat în sistemul lui de<br />

fisiere.<br />

Origin ea mesajului Destinatia mesajului<br />

Nivelul<br />

aplicatiei<br />

Nivelul<br />

transportului<br />

Nivelul<br />

retelei<br />

Nivelul<br />

legaturii<br />

Figura 1.15. Nivelurile software Internet<br />

Trebuie sa facem diferenta dintre software-ul continut în nivelul de aplicatie din Internet si<br />

software-ul vazut ca software de aplicatie. Desi denumirile sunt similare, nivelul de aplicatie al softwareului<br />

pentru Internet este implementat de obicei ca un software utilitar si consta din rutine care sunt<br />

folosite ca instrumente abstracte de catre aplicatiile obisnuite. Diferitele pachete software care permit<br />

unui utilizator sa receptioneze si sa trimita mesaje e-mail prin intermediul unei interfete grafice se<br />

încadreaz a în rândul clasei de aplicatii software, dar nu sunt ele însele componente ale nivelului de<br />

aplicatie prin Internet. Ele folosesc însa, pentru a-si realiza sarcinile, instrumentele abstracte puse la<br />

dispozitie de nivelul de aplicatie din Internet. Browserele Web utilizate pentru accesul la documentele<br />

hipertext constituie alte exemple de aplicatii care recurg la serviciile oferite de nivelul de aplicatie din<br />

Internet pentru a-si desfasura activitatea.<br />

Nivelul transportului este utilizat de catre nivelul aplicatiei într-un mod foarte asemanator celui în<br />

care a fost utilizata în exemplul de arhitectura ierarhizata prezentat anterior firma de expeditie pentru<br />

trimiterea coletului cu piese de schimb. Aceasta înseamna ca nivelul aplicatiei preda nivelului<br />

transportului mesajul care trebuie transmis, însotit de adresa de destinatie. La fel cum este<br />

responsabilitatea dumneavoastra sa furnizati o adresa compatibila cu specificatiile firmei de expeditie,<br />

nivelul aplicatiei este raspunzator cu furnizarea unei adrese compatibile cu nivelul transportului. În acest<br />

scop, nivelul aplicatiei trebuie sa solicite serviciile serverelor de nume din Internet pentru a coverti adrese<br />

simbolice utilizate de oameni în adresele de retea corespondente. Dupa receptionarea mesajului si a<br />

adresei de destinatie, nivelul transportului împarte mesajul în segmente cu dimensiunea compatibila cu<br />

propriile sale specificatii, adauga acestor segmente numere de secventa care sa permita refacerea<br />

mesajului original, le ataseaza adresa de destinatie si trimite apoi pachetele rezultate catre nivelul retelei.<br />

Nivelul retelei este responsabil de propagarea corecta prin Internet pâna la destinatie a pachetelor<br />

receptionate de la nivelul transportului. El realizeaza acest lucru prin atasarea la fiecare pachet a unei<br />

adrese intermediare de destinatie, care se determina astfel: daca destinatia finala a pachetului este în<br />

cadrul retelei curente, adresa adaugata va fi identica cu adresa destinatiei finale; altfel, ea va fi adresa<br />

routerului din cadrul retelei curente. Astfel, un pachet destinat unui calculator din afara retelei curente va<br />

fi trimis la router, de unde va fi transferat într-o retea adiacenta. Apoi, nivelul retelei completeaza<br />

pachetele receptionate de la nivelul transportului cu informatii suplimentare care precizeaza adresa<br />

intermediara. Pachetele extinse sunt apoi predate nivelului legaturii.<br />

21<br />

Nivelul<br />

aplicatiei<br />

Nivelul<br />

transportului<br />

Nivelul<br />

retelei<br />

Nivelul<br />

legaturii


Responsabilitatea nivelului de legatura este sa se ocupe de detaliile de comunicatie proprii retelei<br />

particulare în care sunt plasate calculatoarele. În cazul unei retele cu protocol inel cu jeton, pentru a<br />

efectua transmisia, nivelul legaturii trebuie sa astepte sa obtina posesia jetonului. Daca reteaua utilizeaza<br />

protocolul CSMS/CD, înainte de a transmite nivelul legatura trebuie sa astepte pâna la aparitia unui<br />

interval de liniste pe magistrala. În plus, fiecare retea individuala din Internet poseda propriul sau sistem<br />

de adresare, care este independent de sistemul de adresare utilizat de Internet, lucru de altfel explicabil,<br />

daca tinem cont de faptul ca multe din ele functionau deja în momentul în care administratorii lor au decis<br />

atasarea lor la Internet. De aceea, nivelul legaturii mai trebuie sa converteasca în sistemul de adresare<br />

local adresele Internet atasate pachetelor si sa le adauge la pachet, sub forma unui strat suplimentar de<br />

împachetare.<br />

Ca si în cazul analogiei cu expedierea unui colet cu piese de schimb, fiecare nivel din ierarhia<br />

software Internet joaca de asemenea un rol si în procesul de receptionare a mesajelor, rol ce consta în<br />

mare în inversarea operatiilor facute de catre nivelurile de la originea mesajelor. Dupa ce nivelul pentru<br />

legatura de la destinatie receptioneaza pachetele din reteaua de comunicatie, el elimina învelisul lor<br />

(adresa în forma compatibila cu reteaua locala), atasat pachetului de nivelul legaturii de la originea<br />

mesajului, si apoi livreaza pachetul ramas catre nivelul sau pentru retea.<br />

De fiecare data când nivelul retelei primeste un pachet de la nivelul pentru legatura asociat lui, el<br />

detaseaza adresa Internet intermediara atasata de catre corespondentul lui de la emisie si studiaza adresa<br />

destinatiei finale, continuta în pachet. Daca aceasta coincide cu propria sa adresa, nivelul retelei livreaza<br />

pachetul catre nivelul pentru transport asociat lui; altfel, nivelul retelei stie ca pachetul trebuie trimis mai<br />

departe în Internet. În acest caz, el reîmpacheteaza pachetul, adaugându-i noua adresa intermediara, si-i<br />

da drumul mai departe, trimitându-l nivelului legaturii. Astfel, pachetele sar de la un calculator la altul<br />

pâna când ating destinatia finala. În timpul transferului, cade în sarcina nivelului retelei sa determine<br />

destinatia urmatorului salt.<br />

Pentru a sprijini procesul de readresare, nivelul retelei memoreaza un tabel de dirijare (routing)<br />

care contine adresele destinatiilor finale cu care s-a lucrat recent, precum si adresele intermediare la care a<br />

fost trimis fiecare dintre pachete. Diferitele niveluri retea din Internet îsi comunica periodic datele din<br />

tabelele lor de dirijare, astfel ca informatiile despre adresele de propagare a mesajelor se distribuie treptat<br />

în Internet. Fiecare nivel pentru retea pastreaza numai acele informatii despre care crede ca-i sunt<br />

necesare si sterge periodic datele vechi din tabelul sau de dirijare, pentru ca acest tabel sa nu devina prea<br />

mare. De aceea, continutul tabelelor de dirijare din Internet este dinamic si este deci posibil ca pachete<br />

care reprezinta diferite parti ale aceluiasi mesaj sa ajunga la destinatie parcurgând trasee diferite prin<br />

retea.<br />

Daca nivelul retelei despacheteaza un mesaj primit si descopera ca adresa din pachetul inclus este<br />

adresa calculatorului sau, el livreaza continutul pachetului catre nivelul pentru transport asociat lui. În<br />

consecinta, numai nivelurile pentru legatura si pentru retea sunt implicate în trimiterea mai departe a<br />

pachetelor destinate altor calculatoare. Nivelul transportului si nivelul aplicatiei sunt scutite de acest efort,<br />

ele operând numai asupra pachetelor adresate calculatorului pe care sunt rezidente (figura 1.16). În<br />

momentul în care nivelul transportului primeste pachete de la nivelul retelei, el extrage continutul<br />

segmentelor de mesaj si reasambleaza mesajul original pe baza numerelor de secventa alocate<br />

segmentelor de catre nivelul pentru transport de la origine. Odata ce mesajul este complet, nivelul<br />

transportului îl livreaza nivelului sau de aplicatie, unde acestuia i se poate acorda atentia cuvenita.<br />

Aplicatie<br />

Transport<br />

Retea<br />

Legatura<br />

Retea<br />

Retea<br />

Legatura<br />

Aplicatie<br />

Transport<br />

Retea<br />

Legatura<br />

Legatura<br />

Figura 1.16 Propagarea unei unitati de date prin Internet pe o cale care contine doua calculatoare<br />

intermediare<br />

22


În concluzie, comunicatia prin Internet implica interactiunea dintre diferite niveluri software<br />

rezidente pe multe dintre calculatoarele din cadrul sistemului. În acest context, faptul ca timpul de raspuns<br />

din Internet este de ordinul milisecundelor este uimitor. Într-adevar, o mare parte din tranzactii par sa se<br />

produca instantaneu.<br />

Protocolul TCP/IP<br />

Cererea de retele deschise a generat necesitatea unor standarde publice la care sa se poata alinia<br />

furnizorii de echipamente si programe, astfel încât produsele lor sa functioneze corect împreuna. Unul<br />

dintre standardele rezultate este modelul de referinta OSI (Open System Interconnection), produs de<br />

International Standard Organization (ISO). El se bazeaza pe o ierarhie cu sapte niveluri, spre deosebire de<br />

arhitectura cu patru niveluri utilizata în Internet. Datorita autoritatii detinute de International Standard<br />

Organization, el a devenit un model citat adesea, dar nu a fost implementat înca, în primul rând din cauza<br />

ca înca dinainte de stabilirea lui, suita de protocoale TCP/IP era deja realizata, implementata, mediatizata<br />

pe scara larga si verificata ca un sistem de protocoale potrivit pentru Internet.<br />

Suita de protocoale TCP/IP este un ansamblu de protocoale ce defineste ierarhia pe patru niveluri<br />

utilizata în Internet. De fapt, TCP (Transport Control Protocol) si IP (Internet Protocol) sunt numele a<br />

doar doua din protocoalele ansamblului – asa ca utilizarea termenului de suita de protocoale TCP/IP<br />

pentru întreaga serie nu este riguros exact. Mai precis, TCP defineste o versiune a nivelului transportului.<br />

Spunem o versiune, deoarece suita de protocoale TCP/IP pune la dispozitie doua cai de implementare a<br />

nivelului pentru transport, cea de a doua fiind definita de UDP (User Datagram Protocol). Acest lucru este<br />

analog situatiei în care, expediind un colet cu piese de rezerva unui client, trebuie sa alegeti între diverse<br />

firme de expeditie, fiecare dintre ele oferind acelasi serviciu de baza, dar având propriile sale<br />

caracteristici specifice. Astfel, în functie de calitatea par ticulara a serviciului cerut, nivelul aplicatiei poate<br />

alege sa trimita datele fie prin intermediul versiunii TCP, fie prin intermediul versiunii UDP a nivelului<br />

pentru transport.<br />

Exista doua diferente majore între TCP si UDP. Prima este aceea ca înainte de a transmite datele,<br />

un nivel pentru transport bazat pe TCP trimite un mesaj nivelului pentru transport de la destinatie,<br />

anuntându-l ca-i va trimite niste date si precizând care software din nivelul aplicatiei trebuie sa le<br />

receptioneze. Dupa aceea, el asteapta confirmarea primirii acestui mesaj înainte de a trimite segmentele<br />

mesajului propriu-zis. De aceea se spune ca un nivel pentru transport TCP stabileste o conexiune înainte<br />

de a transmite datele. Un nivel de transport bazat pe UDP nu stabileste o astfel de conexiune înainte de a<br />

transmite datele. El le transmite pur si simplu la adresa care i-a fost furnizata, dupa care nu se mai<br />

intereseaza de ele. Din punctul lui de vedere, nu conteaza nici macar daca masina de la destinatie este sau<br />

nu functionala. Din acest motiv, UDP este denumit protocol fara conexiune.<br />

A doua diferenta semnificativa dintre TCP si UDP este aceea ca nivelurile de transport TCP de la<br />

origine si destinatie coopereaza între ele utilizând încuviintari si retransmisii ale segmentelor de mesaj,<br />

pentru a confirma transferul cu succes al tuturor segmentelor la destinatie. De aceea, TCP este considerat<br />

un protocol sigur, în timp ce despre UDP, care nu ofera asemenea servicii de retransmisie a datelor, se<br />

spune ca este un protocol nesigur. Acest lucru nu înseamna ca UDP este o alegere gresita. Într-adevar, un<br />

nivel de transport bazat pe UDP este mai simplu decât un nivel bazat pe TCP, si daca o aplicatie este<br />

pregatita sa trateze posibilele erori ale UDP, aceasta optiune se poate dovedi mai buna.<br />

IP reprezinta protocolul Internet pentru nivelul retelei. Una dintre caracteristicile sale este aceea<br />

ca de fiecare data când un nivel pentru retea IP pregateste un pachet pentru a-l livra nivelului legaturii, el<br />

asociaza acelui pachet o valoarea denumita contor de salt sau durata de viata. Aceasta valoare reprezinta<br />

numarul maxim de retransmiteri ale pachetului în încercarea acestuia de a-si gasi drumul prin Internet<br />

catre destinatia finala. De fiecare data când un nivel de retea IP retransmite un pachet, el scade cu o<br />

unitate controlul de salt asociat. Utilizând aceasta informati, nivelul retelei poate proteja reteaua Internet<br />

de pachetele care cicleaza la nesfârsit prin sistem. Cu toate ca reteaua Internet continua sa creasca zi de zi,<br />

un contor de salt initial cu valoarea de 64 ramâne mai mult decât suficient pentru a permite unui pachet<br />

sa-si gaseasca drumul spre destinatie prin amalgamul de retele LAN, WAN si routere.<br />

23

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!