|
Politica de confidentialitate |
|
• domnisoara hus • legume • istoria unui galban • metanol • recapitulare • profitul • caract • comentariu liric • radiolocatia • praslea cel voinic si merele da aur | |
Tendinte moderne in proiectarea sistemelor de operare | ||||||
|
||||||
Conceptele fundamentale ale functionarii sistemelor de operare si-au pastrat o remarcabila stabilitate de-a lungul timpului. Un bun exemplu in acest sens este Unix, aparut in urma cu peste un sfert de secol. Desi a suferit numeroase modificari si cunoaste astazi multe variante, in general incompatibile intre ele, totusi ideile de baza au ramas aceleasi. Exista in schimb un efort sustinut de imbunatatire a caracteristicilor sistemelor de operare, care a dus la impunerea unor tehnologii noi, adaugate celor deja existente. Trei directii sunt in mod special avute in vedere: calculul distribuit, adica posibilitatea cooperarii intre sisteme de calcul
aflate la distanta in scopul rezolvarii unor probleme comune cresterea performantelor prin reducerea activitatilor mari consumatoare de timp,
legate in general de stabilitatea sistemului posibilitatea de a mari functionalitatea sistemului prin adaugarea si modificarea
cat mai facila a modulelor componente g6g16gk Sisteme de operare distribuite pentru calculul paralel unitatile de calcul sunt procesoarele dintr-un calculator
calculul distribuit priveste calculatoarele din retea ca unitati de calcul Un sistem de operare distribuit trebuie sa indeplineasca cel putin urmatoarele sarcini: Sa controleze functionarea tuturor calculatoarelor aflate in retea. Aceasta
cerinta nu este deloc simpla, dat fiind ca retelele pot fi eterogene, adica
alcatuite din calculatoare diferite ca hardware. Mult mai limitat, dar si mult mai utilizat este modelul client-server. Acesta presupune existenta in retea a unor calculatoare mai puternice, numite servere, capabile sa realizeze anumite activitati pe care statiile obisnuite nu le pot efectua. In momentul in care o statie are nevoie de rezultatele unei asemenea activitati, formuleaza o cerere catre server, iar acesta ii furnizeaza datele cerute. Astfel, statia in cauza devine client pentru serverul respectiv. Notiunea de server nu este foarte clar definita, putandu-se referi, in functie de contextul in care este folosita, atat la calculatoare, cat si la programe; in general, un server este o entitate (hardware sau software) care poate efectua anumite actiuni la cererea altor entitati (clienti) si le furnizeaza acestora rezultatele obtinute. Sistemele client-server au de rezolvat o mare parte din problemele generale intalnite la sistemele distribuite. Ceea ce dispare este controlul centralizat asupra statiilor, precum si asigurarea incarcarii echilibrate. Comunicarea intre server si client decurge in urmatoarele etape: clientul formuleaza cererea datele sunt convertite (tot de catre client) la reprezentarea utilizata in retea
si trimise catre server serverul preia datele din retea si le converteste la formatul propriu se analizeaza cererea si se realizeaza actiunile corespunzatoare rezultatele sunt convertite la formatul retelei si trimise catre client clientul preia raspunsul si il converteste la reprezentarea proprie Fire de executie intreruperea executiei programului curent, cu salvarea informatiilor care sa
permita reluarea sa din aceeasi stare comutarea din modul utilizator in modul nucleu al procesorului si apoi in sens
invers refacerea starii programului aflat anterior in executie (sau a altui program
intrerupt intr-un mod similar) si relansarea sa Este posibil ca un proces sa creeze la randul sau alte procese, cu care sa colaboreze pentru atingerea scopului urmarit. Fiecare asemenea nou proces poate executa aceleasi operatii ca si creatorul sau cu totul altele. In realitate insa fiecare proces este o entitate separata, care ocupa propriile zone de memorie pentru date, instructiuni si stiva. Un concept asemanator, dar mai simplu, il reprezinta firul de executie (thread). Orice proces poate consta din unul sau mai multe fire de executie. Acestea nu sunt noi procese, deoarece au in comun variabilele globale, zona de cod si sunt vazute de sistemul de operare ca un singur proces. Practic, firele de executie pot fi privite ca instante ale aceluiasi proces, aflate in diferite puncte de executie. Din punct de vedere al procesorului, firele aceluiasi proces difera doar prin valoarea contorului program (care, asa cum se stie, retine adresa urmatoarei instructiuni care va fi executata) si a indicatorului varfului stivei (deci implicit are variabile locale proprii). Utilizarea firelor de executie mareste flexibilitatea programelor. Desigur, un fir nu are toate posibilitatile unui proces diferit si nu-l poate inlocui in orice situatie. In schimb, nu este necesara interventia nucleului in gestiunea firelor de executie (creare, planificare, terminare), ceea ce poate aduce o crestere sensibila de performanta. In plus, comunicarea intre firele de executie este mult mai usoara decat intre procese, prin simpla partajare a variabilelor globale. Programarea firelor de executie nu este insa simpla. Deoarece exista atat de multa informatie comuna, interferentele nedorite intre fire pot aparea foarte usor. Chiar partajarea variabilelor globale poate fi atat un avantaj, cat si un mare risc. In privinta zonei de cod, interferentele sunt si mai puternice. Orice apel sistem (de exemplu deschiderea sau inchiderea unui fisier) efectuat de un fir de executie are efect asupra procesului in ansamblu, deci si asupra celorlalte fire. In particular, daca un fir decide terminarea intregului proces, aceasta va duce la terminarea tuturor firelor. In concluzie, firele de executie reprezinta nu atat o alternativa, cat o completare pentru lucrul cu mai multe procese. In general, lucrul cu fire multiple de executie este preferabil atunci cand este necesara o interactiune puternica intre secventele de cod ce se executa in paralel; atunci cand acestea au putine momente in care trebuie sa comunice, iar interferenta nu este dorita, este indicata utilizarea proceselor. Practic toate sistemele de operare ofera astazi facilitatea de multithreading. Spatiu utilizator - spatiu nucleu Solutia propusa este ca o parte din serviciile oferite de nucleu sa fie trecute in sarcina unor procese specializate. De exemplu, atunci cand un proces doreste sa citeasca date dintr-un fisier, aceasta actiune va fi realizata nu de catre nucleu, ci de catre un proces separat, care are drept sarcina gestionarea acceselor la disc. Un sistem de operare care transfera o parte din functionalitatea nucleului catre procese specializate este numit sistem de tip microkernel, in timp ce un sistem obisnuit poarta denumirea de kernel monolitic. Arhitectura unui sistem cu microkernel este diferita in anumite privinte de ceea ce am prezentat pana acum. Este evident ca realizarea serviciilor sistemului nu poate fi efectuata de procese obisnuite. Un asemenea proces specializat trebuie sa aiba acces la dispozitivele periferice, deci se executa in modul nucleu al procesorului. Mai mult, un proces din aceasta categorie se comporta asemanator nucleului, adica intervine numai la cererea unui proces obisnuit, care solicita efectuarea unui serviciu. Relatiile stabilite intre procesele obisnuite si cele specializate sunt de tip client-server; de altfel, denumirea de server este des utilizata pentru procesele specializate. Microkernelul prezinta o serie de avantaje. In primul rand, prin modularizarea serviciilor, este mult mai usor sa se imbunatateasca facilitatile existente sau sa se introduca altele noi; tot ce trebuie facut este inlocuirea sau adaugarea unor module de program. De multe ori, aceste schimbari pot fi realizate chiar din mers, fara a fi necesar ca sistemul sa fie oprit si repornit. In al doilea rand, deoarece modelul client-server este deja implementat, este foarte usoara extinderea sa catre lucrul in sisteme distribuite, deci in retele. Dupa cum se observa, avantajele sistemelor de tip microkernel se refera la extensibilitate. Dezavantajele, la fel de mari, sunt legate de performanta. Sa vedem care sunt aceste dezavantaje: Comunicarea intre un proces obisnuit (client) si un server, fiind pana la urma
o comunicare intre procese, nu se poate realiza direct, ci numai sub controlul
nucleului. Practic, un serviciu solicitat de un client unui server urmeaza calea
Client - Nucleu - Server - Nucleu - Client, ceea ce inseamna ca numarul apelurilor
la nucleu este mai mare decat in cazul kernelului monolitic. Asa cum s-a vazut,
aceste apeluri la nucleu introduc importante penalizari de viteza. Datorita performantelor slabe, sistemele cu microkernel nu au reusit sa le inlocuiasca pe cele clasice, cu kernel monolitic, dar unele concepte au fost preluate de acestea. Multe dintre sistemele de operare, in principal Unix si Windows NT, utilizeaza azi procese-server pentru a implementa anumite servicii care nu sunt critice din punct de vedere al vitezei, degrevand astfel nucleul de o parte din sarcini si marindu-si flexibilitatea. Un concept mai nou si orientat in directie opusa, catre cresterea performantei, este cel de exokernel. Ideea de baza este de fapt aceeasi ca si in cazul microkernelului: unele activitati care pana acum erau realizate de catre nucleu sunt trecute in sarcina proceselor. Spre deosebire insa de microkernel, serviciul respectiv nu mai este efectuat de un proces separat si specializat, ci chiar de procesul care il solicita. Altfel spus, apelurile sistem de pana acum devin functii de biblioteca, ruland in spatiul procesului care le solicita. Rolul nucleului se reduce la urmatoarele elemente: Mentine in permanenta evidenta tuturor resurselor sistemului de calcul si a
proceselor care le folosesc. In acest context, este tot sarcina nucleului sa
previna conflictele intre procesele care incearca sa acceseze simultan aceeasi
resursa. Se poate spune ca nucleul este interesat numai de mentinerea corectitudinii
accesului la resurse si nu de modul in care acestea sunt utilizate. |
||||||
|
||||||
|
||||||
Copyright© 2005 - 2024 | Trimite document | Harta site | Adauga in favorite |
|