Professional Documents
Culture Documents
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.
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.
1
Lucrari: programe, date si
directive de executie Rezultate
Domeniul
utilizatorului
În primele sisteme cu prelucrare pe loturi, fiecare lucrare era însotita de un set de instructiuni care
descriau pasii de executie pentru a se pregati calculatorul în vederea executiei lucrarii respective. Aceste
instructiuni erau codificate într-un limbaj de control al lucrarilor (Job Control Language – JCL) si erau
stocate în coada, alaturi de lucrarea respectiva. La selectarea lucrarii pentru executie, sistemul de operare
tiparea aceste instructiuni la imprimanta, operatorul trebuind apoi sa le citeasca si sa le execute.
Instructiunile care necesitau actiunea operatorului se refereau în special la cuplarea dispozitivelor externe;
în prezent, aceste activitati au fost reduse la minimum, iar limbajul de control al lucrarilor a devenit o cale
de comunicare în primul rând cu sistemul de operare, nu cu operatorul. Într-adevar, în prezent postul de
operator de calculator nu mai este necesar. În locul operatorilor, institutiile recurg astazi la administratori
de sistem, care sa administreze sistemul informatic (activitatea lor constând în achizitia si supervizarea
instalarii noilor echipamente si programe, stabilirea regulilor locale, de exemplu limitarea spatiului de
disc pus la dispozitia fiecarui utilizator, precum si coordonarea eforturilor pentru rezolvarea problemelor
care apar în cadrul sistemului).
Principalul dezavantaj fata de metoda clasica a prelucrarii pe loturi este acela ca dupa ce l-a trimis
în coada de lucrari utilizatorul nu mai poate interveni asupra programului. Aceasta situatie este
acceptabila în cazul unor aplicatii cum ar fi prelucrarea statelor de plata, în care toate datele si deciziile de
prelucrare sunt stabilite de la început, dar nu si atunci când utilizatorul trebuie sa interactioneze cu
programul în timpul executiei acestuia, ca de exemplu în cazurile sistemelor de rezervari, unde efectuarea
rezervarilor si anularilor trebuie raportata în momentul producerii, sistemelor de prelucrare a textelor, în
care crearea documentelor este realizata în mod dinamic, prin scriere si modificare, jocurilor de
calculator, în care interactiunea cu calculatorul reprezinta principala caracteristica a jocului.
Pentru a raspunde acestor cerinte, au fost dezvoltate noi sisteme de operare, care permit
prelucrarea interactiva (interactive processing) – ilustrata în figura 1.2. Aceste sisteme permit
executarea unui program care poarta un dialog cu utilizatorul prin intermediul termin alelor de control la
distanta sau al statiilor de lucru. Sistemele interactive au dat nastere conceptului de prelucrare în timp
real (real – time processing), care prin definitie impune ca activitatile ce se desfasoara într-un calculator
sa fie corelate cu activitatile din mediul calculatorului. Nemaifiind multumiti sa astepte pâna a doua zi
rezultatele muncii lor, utilizatorii doreau sa obtina un raspuns rapid comunicând cu calculatorul prin
intermediul unei statii de lucru aflata la distanta.
Programe, date si directive de
executie si rezultate
Domeniul
utilizatorului
Domeniul Executia
calculatorului programului
Sisteme multiprocesor
În ultimii ani, nevoia de a partaja informatiile si resursele între diferite calculatoare a condus la
ideea conectarii calculatoarelor pentru a putea schimba informatii. Pentru a raspunde acestei cerinte,
sistemele de calculatoare conectate, denumite retele de calculatoare (network), au devenit din ce în ce
mai raspândite. Într-adevar, principiul calculatorului central de mare putere care deserveste mai multi
utilizatori a cedat treptat locul conceptului de structura de mai multe calculatoare mici care sunt conectate
într-o retea prin care utilizatorii partajeaza resursele (cum ar fi imprimantele, pachetele software,
capacitatile de stocare a datelor si informatiilor) distribuite în întregul sistem. Un foarte important
exemplu este reteaua Internet, o retea de retele care conecteaza astazi milioane si milioane de
calculatoare din toata lumea.
Multe dintre problemele de coordonare care survin la proiectarea retelelor de calculatoare sunt
aceleasi – sau foarte asemanatoare – cu cele aparute deja la sistemele de operare. De fapt, software-ul
pentru controlul unei retele de calculatoare poate fi privit ca un sistem de operare în retea. Astfel,
dezvoltarea software-ului de retea reprezinta o extensie naturala a domeniului sistemelor de operare. În
timp ce primele retele au fost construite ca individuale cuplate slab, fiecare dintre ele fiind sub controlul
propriului sistem de operare, cercetarea în domeniul retelelor se muta spre sistemele distribuite, în care
resursele dintr-o retea sunt partajate în mod egal între activitatile existente în retea, iar procesoarelor din
retea li se aloca sarcini în functie de necesitatile retelei si nu de pozitia lor spatiala în cadrul acesteia. Un
exemplu este sistemul serverelor de nume utilizat în Internet. Acest sistem permite mai multor
calculatoare diferite, raspândite în întreaga lume, sa coopereze pentru a transforma o adresa Internet din
forma în care este specificata de utilizator (inteligibila pentru oameni si mai usor de memorat) în forma
numerica potrivita retelei.
Retelele de calculatoare reprezinta doar un exemplu de arhitecturi multiprocesor care au condus la
dezvoltarea sistemelor de operare actuale. În timp ce o retea realizeaza un sistem multiprocesor prin
combinarea calculatoarelor, fiecare dintre acestea continând eventual un singur procesor, alte sisteme
multiprocesor sunt proiectate ca sisteme individuale cu mai mute procesoare. Un sistem de operare pentru
un asemenea calculator trebuie nu numai sa coordoneze competitia dintre diferitele activitati executate
simultan, ci si sa controleze alocarea activitatilor catre procesoarele din sistem. Acest proces implica
probleme de echilibrare a încarcarii (load balancing – asigurarea utilizarii eficiente a tuturor
3
procesoarelor) precum si de scalare (scaling – spargerea activitatilor într-un numar de operatii
corespunzator numarului de procesoare din sistem).
Pentru a întelege arhitectura unui sistem de operare tipic, este util sa cunoastem spectrul complet
al software-ului care exista într-un sistem de calcul uzual. Vom începe printr-o prezentare globala, în care
vom grupa componentele software conform unei scheme de clasificare. Asemenea clasificari plaseaza
invariabil unitati software similare în clase diferite, la fel cum fusul orar face ca localitati apropiate sa
utilizeze ore diferite, desi nu exista vreo diferenta sesizabila între momentele de producere a rasaritului
sau apusului. Mai mult chiar, în cazul clasificarii software-ului, dinamica evolutiei subiectului si lipsa
unei autoritati general acceptate conduce la terminologii si clasificari contradictorii. De aceea, urmatoarea
clasificare (figura 3) trebuie privita mai degraba ca o încercare de a oferi un punct de sprijin în descrierea
unui subiect complex, decât ca o clasificare general acceptata.
Software
Aplicatie Sistem
Interfata Nucleu
Generalitati
Sa împartim pentru început software-ul dintr-un calculator în doua categorii: software de
aplicatii (application software) si software de sistem (system software). Software-ul de aplicatii
contine programele care efectueaza anumite activitati particulare pentru care este utilizat calculatorul
respectiv. Un calculator destinat tinerii inventarului unei companii de constructii de masini va contine
aplicatii software diferite de cele aflate pe calculatorul unui scriitor. Exemplele de aplicatii software sunt
reprezentate de programele de calcul tabelar, sistemele de baze de date, sistemele de tehnoredactare
computerizata, pachetele de dezvoltare de programe si jocurile.
Spre deosebire de software-ul de aplicatii, software-ul de sistem efectueaza acele activitati care
sunt comune sistemelor de calcul în general. Într-un anumit sens, software-ul de sistem furnizeaza mediul
în care lucreaza software-ul aplicativ, în acelasi mod în care infrastructura nationala constituie o baza pe
care fiecare cetatean îsi dezvolta propriul stil de viata.
Clasa software-ului de sistem se împarte în doua categorii: sistemul de operare propriu -zis si
modulele software cunoscute sub numele de software utilitar. Cea mai mare parte din utilitarele instalate
reprezinta programe care desfasoara activitati ce sunt esentiale pentru functionarea calculatorului, dar nu
sunt înca incluse în sistemul de operare. Într-un anume sens, software-ul utilitar consta din unitati
software care extind caracteristicile sistemului de operare. De exemplu, abilitatea de formatare a unui disc
sau de copiere a unui fisier nu este întotdeauna implementata în cadrul sistemului de operare, dar este
realizabila prin intermediului unui program utilitar. Alte exemple de utilitare sunt software-ul pentru
comunicatie prin modem pe linia telefonica, software-ul de afisare a datei si orei pe ecranul
calculatorului, precum si o data cu cresterea numarului de instalari, software-ul pentru administrarea
activitatilor dintr-o retea de calculatoare.
Diferenta dintre software-ul de aplicatii si cel utilitar este adesea foarte mica. Multi utilizatori de
calculatoare includ în clasa de software utilitar orice software livrat odata cu sistemul de operare, la
cumpararea acestuia. Ca atare uneori sunt incluse în categoria utilitarelor si sistemele de dezvoltare a
programelor, deoarece adese astfel de pachete de programe au fost livrate la achizitia unui sistem de
operare. Diferenta dintre software-ul utilitar si sistemul de operare este la fel de vaga. Unele sisteme
4
furnizeaza astfel de servicii elementare, cum ar fi afisarea listei fisierelor de pe un sistem de stocare de
masa, ca utilitar; altele includ aceste servicii în sistemul de operare.
Este usor de observat ca prin implementarea anumitor activitati ca software utilitar, un sistem de
operare se simplifica, nemaifiind obligat sa includa toate caracteristicile de baza necesare unui sistem de
calcul. Mai mult chiar, rutinele implementate ca software utilitar pot fi adaptate cu mai multa usurinta
cerintelor unei instalari particulare. Într-adevar, nu este ceva neobisnuit sa întâlnim companii sau
persoane care au modificat, respectiv au completat, software-ul utilitar furnizat initial odata cu sistemul
de operare al calculatorului lor.
Interfata
Partea dintr-un sistem de operare care defineste modul de interactiune dintre sistemul de operare
si utilizatorii sai poarta numele de interfata (shell). Sarcina interfetei este aceea de a permite
comunicarea cu utilizatorul (sau utilizatorii) calculatorului. Interfetele moderne realizeaza acest lucru prin
intermediul unei interfete grafice cu utilizatorul (Graphical User Interface - GUI), în care obiectele
care trebuie manipulate, cum ar fi fisierele si programele, sunt reprezentate grafic pe ecranul
calculatorului prin pictograme (icons). Astfel de sisteme permit utilizatorului sa execute comenzi prin
selectarea si deplasarea pictogramelor pe ecran cu un dispozitiv manevrat cu mâna si denumit mouse.
Vechile interfete comunicau cu utilizatorul mesaje de tip text, folosind în acest scop tastatura si ecranul.
Cu toate ca interfata unui sistem de operare joaca un rol important în stabilirea functionalitatii
unui calculator, ea nu reprezinta altceva decât legatura între utilizator si „inima" sistemului de operare (a
se vedea figura 1.4). Diferenta dintre interfata si partile interne ale sistemului de operare este scoasa în
evidenta de faptul ca anumite sisteme de operare permit unui utilizator sa selecteze dintre mai multe
interfete pe cea care îi convine mai mult. De exemplu, utilizatorii sistemului de operare UNIX pot alege
dintre mai multe variante, cum ar fi interfata Borne, interfata C sau interfata Korn. Primele versiuni de
Windows de la Microsoft Corporation constituiau de fapt interfete alternative pentru sistemul de operare
MS-DOS. În aceste cazuri sistemul de operare ramâne neschimbat, modificându-se numai modul sau de
comunicare cu utilizatorii calculatorului.
5
În zilele noastre avantajele interfetelor standardizate sunt bine cunoscute si urmarite în orice
proiectare de software. De exemplu, comunicarea cu sistemele de calcul tabelar sau procesoarele de texte
furnizate de diverse firme are caracteristici similare, simplificând migrarea utilizatorului de la un produs
la altul. Dar, standardizarea a condus si la aparitia unui mare numar de probleme de legalitate, printre care
si problema proprietatii asupra unei interfete. Atunci când interfata realizata de o firma devine populara,
este avantajos pentru concurenta sa-si realizeze sistemele astfel încât sa arate similar cu cel deja bine
cunoscut. Aceasta asemanare face ca trecerea utilizatorilor sistemului mai bine cunoscut la sistemul
concurentei sa se faca mai usor, chiar daca structura interna a celor doua sisteme este foarte diferita.
Desigur, firma care a proiectat sistemul original pretinde dreptul de proprietate asupra „aspectului si
comportarii” („look and feel”) sistemului sau, la fel cum pretinde si dreptul de proprietate asupra
structurii sistemului. Solutiile date de catre justitie în procesele legate de „aspect si comportare” nu permit
deocamdata stabilirea unei reguli generale.
Nucleul
Partea din interiorul unui sistem de operare este adesea denumita nucleu (kernel). Nucleul unui
sistem de operare contine acele componente software care efectueaza operatiile primare, necesare pentru
functionarea calculatorului. Un astfel de modul este administratorul de fisiere (file manager), care are
sarcina sa coordoneze utilizarea facilitatilor oferite de memoria de masa a calculatorului. Administratorul
de fisiere stocheaza înregistrari referitoare la toate fisierele memorate pe suportul de stocare de masa, mai
precis informatii referitoare la pozitiile fisierelor, utilizatorii cu drept de acces la ele si ce portiune din
memoria de masa este disponibila pentru stocarea de noi fisiere sau extinderea celor existente.
Pentru simplificarea utilizarii calculatorului, multe sisteme de administrare a fisierelor permit
gruparea lor în unitati denumite directoare (directory) sau dosare (folder). Acest lucru permite
utilizatorului sa-si organizeze fisierele conform scopului în care sunt folosite, plasând fisierele referitoare
la acelasi lucru în acelasi director. Mai mult chiar, permitându-se ca directoarele sa contina alte
directoare, denumite subdirectoare, se poate realiza o organizare ierarhizata a informatiilor. De exemplu,
un utilizator poate crea un director denumit Inregistrari care sa contina subdirectoarele cu numele
InregistrariFinanciare, InregistrariMedicale si InregistrariFamiliale. Fiecare dintre aceste subdirectoare
poate contine fisiere care fac parte din respectiva categorie. Secventa de directoare care ind ica drumul
pâna la un anumit subdirector sau fisier se numeste cale (path).
Orice acces al unui modul software la un fisier se obtine prin intermediul administratorului de
fisiere. Procesul începe cu cererea ca administratorul de fisiere sa acorde accesul la fisier, prin intermediul
unei proceduri care se numeste deschiderea fisierului. Daca administratorul de fisiere accepta cererea de
acces, el furnizeaza informatiile necesare pentru gasirea si manipularea fisierului. Informatiile sunt
stocate într-o zona din memoria principala care poarta numele de descriptor de fisier (file descriptor), iar
operatiile individuale asupra unui fisier se fac prin referirea la informatiile aflate aici.
O alta componenta a nucleului consta dintr-o colectie de drivere de dispozitiv (device drivers )
— module software care comunica cu controlerele (sau uneori direct cu dispozitivele) pentru efectuarea
operatiilor de catre componentele periferice ale calculatorului. Fiecare driver de dispozitiv este proiectat
în mod individual pentru un anumit tip de controler sau dispozitiv (ca de exemplu o imprimanta, un disc,
o unitate de banda magnetica sau un monitor) si traduce cererile formulate în termeni generali într-o
secventa de instructiuni specifice controlerului sau dispozitivului atasat acelui driver. Astfel, celelalte
module software nu trebuie sa tina cont de detaliile constructive ale dispozitivelor atasate calculatorului.
Ele trebuie doar sa lanseze cereri de uz general driverelor de dispozitiv si sa le lase apoi pe acestea sa se
preocupe de detalii. De exemplu, un driver de dispozitiv pentru un disc poate converti o cerere generala
de scriere a unei portiuni de fisier pe disc în instructiuni care se refera la pistele si sectoarele discului
(utilizând informatiile din descriptorul de fisier) si transmite apoi aceste informatii controlerului respectiv.
Dupa aceea, controlerul va prelua responsabilitatea pozitionarii capetelor de citire/scriere si supervizarii
procesului de înregistrare. În schimb, un driver pentru imprimanta va traduce o cerere de tiparire a
aceleiasi portiuni de fisier la imprimanta în instructiuni referitoare la transferul fonturilor, caracterelor si
instructiunilor de control al imprimantei. De fapt, etapele necesare sunt diferite chiar si în cazul unor
imprimante diferite, acesta fiind motivul pentru care proprietarul unui calculator personal care cumpara o
imprimanta noua primeste adesea si un nou driver de imprimanta.
O alta componenta a nucleului unui sistem de operare este administratorul de memorie
(memory manager), însarcinat cu activitatea de coordonare a utilizare memoriei principale a
calculatorului. Astfel de sarcin i se reduc la minimum într-un mediu în care calculatorului i se cere sa
realizeze numai câte o activitate la un moment dat. În aceste situatii, programul care executa activitatea
6
curenta este plasat în memoria principala, rulat si apoi înlocuit cu programul care va efectua urmatoarea
operatie. Dar în mediile multiutilizator sau multitasking, în care calculatorului i se cere sa raspunda mai
multor solicitari în acelasi timp, sarcinile administratorului de memorie sunt complexe, în aceste cazuri
multe programe si blocuri de date trebuie stocate în memoria principala în mod concurent, fiecare fiind
plasat într-o zona de memorie proprie alocata lui de catre administratorul de memorie. Pe masura ce
diferitele activitati apar sau se încheie, administratorul de memorie trebuie sa gaseasca zone libere de
memorie pentru a satisface cererile de memorie si sa tina evidenta zonelor de memorie care au fost
eliberate.
Sarcina administratorului de memorie se complica si mai mult atunci când cantitatea totala de
memorie solicitata depaseste dimensiunea memoriei disponibile . În acest caz, administratorul de memorie
poate crea iluzia unui spatiu suplimentar de memorie rotind programele si datele între memoria principala
si disc. Aceasta memorie iluzorie este denumita memorie virtuala (virtual memory). Sa presupunem ca
este nevoie de o memorie principala cu dimensiunea de 64 de megaocteti, dar sunt disponibili numai 32.
Pentru a crea impresia unui spatiu de memorie mai mare, administratorul de memorie va împarti spatiul
cerut în unitati denumite pagini si va transfera continutul acestor pagini pe disc. Dimensiunea obisnuita
pentru o pagina de memorie nu depaseste patru kiloocteti. Pe masura ce alte pagini de memorie sunt
necesare în memoria principala, administratorul de memorie le va încarca în locul paginilor care nu mai
sunt necesare si astfel celelalte module software se vor executa ca si cum calculatorul ar avea o memorie
principala de 64 de megaocteti.
De asemenea, nucleul unui sistem de operare contine în plus secventiatorul (scheduler) si
executorul (dispatcher), care vor fi prezentate în subcapitolul urmator. Deocamdata vom preciza doar ca
într-un sistem cu partajarea timpului sec ventiatorul stabileste care actiuni trebuie luate în considerare
pentru a fi executate, iar executorul controleaza alocarea feliilor de timp pentru aceste activitati.
Pornirea calculatorului
Am vazut cum comunica sistemul de operare cu utilizatorii calculatorului si cum coopereaza
elementele componente ale sistemului de operare pentru coordonarea executiei activitatilor dintr-un
calculator, dar nu ne-am referit deloc la modul în care este lansat în executie sistemul de operare. Acest
lucru se realizeaza prin intermediul unei proceduri cunoscute sub numele de încarcarea sistemului de
operare (boot straping), denumita adesea pe scurt încarcare (booting), ce este executata de calculator de
fiecare data când este pornit. Primul pas în a întelege aceasta procedura este sa întelegem de ce este ea
necesara.
Unitatea centrala de prelucrare este realizata astfel încât registrul sau contor de program sa
înceapa întotdeauna de la o anumita adresa predeterminata, de fiecare data când unitatea centrala este
alimentata cu curent electric. Aici deci se asteapta unitatea centrala sa gaseasca programul pe care trebuie
sa-l execute. Pentru a se asigura existenta programului dorit, aceasta zona de memorie este construita
astfel încât continutul ei sa fie permanent. O astfel de memorie este cunoscuta sub numele de memorie
permanenta (read-only memory - ROM). Dupa înscrierea sirurilor de biti în memoria ROM printr-un
procedeu analog fotografierii circuitelor de pe un cip, acestia ramân stocati, indiferent daca sistemul de
calcul este pornit sau oprit.
În cazul calculatoarelor simple utilizate pentru controlul cuptoarelor cu microunde, al sistemelor
de aprindere ale automobilelor sau al receptoarelor stereofonice, este utila realizarea unei parti
semnificative de memorie ca memorie permanenta, deoarece aceste aparate nu trebuie sa fie flexibile.
Programele executate de asemenea dispozitive sunt la fiecare pornire aceleasi. Acest lucru nu mai este
adevarat în cazul calculatoarelor de uz general, asa ca nu este practic sa se construiasca mari parti din
memoria acestora ca memorie ROM. De fapt, cea mai mare parte din memoria unui calculator de uz
general este memorie volatila, continutul memoriei pierzându-se la oprirea calculatorului.
În scopul încarcarii sistemului de operare al unui calculator de uz general, portiunea de memorie
realizata sub forma de memorie ROM contine un program de mici dimensiuni, denumit bootstrap. La
pornirea calculatorului, acest program este executat în mod automat. El conduce procesorul de-a lungul
procesului de transfer al unui material din locatia predeterminata de pe suportul de stocare de masa în
memoria principala a calculatorului. În multe cazuri, obiectul transferului este reprezentat de sistemul de
operare. Dupa plasarea sistemului de operare în memoria principala, programul de bootstrap instruieste
unitatea centrala de prelucrare sa sara la zona de memorie care-l contine. Din acest punct, sistemul de
operare devine activ si preia controlul asupra activitatilor calculatorului.
7
Memoria principala
Program de
ROM Disc
încarcare
Sistem de
operare
Memorie volatila
(Pasul l) Calculatorul începe prin executarea programului de încarcare aflat deja în memorie.
Sistemul de operare se afla plasat pe dispozitivul de stocare de masa.
Memoria principala
Program de Disc
ROM
încarcare
Sistem de
Sistem de operare
operare
Memorie volatila
În acest subcapitol vom discuta despre modul în care sistemul de operare coordoneaza executia
software-ului de aplicatie si utilitar, precum si pe cea a propriilor sale module. Vom începe prin a
prezenta conceptul de proces.
Conceptul de proces
În cazul sistemelor de operare moderne, unul dintre cele mai importante concepte este deosebirea
dintre program si actiunea de executie a acestuia. Programul reprezinta un set static de directive, iar
executia lui este o activitate dinamica, ale carei proprietati se modifica în timp. Aceasta activitate poarta
numele de proces. Procesul este caracterizat de starea curenta a activitatii, denumita starea procesului.
Ea include pozitia curenta în programul care este executat (valoarea contorului de program), precum si
valori din alti registri ai unitatii centrale si din celulele de memorie asociate. Aproximând, putem spune ca
starea procesului reprezinta un instantaneu al calculatorului la un moment dat. La diferite momente din
timpul executiei unui program (la diferite momente dintr-un proces) vor fi obtinute diferite instantanee
(diferite stari ale procesului).
Pentru a face distinctia între program si procese, trebuie remarcat ca un singur program poate fi
asociat în acelasi timp mai multor procese. De exemplu, într-un sistem multiutilizator cu partajarea
timpului, doi utilizatori pot sa editeze simultan documente diferite. Ambele activitati pot utiliza acelasi
program, dar fiecare dintre ele va constitui un proces separat, având propriile seturi de date si propria
8
viteza de desfasurare. În aceasta situatie, sistemul de operare poate pastra în memorie numai o singura
copie a programului de editare, permitând fiecarui proces sa-l utilizeze în timpul feliei de timp alocate.
Într-un calculator cu partajarea timpului exista de obicei mai multe procese care concureaza
pentru feliile de timp. Între ele se numara atât executia programelor aplicative sau utilitare, cât si a unor
parti din sistemul de operare. Sarcina sistemului de operare este sa coordoneze aceste procese.
Coordonarea implica alocarea resurselor necesare fiecarui proces (dispozitive periferice, spatiu în
memoria principala, acces la date si acces la unitatea centrala de prelucrare), împiedicarea interfetei
proceselor independente si asigurarea faptului ca procesele care trebuie sa schimbe informatii între ele pot
s-o faca. Pentru aceasta comunicatie se foloseste numele de comunicatie între procese (interprocess
communication).
Administrarea proceselor
Operatiile asociate coordonarii proceselor sunt efectuate de catre secventiatorul (scheduler) si
executorul (dispatcher) din nucleul sistemului de operare. Astfel, secventiatorul memoreaza o înregistrare
a proceselor prezente în sistemul de calcul, introduce noile procese în aceasta lista si elimina procesele
care s-au terminat. Pentru a putea urmari toate procesele, secventiatorul înregistreaza un bloc de
informatii, denumit tabel de procese (process table), în memoria principala. Pentru fiecare noua
activitate, creeaza un proces dedicat acesteia, plasând un nou element în tabelul de procese. Aici sunt
memorate informatii cum ar fi zona de memorie alocata procesului (obtinuta de la administratorul de
memorie), prioritatea procesului s i daca procesul este gata sa continue sau este în asteptare. Un proces
este gata sa continue (ready) daca este într-o stare în care desfasurarea actiunii poate cont inua; este în
asteptare (waiting) daca desfasurarea sa este întârziata pâna la aparitia unor evenimente externe, ca de
exemplu terminarea unui acces la disc sau sosirea unui mesaj de la alt proces. Astfel, secventiatorul
memoreaza informatiile referitoare la modul în care se desfasoara procesele, în particular, un proces trece
adesea de la starea de gata la cea de asteptare si invers; prioritatea proceselor se modifica de-a lungul
timpului; si, desigur, secventiatorul trebuie sa elimine procesul din tabelul de procese atunci când acesta
se termina.
Executorul este o componenta a nucleului care asigura în fapt executia proceselor active,
programate de secventiator. Într-un sistem cu partajarea timpului, aceasta sarcina este dusa la îndeplinire
prin împartirea timpului în intervale scurte, fiecare purtând numele de felie de timp (time slice) sau
cuanta (quantum - având de obicei o durata de 50 de milisecunde); atentia unitatii centrale de prelucrare
este îndreptata catre fiecare proces în parte, fara ca executia acestuia sa poata de pasi o cuanta de timp
(figura 1.6). Procedura de trecere de la un proces la altul poarta numele de comutare între procese
(process switch).
Întrerupere Întrerupere Întrerupere Întrerupere Întrerupere
Comutare între Comutare între Comutare între Comutare între Comutare între
procese procese procese procese procese
Proces A Proces A
Axa timpului
Figura 1.6 Partajarea timpului între procesele A si B
De fiecare data când un proces îsi începe felia de timp, executorul initializeaza un circuit de
temporizare care va masura urmatoarea cuanta. La sfârsitul cuantei, circuitul de temporizare genereaza un
semnal care poarta numele de întrerupere. Unitatea centrala reactioneaza la acest semnal într-un mod
foarte asemanator celui în care reactionam atunci când suntem întrerupti în timpul desfasurarii unei
activitati: oprim activitatea, memoram unde anume ne aflam în operatia respectiva si acordam apoi atentia
cuvenita sursei întreruper ii. La primirea unui semnal de întrerupere, unitatea centrala de prelucrare
completeaza ciclul curent de extragere-decodificare-executie, salveaza pozitia din procesul curent (pas la
9
care vom reveni imediat) si începe executia unui program de tratare a întreruperilor (interrupt
handler), care este stocat la o locatie predeterminata din memoria principala.
În scenariul nostru de partajare a timpului, programul de tratare a întreruperilor este o
componenta a executorului. De aceea efectul semnalului de întrer upere este de suspendare a procesului
curent si de transfer al controlului catre executor. În acest punct, executorul permite secventiatorului sa
actualizeze tabelul de procese (de exemplu, prioritatea procesului care tocmai s-a executat în ultima
cuanta trebuie sa fie redusa, iar prioritatea altor procese ar putea sa creasca). Executorul selecteaza apoi
procesul care are cea mai mare prioritate dintre procesele gata sa continue din tabel, reporneste circuitul
de temporizare si permite procesului selectat sa-si înceapa felia de timp.
Abilitatea de oprire si de repornire ulterioara a unui proces este de o importanta vitala pentru
succesul unui sistem cu partajarea timpului. Daca sunteti întrerupti în timp ce cititi o carte, posibilitatea
de a relua mai târziu lectura depinde de abilitatea dumneavoastra de a va reaminti atât pagina la care va
aflati cât si informatiile pe care le -ati acumulat pâna atunci. Pe scurt, trebuie sa puteti recrea mediul care
exista chiar înainte de producerea întreruperii. În cazul un ui proces, un asemenea mediu este starea
procesului. Amintiti-va ca aceasta stare include valoarea contorului de program, precum si continutul
registrilor si al celulelor de memorie asociate. Calculatoarele proiectate pentru sisteme cu partajarea
timpului includ actiunea de salvare a acestor informatii ca parte a reactiei unitatii centrale de prelucrare la
semnalul de întrerupere. Ele dispun de obicei de instructiuni în limbaj masina pentru reîncarcarea unei
stari salvate anterior. Astfel de facilitati simplifica sarcina executorului la efectuarea comutarii între
procese s i constituie un exemplu referitor la modul în care arhitectura calculatoarelor moderne este
influentata de cerintele sistemelor de operare actuale.
Uneori, actiunea efectuata de un proces în cuanta alocata lui se termina înainte de expirarea
timpului alocat. De exemplu, daca un proces executa o cerere de intrare/iesire, cum ar fi o cerere de
furnizare a unor date de pe un disc, partea ramasa din felia de timp alocata acelui proces va fi iros ita cât
timp acesta asteapta ca cererea sa îi fie onorata de catre controler, în acest caz, secventiatorul va actualiza
tabelul de procese pentru a reflecta starea de asteptare a procesului, iar executorul va aloca o noua cuanta
unui proces care este gata de executie. Mai târziu (probabil dupa mai multe sute de milisecunde), atunci
când controlerul semnaleaza ca cererea de intrare/iesire a fost executata, secventiatorul va schimba starea
procesului în „gata” si astfel procesul va intra din nou în competitia pentru primirea unei cuante.
Modelul Client/Server
Diferitele module ale sistemului de operare, care într-un sistem cu partajarea timpului se executa
de obicei ca procese individuale, concureaza între ele sub controlul executorului pentru cuantele de timp.
Pentru a-si coordona activitatile, procesele trebuie sa comunice între ele. Pentru programarea unui nou
proces, secventiatorul trebuie sa obtina spatiu de memorie de la administratorul de memorie. Pentru a
dobândi accesul la un fisier aflat pe un dispozitiv de stocare de masa, orice proces trebuie sa capete mai
întâi informatiile necesare de la administratorul de fisiere.
Pentru simplificarea comunicatiei între procese, componentele unui sistem de operare sunt adesea
proiectate în conformitate cu modelul client/server (figura 1.7).
Cerere
Client Server
Figura 1.8 Structuri identice de comunicatie între clienti si servere, care opereaza pe acelasi calculator sau
sunt distribuite pe mai multe calculatoare
10
Acest model defineste cele doua roluri fundamentale pe care le pot juca diferitele componente:
client, care emite cereri catre alte unitati, respectiv server, care satisface cererile emise de clienti. De
exemplu, administratorul de fisiere va juca rolul unui server care furniz eaza accesul la fisiere dupa cum i
se cere de catre clientii sai. În cadrul acestui model, comunicatia între procesele dintr-un sistem de
operare consta din cereri adresate de procesele care joaca rolul de clienti si din raspunsuri de la procesele
care joaca rolul de servere.
Aplicarea modelului client/server în proiectarea software-ului conduce la uniformizarea tipurilor
de comunicatii care au loc în sistem. Acesta este unul din principalele motive pentru care modelul a fost
adoptat pe scara larga la proiectarea sistemelor de operare. Atunci când componentele unui sistem de
operare sunt proiectate ca servere si clienti, comunicatia dintre ele are aceeasi forma indiferent daca
aceasta comunicatie se desfasoara între componente din cadrul aceluiasi calculator sau între componente
ale unor calculatoare aflate la mare distanta unele de altele (figura 1.8). Un client va trimite pur si simplu
cereri serverelor si va astepta raspunsurile; serverul va presta serviciile cerute si va trimite raspunsurile
înapoi client ilor, în consecinta, atâta timp cât o retea de calculatoare permite trimiterea de cereri si
raspunsuri între calculatoare, mai multi clienti si mai multe servere se pot distribui în orice configuratie
convenabila pentru reteaua respectiva.
Asa cum am vazut, componentele nucleului unui sistem de operare se ocupa în principal cu
alocarea resurselor calculatorului catre procesele ce se desfasoara în sistem, în cazul de fata atribuim
termenului resurse un sens larg, incluzând atât dispozitivele periferice ale calculatorului, cât si functiile
de care dispune calculatorul propriu-zis. Administratorul de fisiere aloca atât accesul la fisierele existente,
cât si spatiul pe disc pentru crearea de noi fisiere; administratorul memoriei aloca spatiu în memorie;
secventiatorul aloca spatiu în tabelul de procese; executorul aloca feliile de timp pentru executia
proceselor. Ca si alte activitati, sarcina de alocare a resurselor pare la o prima vedere destul de simpla.
Totusi, sub aceas ta aparenta simplitate se ascund multe probleme care tratate superficial pot duce la
functionarea defectuoasa a sistemului. Amintiti-va ca un calculator nu gândeste independent, ci doar
executa instructiuni. De aceea, pentru obtinerea unor sisteme de operare fiabile va trebui sa dezvoltam
algoritmi care sa acopere orice problema posibila, chiar daca pare lipsita de importanta.
Semafoare
Sa luam în discutie un calculator care are un sistem de operare cu partajarea timpului si la care
este conectata o singura imprimanta. Daca un proces este în situatia de a-si tipari rezultatele, el trebuie sa
solicite sistemului de operare acces la programul driver al imprimant ei. În acest moment, sistemul de
operare trebuie sa decida daca satisface aceasta cerere, verificând daca imprimanta nu este cumva utilizata
de alt proces. Daca imprimanta este libera, sistemul de operare trebuie sa acorde permisiunea utilizarii ei
si sa permita procesului sa continue; altfel, trebuie sa respinga cererea s i probabil sa clasifice procesul ca
proces în asteptare, pâna în momentul în car e imprimanta devine disponibila. Într-adevar, daca doua
procese ar capata simultan acces la imprimanta atasata calculatorului, rezultatul n-ar prezenta nici o
utilitate pentru nici unul din ele.
Acordarea accesului la imprimanta reclama ca sistemul de operare sa urmareasca daca
imprimanta a fost sau nu alocata vreunui proces. O solutie ar constitui-o utilizarea unui indicator (flag) -
un bit în memorie ale carui stari sunt setat (1) si sters (0). Un indicator sters arata ca imprimanta este
libera, iar un indicator setat indici faptul ca imprimanta este deja alocata, în aparenta, aceasta solutie pare
foarte buna. Sistemul de operare sterge indicatorul la pornire, apoi îi verifica starea de fiecare data când
apare o cerere de acces la imprimanta. Daca indicatorul are valoarea zero, se acorda accesul si sistemul de
operare seteaza indicatorul. Daca indicatorul are valoarea 1, sistemul de operare trece procesul solicitant
în asteptare. De fiecare data când un proces termina de utilizat imprimanta, sistemul de operare aloca
imprimanta unui proces aflat în asteptare sau, daca nu exista procese în asteptare, sterge indicatorul.
Desi aceasta solutie pare buna la prima vedere, exista totusi o problema. Operatia de testar e si
eventual de setare a indicatorului necesita mai multi pasi masina. Nu ar fi exclus ca operatia sa fie
întrerupta dupa detectarea unui indicator nul, dar înainte ca indicatorul sa fie setat, ceea ce face posibila
aparitia urmatoarei situatii.
Presupunem ca imprimanta este disponibila si un proces cere s-o utilizeze. Indicatorul care
corespunde imprimantei este verificat si gasit ca fiind sters, ceea ce indica faptul ca imprimanta este
disponibila. Dar în acest moment procesul este întrerupt si alt proces îsi începe felia de timp. De
11
asemenea, si acest proces doreste sa utilizeze imprimanta. Indicatorul este verificat din nou si gasit tot
sters, deoarece procesul precedent a fost întrerupt înainte de a-l putea seta. În consecinta, sistemul de
operare perm ite celui de-al doilea proces sa înceapa utilizarea imprimantei. Ulterior, primul proces revine
în executie în locul în care se afla când a fost întrerupt, adica imediat dupa ce sistemul de operare gasise
nul indicatorul imprimantei. Asa ca sistemul de operare continua prin a acorda si primului proces dreptul
de utilizare a imprimantei. Se ajunge deci la o situatie în care doua procese utilizeaza simultan aceeasi
imprimanta.
În cazul descris, problema este aceea ca operatia de testare si eventual de setare a indicatorului
trebuie sa fie terminata fara a fi întrerupta. O solutie pentru a face acest lucru o constituie utilizarea
instructiunilor de invalidare si validare a întreruperilor, disponibile în multe dintre limbajele masina. Daca
sistemul de operare începe rutina de testare a indicatorului cu o instructiune de invalidare a întreruperilor
si o termina cu o instructiune de validare, nici o alta activitate nu poate întrerupe aceasta rutina, odata
pornita.
O alta solutie o reprezinta utilizarea instructiunii de testare-si-setare (test-and-set), care este de
asemenea disponibila în multe dintre limbajele masina. Unitatii centrale de prelucrare i se cere sa citeasca
valoarea unui indicator, sa o memoreze si apoi sa seteze indicatorul, toate acestea printr-o singura
instructiune masina. Avantajul acestei metode este ca de vreme ce unitatea centrala termina întotdeauna
de executat o instructiune înainte de a sesiza o întrerupere, operatia de testare si setare a indicatorului,
implementata ca o singura instructiune, nu poate fi întrerupta.
Un indicator implementat corect, asa cum am aratat mai sus, poarta numele de semafor
(semaphore), prin analogie cu dispozitivele folosite la caile ferate pentru controlul accesului în diferite
portiuni ale liniilor, într-adevar, utilizarea semafoarelor în cadrul sistemelor informatice este foarte
asemanatoare cu întrebuintarea lor în sistemele de transport pe calea ferata. O secventa de instructiuni
care trebuie executate fara întreruperi corespunde unei portiuni de cale ferata pe care poate trece la un
moment dat un singur tren. O asemenea secventa de instructiuni poarta numele de zona critica (critical
region). Înainte de a intra într-o zona critica, un proces trebuie sa gaseasca nul semaforul asociat ei si sa-l
seteze; apoi trebuie sa stearga semaforul dupa iesirea din zona critica.
Interblocarea
O alta problema care poate aparea în timpul alocarii resurselor este interblocarea (deadlock) -
situatia în care desfasurarea a doua sau mai multe procese este blocata deoarece fiecare dintre ele asteapta
acces la resurse alocate celuilalt. De exemplu, un proces poate sa aiba acces la imprimanta atasata
calculatorului, dar sa astepte dobândirea accesului la unitatea de banda magnetica, în timp ce alt proces
are acces la unitatea de banda magnetica, dar asteapta dobândirea accesului la imprimanta. Un alt
exemplu apare în situatia în care procesele creeaza noi procese pentru efectuarea unor operatii mai
simple. Daca secventiatorul nu are destul spatiu în tabelul de procese si fiecare proces din sistem trebuie
sa creeze un proces suplimentar înainte de a-si termina treaba, atunci nici un proces nu va putea continua.
Asemenea situatii, precum si altele pot reduce drastic performantele unui sistem.
Poate sa apara o interblocare numai daca sunt satisfacute simultan urmatoarele trei conditii:
1. Exista o competitie pentru resurse care nu pot fi partajate.
2. Resursele sunt solicitate în mod partial, ceea ce înseamna ca dispunând de anumite resurse, un
proces va reveni ulterior solicitând mai multe.
3. O data ce o resursa a fost alocata, nu se poate forta eliberarea sa.
Concluzia care rezulta este ca eliminarea interblocarii se poate face prin eliminare uneia dintre
cele trei conditii de mai sus. În gener al, tehnicile care se ocupa de a treia conditie sunt grupate într-o
categorie cunoscuta sub numele de scheme de detectie si corectie a interblocarilor. Ele pornesc de la
ipoteza ca ocurenta unei interblocari este atât de improbabila încât nu merita sa se faca nici un efort
pentru evitarea acestei situatii. Solutia o reprezinta detectarea interblocarii atunci când apare si apoi
corectarea problemei prin eliberarea fortata a unora dintre resursele alocate. Cazul unui tabel de procese
plin, de exemplu, face parte din aceasta clasa. De obicei, administrator de sistem va crea un tabel de
procese suficient de mare pentru instalare particulara. Daca totusi survine o interblocare datorita umplerii
tabelului, administratorul îsi va utiliza drepturile sale de „super utilizator” pentru a elimina (termenul
tehnic este kill) unele dintre procese, eliberând astfel spatiu în tabelul de procese, pentru ca procesele
ramase sa-si poata continua activitatile.
Tehnicile care se ocupa de primele doua conditii sunt denumite în general scheme de evitare a
interblocarii. De exemplu, o astfel de tehnica se poate ocupa de a doua conditie, cerând fiecarui proces sa
solicite resursele de care are nevoie nu rând pe rând, ci toate o data. O alta tehnica, mai imaginativa, se
12
ocupa de prima conditie, si anume nu prin eliminarea directa a competitiei, ci prin transformarea
resurselor nepartajabile în resurse partajabile. De exemplu, sa presupunem ca resursa în discutie este o
imprimanta si mai multe procese doresc s-o utilizeze. De fiecare data când un proces cere sa utilizeze
imprimanta, sistemul de operare îi satisface cererea, însa în loc sa-l conecteze la imprimanta, sistemul de
operare îl conecteaza la un driver care stocheaza pe disc informatiile ce trebuie tiparite, fara s-o trimita la
imprimanta. Astfel, fiecare proces, crezând ca are acces la imprimanta, se executa în mod normal. Mai
târziu, când imprimanta este libera, sistemul de operare poate transfera datele de pe disc la imprimanta, în
acest mod sistemul de operare a facut ca resursa nepartajabila sa apara ca partajabila, creând iluzia
existentei mai multor imprimante. Tehnica de memorare a datelor si de trimitere a lor la iesire într-un
moment ulterior, mai convenabil, poarta numele de spooling si este o tehnica destul de raspândit a în
cadrul sistemelor de operare.
Desigur, atunci când procesele intra în competitie pentru resursele unui calculator pot surveni si
alte probleme. De exemplu, un administrator de fisiere permite de regula mai multor procese accesul la
acelasi fisier pentru a citi date din el, dar pot sa apara conflicte daca mai multe procese încearca simultan
sa modifice fisierul. De aceea, un administrator de fisiere poate aloca accesul la fisiere în conformitate cu
cerintele proceselor, permitând mai multor procese accesul simultan pentru citire, dar numai unui singur
proces dreptul de scriere la un moment dat. Alte sisteme pot sparge fisierul în mai multe parti, astfel încât
diverse procese sa poata altera simultan diferite parti ale fisierului. Totusi, ramân înca de rezolvat alte
probleme. De exemplu, cum ar trebui avertizate acele procese care cer acces la un fisier numai pentru a
citi date ca un proces care are dreptul de scriere modifica fisierul?
La început, o retea tipica era compusa din calculatoare izolate care nu puteau face mare lucru în
plus fata de transferul fisierelor pe linii telefonice utilizând programe integrate în sistemele de operare sub
forma de software utilitar. Astazi, o mare parte dintre functiile de administrare a retelei sunt înca
implementate sub forma de software utilitar, cu toate ca sistemele de operare moderne, proiectate special
în eventualitatea lucrului cu retelele de calculatoare, încep sa înglobeze multe dintre aceste caracteristici.
De exemplu, implementarea software a suitei de protocoale TCP/IP (pe care o vom prezenta mai târziu în
acest capitol) este furnizata astazi ca parte componenta a sistemului de operare UNIX. În acest subcapitol
si în urmatorul vom prezenta unele dintre subiectele asociate acestui domeniu al sistemelor de operare,
domeniu aflat în plina dezvoltare.
Clasificarea retelelor
Fiecare retea de calculatoare se încadreaza într-una din urmatoarele categorii: retele locale de
calculatoare (Local Area Networks - LAN) si retele de arie larga (Area Networks - WAN). O retea
locala consta de obicei dintr-un grup de calculat plasate într-o singura cladire sau într-un complex de
cladiri. De exemplu, calculatoarele utilizate într-un campus universitar sau într-o fabrica pot fi conectate
într-o retea locala. O retea WAN cuprinde calculatoare care se pot afla în diverse colturi ale unui oras sau
ale lumii. Diferenta principala dintre retelele locale si cele de arie larga tine de tehnologiile utilizate
pentru stabilirea cailor de comunicatie. (De exemplu, legaturile prin satelit sunt adecvate pentru retele
WAN, dar nu si pentru retele LAN). În prezent, programele care trateaza aceste diferente sunt izolate de
regula într-o mica parte a pachetului software global de retea, asa ca din punct de vedere softwar e
deosebirile dintre retelele locale si cele de arie larga devin din ce în ce mai nesemnificative.
Alt criteriu de clasificare a retelelor de calculatoare este alcatuirea retelei din hardware si
software produs de un furnizor unic sau implementarea ei ca un conglomerat de produse de la diversi
fabricanti. Retelele din primul tip sunt denumite uneori retele închise (sau retele brevetate), iar cele din al
doilea tip sunt cunoscute sub numele de retele deschise. (De fapt, termenul deschis se refera la faptul ca
specificatiile pentru componentele retelei sunt deschise pentru public, ceea ce conduce la compatibilitatea
dintre produse ale diferitilor furnizori, implicându-se astfel faptul ca reteaua consta din dispozitive si
programe din surse aflate în competitie). Retelele închise sunt o prezenta mult mai obisnuita în cadrul
retelelor locale, deoarece în acest caz întreaga retea este utilizata de regula de catre o singura organizatie,
în schimb, retelele de arie larga tind sa fie retele deschise, deoarece includ adesea organizatii diferite,
fiecare dintre ele având propriul sau echipament. Reteaua Internet este un sistem deschis. Într-adevar
13
comunicatia prin Internet este realizata prin intermediul unui ansamblu deschis de standarde, cunoscut
sub numele de suita de protocoale TCP/IP1, despre care vom discuta în subcapitolul urmator.
O alta metoda de clasificare a retelelor de calculatoare se bazeaza pe topologie, adica pe modul în
care sunt conectate calculatoarele. Figura 10 reprezinta câteva dintre topologiile uzuale: inel (ring), în
care calculatoarele sunt conectate circular; magistrala (bus), în care calculatoarele sunt conectate printr-o
linie de comunicatie comuna, denumita magistrala; stea, în care o masina serveste drept conector (hub) la
care sunt cuplate toate celelalte calculatoare; si topologie neregulata, în care calculatoarele sunt conectate
într-un mod aparent aleator. Topologia neregulata este frecventa în cazul retelelor de arie larga, în timp ce
topologiile de tip inel si magistrala se întâlnesc de obicei în mediile locale, în care realizarea retelelor
cade de obicei sub o autoritate unica.
Reteaua Internet
Reteaua Internet este o retea de retele care s-a dezvoltat de-a lungul timpului, începuturile sale se
leaga de un program de cercetare initiat în anul 1973 de catre Defense Advanced Research Projects
Agency (DARPA). Scopul acestui program îl constituia dezvoltarea abilitatii de conectare a diferitelor
retele de calculatoare astfel încât ele sa poata functiona ca o singura retea. În prezent, Internet reprezinta o
combinatie de retele WAN si retele LAN continând o magistrala alcatuita din cai de comunicatie de mare
viteza între diversele zone ale Statelor Unite ale Americii. Pentru conectarea la aceasta magistrala a altor
retele, grupate de obicei pe o arie mult mai restrânsa, se utilizeaza calculatoare special proiectate,
denumite routere (routers). La rândul lor, aceste retele sunt conectate prin intermediul altor routere cu
alte retele. În acest mod s-a dezvoltat o retea ce contine milioane de calculatoare, fiecare dintre ele
purtând numele de gazda (host), raspândite în lumea întreaga; reteaua continua sa se dezvolte, noi
calculatoare adaugându-i-se în fiecare zi.
Adresarea în Internet
Din punct de vedere conceptual, Internet poate fi considerat o colectie de grupuri de retele,
cunoscute sub numele de domenii (figura 1.10), fiecare dintre aceste domenii constând din acele retele
1
Acest fir comun stabileste domeniul retelei Internet. Cu toate acestea, definitia este contrazisa de faptul ca
organizatii care detin retele brevetate sunt conectate prin intermediul retelei Internet cu ajutorul unor calculatoare ce
poarta numele de porti (gateway), care fac conversia între protocolul TCP/TP si cele utilizate de reteaua brevetata
respectiva. Astfel, termenul de Internet este folosit uneori cu referire la un sistem mai larg decât cel specificat prin
definitia de mai sus.
14
care sunt utilizate de catre o singura organizatie, cum ar fi o universitate, o firma sau o institutie
guvernamentala. Fiecare domeniu este un sistem autonom, care poate fi configurat asa cum doreste
autoritatea locala, uneori chiar ca un ansamblu global de retele WAN.
Adresa unui calculator (gazda) din Internet consta dintr-un sir de biti (având în mod curent o
lungime de 32 de biti) ce contine doua parti - o parte care precizeaza domeniul în care este inclus
calculatorul gazda si o parte care identifica adresa gazdei în cadrul domeniului. Partea din adresa care
defineste domeniul, identificatorul de retea (network identifier), este atribuita de catre InterNIC
(Internet Network Information Center) la crearea domeniului si este înregistrata. Acest proces de
înregistrare asigura faptul ca fiecare domeniu din Internet are un identificator unic de retea. Partea din
adresa care defineste un calculator gazda individual din cadrul unui domeniu, adresa gazdei (host
address), este atribuita de catre autoritatea locala. De exemplu, identificatorul de retea alocat editurii
Addison Wesley Longman, Inc. este 192.207.177 (identificatorii de retea sunt scrisi în mod uzual în
notatie zecimala cu punct). La rândul lui, un calculator din cadrul acestui domeniu va avea o adresa de
tipul 192.207.177.133, ultimul octet al adresei reprezentând adresa calculatorului gazda.
Oamenii lucreaza însa mai greu cu adrese sub forma unui sir de biti. Din aceasta cauza, InterNIC
a alocat în plus fiecarui domeniu o adresa simbolica unica - numele domeniului (domain name). Fiecare
autoritate locala este apoi libera sa extinda numele domeniului pentru a obtine nume semnificative pentru
calculatoarele gazda din domeniul respectiv. De exemplu, numele domeniului editurii Addison Wesley
Longman, Inc. este aw. com, iar un calculator gazda din cadrul acestui domeniu ar putea fi identificat sub
numele mozart. aw. com .
Notatia cu puncte utilizata în adresele simbolice nu are legatura cu notatia cu puncte utilizata la
reprezentarea adresei sub forma unui sir de biti. Partile componente ale adresei simbolice precizeaza
localizarea calculatorului gazda într-un sistem ierarhizat. În particular, adresa mozart. aw. com specifica
un calculator gazda cunoscut sub numele de mozart , aflat în interiorul institutiei aw din categoria
institutiilor comerciale com. În cazul unor domenii foarte mari, autoritatea locala poate decide spargerea
lor în subdomenii, în acest caz adr esa simbolica a calculatoarelor gazda devenind mai lunga. De exemplu,
sa presupunem ca Nowhere University are alocat numele de domeniu nu. edu si decide sa-si împarta
domeniul în subdomenii. Atunci, un calculator gazda de aici ar putea avea o adresa de forma laststop.
compsc. nu. edu cu semnificatia ca gazda laststop este inclusa în subdomeniul compsc din cadrul
institutiei nu, care face parte din clasa domeniilor educationale edu.
În scopul transmiterii de mesaje între utilizatorii individuali ai retelei Internet (un sistem cunoscut
sub numele de e-mail, prescurtarea pentru posta electronica - în engleza, electronic mail), fiecare
autoritate locala poate atribui o adresa de e-mail fiecarui utilizator autorizat din cadrul domeniului sau.
Aceasta adresa consta dintr-un sir de caractere ce identifica utilizatorul, urmat de caracterul @ si apoi de
numele de domeniu alocat calculatorului care are sarcina de gestionare a activitatilor de posti electronica
15
din cadrul domeniului. Astfel, adresa de e-mail a unui utilizator individul care lucreaza la editura Addison
Wesley Longman, Inc. ar putea arata astfd wshakespeare@mozart.aw.com . Cu alte cuv inte, calculatorul
gazda cu numit mozart din cadrul domeniului aw.com administreaza posta electronica a utilizatorului
wshakespeare.
Autoritatea locala a fiecarui domeniu este raspunzatoare de pastrarea unui director care sa contina
adresele simbolice s i adresele numerice Internet corespondente ale acelor calculatoare gazda care trebuie
sa fie accesibile din exteriorul domeniulu i. Acest director este implementat pe un calculator dedicat din
cadrul domeniului, denumit server de nume (name server), care raspunde cererilor referitoare la
informatii despre adrese. Împreuna, toate serverele de nume din cadrul retelei Internet constituie un
sistem, distribuit de directoare, utilizat pentru convertirea adreselor din forma simbolica în formele
numerice echivalente. În particular, atunci când un utilizator solicita transmiterea unui mesaj la o anumita
destinatie specificat în forma simbolica, este folosit sistemul de servere de nume pentru a converti adres a
simbolica în sirul de biti echivalent compatibil cu software-ul Internet. Aceasta operatie se efectueaza în
mod normal într-o fractiune de secunda.
Atunci când o organizatie decide sa se conecteze la Internet, ea poate fie devina o parte a unui
domeniu existent, fie sa gaseasca un loc în Internet în care poata plasa un router si sa-si stabileasca
propriul domeniu. Avantajul crearii unui n domeniu este acela ca organizatia are autoritate locala asupra
caracteristicilor domeniului, în loc sa fie supusa autoritatii unei alte organizatii. La crearea unui domeniu
nou, organizatia trebuie sa se înregistreze la InterNIC pentru a obtine un identificator si un nume de
domeniu.
Un individ obtine de obicei acces la Internet devenind membru al unei organizatii care
controleaza un domeniu. Multe firme ofera persoanelor private acces la Internet pe baze comerciale.
Aceste firme, care de obicei dispun de propriul domeniu în Internet, furnizeaza pe calculatoarele lor
programe care permit clientilor sa se conecteze utilizând liniile telefonice. Prin intermediul unei asemenea
conexiuni, un client poate accede la serviciile Internet la care a subscris.
16
Crearea de documente hipertext necesit a o metoda de stabilire a legaturilor între documente. În
acest scop, fiecare document este identificat printr-o adresa unica, denumita adresa URL (uniform
resource locator) , prin intermediul careia un browser sa poata contacta serverul potrivit si sa solicite apoi
documentul dorit. În figura 12 este descrisa o adresa URL tipica, în cazul multora dintre calculatoarele
gazda din Internet, un anumit document este desemnat ca document implicit. Daca exista documentul
implicit poate fi apelat printr-o adresa UR L scurta, care contine numai protocolul si numele simbolic al
calculatorului gazda.
http://mozart.aw.com/authors/Shakespeare/Julius_Caesar.html
Numele documentului
Calea de directoare care precizeaza localizarea
documentului în cadrul sistemului de fisiere de pe
calculatorul gazda
Numele simbolic al calculatorului gazda care contine documentul
Un document hipertext este similar unui document clasic de tip text, prin faptul ca textul pe care-l
contine este codificat caracter cu caracter utilizându-se un sistem cum ar fi ASCII. Diferenta este aceea ca
documentul hipertext contine în plus si marcaje speciale, care - printre altele - permit autorului sa indice
care elemente din document sunt legate la alte documente si sa furnizeze adresele URL necesare pentru
efectuarea acestor legaturi. Acest sistem de marcaje este cunoscut sub numele de Limbaj de Marcare
Hipertext (Hypertext Markup Language - HTML). Utilizând elementele HTML, autorul unui
document hipertext descrie informatiile necesare unui browser pentru a-si duce sarcinile la bun sfârsit.
Probleme de securitate
Atunci când un calculator este conectat la o retea, el devine accesibil multor utilizatori potentiali.
Problemele care apar în acest caz se împart în doua categorii: accesul neautorizat la informatii si actele de
vandalism. Una dintre solutiile pentru rezolvarea problemei accesului neautorizat o reprezinta utilizarea
parolelor, fie pentru controlul accesului la calculatorul propriu-zis, fie pentru controlul accesului la
anumite date. Din pacate, parolele nu ramân întotdeauna secrete. Cea mai raspândita metoda de a le afla
este prin încercari. De exemplu, s-ar putea ca utilizatorii care se tem ca-si vor uita parola sa utilizeze ca
parola propriul nume sau date importante, precum cea de nastere; aceste parole sunt usor de depistat.
Într-o încercare de a se opune acestui joc de-a ghicitul parolei, sistemele de operare pot fi
proiectate astfel încât sa raporteze orice avalansa de parole incorecte sau sa comunice fiecarui utilizator la
începutul fiecarei noi sesiuni de lucru data si ora la care a fost folosit ultima data contul respectiv. Aceasta
metoda permite utilizatorilor sa detecteze orice întrebuintare neautorizata a conturilor lor. O metoda de
aparare mai sofisticata împotriva celor care încearca sa ghiceasca parolele este aceea de a se crea iluzia
succesului la introducerea parolelor false si de a se furniza intrusului informatii false, înregistrându-se
totodata originea acestuia.
O alta solutie pentru protectia datelor împotriva accesului neautorizat o reprezinta criptarea lor, în
ideea ca în acest fel chiar daca intrusul obtine datele, informatiile continute ramân inaccesibile, în acest
scop au fost dezvoltate si continua sa fie perfectionate diverse tehnici de criptare.
Problema vandalismului este ilustrata de aparitia unor afectiuni cum ar fi virusii calculatoarelor si
viermii de retea, termeni destinati mai degraba sa atraga interesul publicului decât sa identifice din punct
de vedere tehnic un anumit tip de vandalism, în general, un virus este un segment de program care se
ataseaza la alte programe din calculator. De exemplu, un virus se poate insera la începutul unui program
deja existent în sistem, astfel încât la fiecare executie a programului gazda sa se execute mai întâi virusul.
Atunci când este executat, virusul poate realiza diverse activitati daunatoare usor de remarcat sau poate
cauta pur si simplu alte programe la care sa ataseze copii ale sale. Daca un program infectat este transferat
17
la alt calculator, fie prin intermediul unei retele de calculatoare, fie pe discheta, virusul începe sa infecteze
programele noului calculator imediat ce programul transferat este executat. Astfel, virusii migreaza de la
un calculator la altul, în unele cazuri, virusii sunt proiectati astfel încât sa se raspândeasca în alte
programe pâna la aparitia unei conditii predeterminate, cum ar fi o anumita data calendaristica, când
efectueaza diferite operatii daunatoare. Acest comportament sporeste posibilitatea ca virusul sa se
raspândeasca pe numeroase calculatoare înainte de a se manifesta.
Termenul de vierme se refera de obicei la un program autonom care se transfera pe sine însusi
într-o retea de calculatoare, ramâne rezident în calculatoarele din retea si trimite copii ale sale în retea. Ca
si în cazul virusilor, aceste programe pot fi realizate astfel încât sa se multiplice sau sa efectueze alte acte
de vandalism.
Pe masura ce popularitatea retelelor de calculatoare creste, pagubele potentiale produse de accesul
neautorizat la informatii si de actele de vandalism cresc si ele. Acest fapt ridica multe întrebari legate de
oportunitatea plasarii de informatii strict secrete pe un calculator conectat într-o retea, de responsabilitatea
furnizarii unei protectii inadecvate a in formatiilor, precum si de responsabilitatea pentru actele de
vandalism. De aceea, problemele de etica si de legislatie asociate acestor subiecte i promit sa genereze o-
dezbatere aprinsa în viitor.
6. PROTOCOALE DE RETEA
Ansamblul de reguli care guverneaza comunicatia dintre diferite componente ale unui calculator
poarta numele de protocol, facându-se astfel analogia cu protocoale utilizate în cadrul societatii pentru
controlul interactiunilor dintre oameni. În cadrul unei retele de calculatoare, protocoalele definesc
detaliile fiecarei activitati, între modurile în care sunt adresate mesajele, în care se deleaga de la un
calculator la altul dreptul de a transmite mesaje si în care sunt tratate operatiile de împachetare a
mesajelor pentru transmisie si de despachetare a acestora la receptie. Sa începem a studia protocoalele
care controleaza dreptul unui calculator de a-si trimite în retea propriile mesaje.
Container Container
Avion
Companie aviatica Companie aviatica
Diviziunea muncii într-o ierarhie de straturi are doua consecinte importante care reprezinta
obiective comune în realizarea oricarei arhitecturi ierarhizate. În primul rând, operatia generala poate fi
împartita în suboperatii administrabile separat, fiecare dintre ele având scopuri specifice. În al doilea rând,
arhitectura ierarhizata duce la stabilirea de frontiere bine definite între suboperatii, între ele putând fi
implementate interfete standard. Daca se conformeaza acestora interfete standard, diferite solutii pentru
realizarea aceleiasi suboperatii pot fi schimbate între ele fara ca restul sistemului sa fie afectat. Într-
adevar, solutia particulara utilizata pentru rezolvarea unei suboperatii de la un anumit nivel poate fi
utilizata ca instrument abstract în rezolvarea operatiilor de la nivelurile superioare.
20
Nivelul plasat cel mai sus în ierarhia software Internet este nivelul aplicatiei. El include software
care trateaza activitat ile specifice unei anumite aplicatii. De exemplu, în cazul postei electronice,
software-ul din nivelul aplicatiei stocheaza mesajele receptionate si supervizeaza transmisia mesajelor. În
cazul transferului de fisiere de la un calculator la altul, software-ul de la nivelul de aplicatie comunica cu
administratorul de fisiere pentru a obtine acces la fis ierul care trebuie transferat, precum si cu
administratorul de fisiere de la calculatorul destinatie pentru a stoca fisierul transferat în sistemul lui de
fisiere.
Origin ea mesajului Destinatia mesajului
Nivelul Nivelul
aplicatiei aplicatiei
Nivelul Nivelul
transportului transportului
Nivelul Nivelul
retelei retelei
Nivelul Nivelul
legaturii legaturii
21
Responsabilitatea nivelului de legatura este sa se ocupe de detaliile de comunicatie proprii retelei
particulare în care sunt plasate calculatoarele. În cazul unei retele cu protocol inel cu jeton, pentru a
efectua transmisia, nivelul legaturii trebuie sa astepte sa obtina posesia jetonului. Daca reteaua utilizeaza
protocolul CSMS/CD, înainte de a transmite nivelul legatura trebuie sa astepte pâna la aparitia unui
interval de liniste pe magistrala. În plus, fiecare retea individuala din Internet poseda propriul sau sistem
de adresare, care este independent de sistemul de adresare utilizat de Internet, lucru de altfel explicabil,
daca tinem cont de faptul ca multe din ele functionau deja în momentul în care administratorii lor au decis
atasarea lor la Internet. De aceea, nivelul legaturii mai trebuie sa converteasca în sistemul de adresare
local adresele Internet atasate pachetelor si sa le adauge la pachet, sub forma unui strat suplimentar de
împachetare.
Ca si în cazul analogiei cu expedierea unui colet cu piese de schimb, fiecare nivel din ierarhia
software Internet joaca de asemenea un rol si în procesul de receptionare a mesajelor, rol ce consta în
mare în inversarea operatiilor facute de catre nivelurile de la originea mesajelor. Dupa ce nivelul pentru
legatura de la destinatie receptioneaza pachetele din reteaua de comunicatie, el elimina învelisul lor
(adresa în forma compatibila cu reteaua locala), atasat pachetului de nivelul legaturii de la originea
mesajului, si apoi livreaza pachetul ramas catre nivelul sau pentru retea.
De fiecare data când nivelul retele i primeste un pachet de la nivelul pentru legatura asociat lui, el
detaseaza adresa Internet intermediara atasata de catre corespondentul lui de la emisie si studiaza adresa
destinatiei finale, continuta în pachet. Daca aceasta coincide cu propria sa adresa, nivelul retelei livreaza
pachetul catre nivelul pentru transport asociat lui; altfel, nivelul retelei stie ca pachetul trebuie trimis mai
departe în Internet. În acest caz, el reîmpacheteaza pachetul, adaugându-i noua adresa intermediara, si-i
da drumul mai departe, trimitându-l nivelului legaturii. Astfel, pachetele sar de la un calculator la altul
pâna când ating destinatia finala. În timpul transferului, cade în sarcina nivelului retelei sa determine
destinatia urmatorului salt.
Pentru a sprijini procesul de readresare, nivelul retelei memoreaza un tabel de dirijare (routing)
care contine adresele destinatiilor finale cu care s-a lucrat recent, precum si adresele intermediare la care a
fost trimis fiecare dintre pachete. Diferitele niveluri retea din Internet îsi comunica periodic datele din
tabelele lor de dirijare, astfel ca informatiile despre adresele de propagare a mesajelor se distribuie treptat
în Internet. Fiecare nivel pentru retea pastreaza numai acele informatii despre care crede ca-i sunt
necesare si sterge periodic datele vechi din tabelul sau de dirijare, pentru ca acest tabel sa nu devina prea
mare. De aceea, continutul tabelelor de dirijare din Internet este dinamic si este deci posibil ca pachete
care reprezinta diferite parti ale aceluiasi mesaj sa ajunga la destinatie parcurgând trasee diferite prin
retea.
Daca nivelul retelei despacheteaza un mesaj primit si descopera ca adresa din pachetul inclus este
adresa calculatorului sau, el livreaza continutul pachetului catre nivelul pentru transport asociat lui. În
consecinta, numai nivelurile pentru legatura si pentru retea sunt implicate în trimiterea mai departe a
pachetelor destinate altor calculatoare. Nivelul transportului si nivelul aplicatiei sunt scutite de acest efort,
ele operând numai asupra pachetelor adresate calculatorului pe care sunt rezidente (figura 1.16). În
momentul în care nivelul transportului primeste pachete de la nivelul retelei, el extrage continutul
segmentelor de mesaj si reasambleaza mesajul original pe baza numerelor de secventa alocate
segmentelor de catre nivelul pentru transport de la origine. Odata ce mesajul este complet, nivelul
transportului îl livreaza nivelului sau de aplicatie, unde acestuia i se poate acorda atentia cuvenita.
Aplicatie
Transport Aplicatie
Legatura Legatura
Figura 1.16 Propagarea unei unitati de date prin Internet pe o cale care contine doua calculatoare
intermediare
22
În concluzie, comunicatia prin Internet implica interactiunea dintre diferite niveluri software
rezidente pe multe dintre calculatoarele din cadrul sistemului. În acest context, faptul ca timpul de raspuns
din Internet este de ordinul milisecundelor este uimitor. Într-adevar, o mare parte din tranzactii par sa se
produca instantaneu.
Protocolul TCP/IP
Cererea de retele deschise a generat necesitatea unor standarde publice la care sa se poata alinia
furnizorii de echipamente si programe, astfel încât produsele lor sa functioneze corect împreuna. Unul
dintre standardele rezultate este modelul de referinta OSI (Open System Interconnection), produs de
International Standard Organization (ISO). El se bazeaza pe o ierarhie cu sapte niveluri, spre deosebire de
arhitectura cu patru niveluri utilizata în Internet. Datorita autoritatii detinute de International Standard
Organization, el a devenit un model citat adesea, dar nu a fost implementat înca, în primul rând din cauza
ca înca dinainte de stabilirea lui, suita de protocoale TCP/IP era deja realizata, implementata, mediatizata
pe scara larga si verificata ca un sistem de protocoale potrivit pentru Internet.
Suita de protocoale TCP/IP este un ansamblu de protocoale ce defineste ierarhia pe patru niveluri
utilizata în Internet. De fapt, TCP (Transport Control Protocol) si IP (Internet Protocol) sunt numele a
doar doua din protocoalele ansamblului – asa ca utilizarea termenului de suita de protocoale TCP/IP
pentru întreaga serie nu este riguros exact. Mai precis, TCP defineste o versiune a nivelului transportului.
Spunem o versiune, deoarece suita de protocoale TCP/IP pune la dispozitie doua cai de implementare a
nivelului pentru transport, cea de a doua fiind definita de UDP (User Datagram Protocol). Acest lucru este
analog situatiei în care, expediind un colet cu piese de rezerva unui client, trebuie sa alegeti între diverse
firme de expeditie, fiecare dintre ele oferind acelasi serviciu de baza, dar având propriile sale
caracteristici specifice. Astfel, în functie de calitatea par ticulara a serviciului cerut, nivelul aplicatiei poate
alege sa trimita datele fie prin intermediul versiunii TCP, fie prin intermediul versiunii UDP a nivelului
pentru transport.
Exista doua diferente majore între TCP si UDP. Prima este aceea ca înainte de a transmite datele,
un nivel pentru transport bazat pe TCP trimite un mesaj nivelului pentru transport de la destinatie,
anuntându-l ca-i va trimite niste date si precizând care software din nivelul aplicatiei trebuie sa le
receptioneze. Dupa aceea, el asteapta confirmarea primirii acestui mesaj înainte de a trimite segmentele
mesajului propriu-zis. De aceea se spune ca un nivel pentru transport TCP stabileste o conexiune înainte
de a transmite datele. Un nivel de transport bazat pe UDP nu stabileste o astfel de conexiune înainte de a
transmite datele. El le transmite pur si simplu la adresa care -ia fost furnizata, dupa care nu se mai
intereseaza de ele. Din punctul lui de vedere, nu conteaza nici macar daca masina de la destinatie este sau
nu functionala. Din acest motiv, UDP este denumit protocol fara conexiune.
A doua diferenta semnificativa dintre TCP si UDP este aceea ca nivelurile de transport TCP de la
origine si destinatie coopereaza între ele utilizând încuviintari si retransmisii ale segmentelor de mesaj,
pentru a confirma transferul cu succes al tuturor segmentelor la destinatie. De aceea, TCP este considerat
un protocol sigur, în timp ce despre UDP, care nu ofera asemenea servicii de retransmisie a datelor, se
spune ca este un protocol nesigur. Acest lucru nu înseamna ca UDP este o alegere gresita. Într-adevar, un
nivel de transport bazat pe UDP este mai simplu decât un nivel bazat pe TCP, si daca o aplicatie este
pregatita sa trateze posibilele erori ale UDP, aceasta optiune se poate dovedi mai buna.
IP reprezinta protocolul Internet pentru nivelul retelei. Una dintre caracteristicile sale este aceea
ca de fiecare data când un nivel pentru retea IP pregateste un pachet pentru a-l livra nivelului legaturii, el
asociaza acelui pachet o valoarea denumita contor de salt sau durata de viata. Aceasta valoare reprezinta
numarul maxim de retransmiteri ale pachetului în încercarea acestuia de a-si gasi drumul prin Internet
catre destinatia finala. De fiecare data când un nivel de retea IP retransmite un pachet, el scade cu o
unitate controlul de salt asociat. Utilizând aceasta informati, nivelul retelei poate proteja reteaua Internet
de pachetele care cicleaza la nesfârsit prin sistem. Cu toate ca reteaua Internet continua sa creasca zi de zi,
un contor de salt initial cu valoarea de 64 ramâne mai mult decât suficient pentru a permite unui pachet
sa-si gaseasca drumul spre destinatie prin amalgamul de retele LAN, WAN si routere.
23