Sunteți pe pagina 1din 22

UNIVERSITATEA POLITEHNICA, BUCURESTI FACULTATEA DE ELECTRONIC TELECOMUNICAII I TEHNOLOGIA INFORMAIEI

STUDENI:

CHIRCU FLORIN, PETRU ANDREI; GRUPA: IISC Master

2011

SISTEME DE OPERARE AVANSATE

Cuprins
UNIVERSITATEA POLITEHNICA, BUCURESTI...........................................................................................................1 1 SISTEME DE OPERARE......................................................................................................................................................3 1.1 Definiie...........................................................................................................................................................................3 1.2 Evoluia sistemelor de operare........................................................................................................................................3 1.3 Caracteristici ale sistemelor de operare...........................................................................................................................4 1.4 Clasificarea sistemelor de operare...................................................................................................................................4 1.5 Structura unui sistem de operare.....................................................................................................................................6 1.6 Functiile sistemelor de operare.......................................................................................................................................7 2 Sisteme de operare in timp real..............................................................................................................................................9 2.1 Functiile unui S.O...........................................................................................................................................................9 2.1.1 Functia de asistenta a utilizatorului. ........................................................................................................................9 2.1.2 Functia de asistenta a executiei. ..............................................................................................................................9 2.1.3 Functia de gestiune. ..............................................................................................................................................9 2.2 Structura S.O.................................................................................................................................................................10 2.3 Caracteristici ale S.O.....................................................................................................................................................12 2.4 Tipuri de sisteme de operare.........................................................................................................................................13 2.5 Principiile programarii paralele.....................................................................................................................................14 2.6 Gestiunea memoriei......................................................................................................................................................16 2.7 Gestiunea proceselor (taskurilor) si a procesorului......................................................................................................19

SISTEME DE OPERARE AVANSATE

SISTEME DE OPERARE

1.1

Definiie Sistemul de operare reprezint un ansamblu de programe care asigur utilizarea eficient a resurselor fizice i logice ale unui SEC prin pregtirea , punerea in lucru i coordonarea execuiei programelor utilizatorului. El are menirea, pe de o parte, de a crea un mediu in care utilizatorul s poat executa cu mai mult uurin i, pe de altparte, s asigure exploatarea optim a hardware-ului. Sistemele de operare au aprut i evoluat in direct legtur cu arhitectura SEC: apariia de noi dispozitive hardware a provocat dezvoltarea si stemelor de operare, dup cum i creterea performanelor sistemelor de operare a determinat imbuntirea parametrilor hardware. Primele sisteme de operare asigurau executarea secvenial pe loturi de programe in regim de monoprogramare. Ele asigurau automatizarea unor lucruri repetitive, oricare ar fi programela de executat. In multiprogramare problemele se complic i mai mult cand in memorie coexista simultan mai multe programe ce trebuie executate. Sincronizarea lucrarilor trebuie realizata la nivelul microsecundelor si nu poate fi atribuita operatorului uman. Ea va fi realizata si inclusa in sistemul de operare. 1.2 Evoluia sistemelor de operare

Sistemele de operare au evoluat de-a lungul anilor in mai multe generaii care corespund deceniilor de dup 1940. Calculatoarele anilor 40 erau extrem de primitive, nu aveau sisteme de operare, programele se introduceau bit cu bit sau erau cel mult codificate pe cartele sau benzi de telex. In acea perioad, programarea calculatoarelor se realiza in cod main, de aceea codul-masin se mai numete i limbajul de programare de generia inti. Dezavantajele limbajelor cod main au fost inlturate de apariia limbajelor de asamblare sau mnemonice care constituie limbajele de generaia a doua, ceea ce a fcut s creasc productivitatea muncii de programare. Primul sistem de operare, cunoscut in literatur, este cel dezvoltat, in primii ani de dup 1950 de ctre General Motors Research Laboratory, pentru un calculator IBM 701. Sistemul de operare era un sistem batch in care se executa un singur program la un moment dat, deci era un sistem monotasking. Un moment deosebit de important l-a constituit apariia, in perioada respectiv, a limbajului FORTRAN care a deschis epoca limbajelor de programare din generaia a treia. Calculatoarele din generaia a doua erau ins foarte scumpe. In anii 60 s-a pus problema dezvoltrii sistemelor de operare batch cu multitasking, in care resursele s fie partajate intre mai multe procese. In felul aceste au aprut primele planificatoare. Un moment important, in aceast perioad, l-a reprezentat apariia, in 1964, a calculatoarelor IBM-360 care aveau un sistem de operare foarte modern pentru acea perioad, OD/360. In aceast perioad, calculatoarele, aa zise medii-mari, sunt extinse cu un numr insemnat de terminale, ceea ce a dus la apariia primelor sisteme interactive, sub forma unor sisteme time-sharing. Se utilizeaz din ce in ce mai mult sistemele de operare hibride, in care activitile batch se desfoar in paralel cu cele in timp real sau cu cele multiacces. Un exemplu clasic, in acest domeniu, il constituie sistemele de operare SIRIS II si III, de la calculatoarele romneti Felix C-256, 512 si 1024. In aceast perioad au aprut o serie de sisteme de operare care incorporeaz concepte noi care au dus la adevrate revoluii in domeniul sistemelor de operare. Anii 70 au dus la dezvoltarea sistemelor hibride de operare. Apar primele calculatoare personale, dezvoltndu-se primele variante de sisteme de operare CP/M i MS-DOS. Incepe s se pun tot mai mult accent pe latura de comunicaie, latur neglijat pn atunci. Anii 80 au fost anii calculatoarelor personale, ai staiilor de lucru, ai informaticii distribuite, in care intervin un numr tot mai mare de calculatoare. In aceast perioad s-au dezvoltat pachetele pentru procesarea
3

SISTEME DE OPERARE AVANSATE

textelor, sistemele de gestiune a bazelor de date, programele de calcul tabelar etc. In organizaiile mari se introduc sisteme puternice si reele eterogene. S-a trecut masiv, de la calculatoare izolate, la reele de calculatoare. Anii de dup 90 au dus la dezvoltarea masiv a calcului distribuit. In aceast perioada se depun eforturi deosebite pentru dezvoltarea software-ului paralel pentru a mri performanele calculatoarelor. Dar i pentru a reduce decalajul dintre hardware-ul paralel si software. Azi se pune tot mai mult accent pe sistemele multimedia in care calculatorul gestioneaz medii multiple cum ar fi date alfanumerice, grafic, sunet, imagine. O orientare, in ultimii ani, este aceea de a implementa ct mai multe funcii ale sistemului de operare in hardware. 1.3 Caracteristici ale sistemelor de operare

Sistemul de operare apare ca un ansamblu de programe destinat s rspund la urmtoarele dou obiective: - uurarea utilizrii SEC prin preluarea lucrrilor de rutin, repetitive, precum i printr-un dialog suplu utilizator-sistem; - utilizarea eficient a resurselor SEC. Un sistem de operare performant trebuie s posede urmtoarele caracteristici: - Utilitate: s satisfac toate cerinele utilizatorului asigurnd o interfa facil a utilizatorului cu programele de aplicatii; - Generalitate: s poat rspunde corect la toate cerinele formulate i deci s permit rezolvarea unor probleme ct mai variate ale utilizatorului; - Eficienta: s asigure utilizarea optim a resurselor fizice i logice ale sistemului de calcul; - Transparena: s permit insuirea simpl a facilitilor oferite utilizatorului; - Flexibilitate: posibilitatea modificrii sistemului de operare in functe de cerinele utilizatorului; - Opacitate: din punct de vedere al utilizatorului trebuie s existe numai necesitatea cunoaterii la nivel de interfa, fr a ptrunde la structurile inferioare; - Securitate: sistemul de operare trebuie protejat impotriva unor incercri voluntare sau involuntare de distrugere prin programele utilizatorului; - Integritate: sistemul de operare impreun cu aplicaiile concepute pentru el trebuie s poat comunica cu alte sisteme de operare sau cu programe concepute sub alte sistems de operare; - Capacitate: posibilitatea sistemului de operare de a suplini unele faciliti necesare dar care nu pot fi realizate fizic datorit unor restriii hardware; - Disponibilitate: posibilitatea sistemului de operare de a izola eventualele erori ce pot apare si de a comunica activitatea in condiii de capacitate i eficien maxim; - Serviabilitate: posibilitatea sistemului de operare de a furniza utilizatorului informaiile necesare pentru o depanare ct mai rapid a programelor; - Extensibilitate: adugarea de noi faciliti care s in pasul cu cerinele utilizatorilor; - Interoperabilitate: sistemul de operare trebuie s admit accesul la structurile de date care au fost construite sub un alt sistem de operare.

1.4

Clasificarea sistemelor de operare

Sistemele de operare se pot clasifica astfel: a) Dup configuraiile hardware pe care le deservesc: 1) sisteme de operare pentru calculatoare medii/mari: se caracterizeaz prin posibiliti de lucru seriale i/sau interactive; sunt puternice, au dimensiuni mari ale cuvntului de memorie i au conectate un numr mare de periferice;
4

SISTEME DE OPERARE AVANSATE

2) sisteme de operare pentru minicalculatoare: folosesc cu prioritate tehnicile time-sharing i multiprogramare permind partajarea resurselor pentru lucrul interactiv multiutilizator i planificarea unitii centrale pentru servirea utilizatorilor; 3) sisteme de operare pentru microcalculatoare: sunt cele mai folosite la ora actual, deoarece pot fi achiziionate intr-o configuraie minim, la un pre accesibil utilizatorilor i sunt usor de exploatat; b) Dup gradul de partajare a resurselor: 1) sisteme de operare monoutilizator: sunt cele mai simple sisteme de operare i permit executarea la un moment dat, a unui singur program care rmne activ in memoria intern, de la lansare i pn la terminarea sa; 2) sisteme de operare multiutilizator: au in vedere partajarea memoriei, a UCP, a perifericilor sau a altor tipuri de resurse, intre utilizatorii conectai la un moment dat; c) Dup tipurile de interaciuni permise: 1) sisteme de operare seriale: execut lucrrile pe loturi pregtite in prealabil. Utilizatorul nu poate interveni in execuia programului dup acesta a fost preluat de sistemul de calcul; 2) sisteme de operare interactive: asigur un contact nemijlocit al utilizatorului cu programul, acesta putnd intervenj in timpul executei programului;

3)

sisteme de operare in timp real: permit deservirea, in timp prestabilit, a fiecrei operaii cerute de utilizator;

d) Dup organizarea intern a programelor ce compun sistemul de operare: 1) sisteme de operare monolitice: contn o colecie de proceduri, fiecare putnd fi apelat la cererea utilizatorului; 2) sisteme de operare cu nucleu de interfa hardware: organizeaz sarcinile eseniale apropiate de componentele fizice, intr-o colecie de rutin numit nucleu. Componentele nucleului se pot executa concurent; 3) sisteme de operare cu structur stratificat: sunt o generalizare a organizrii unui nucleu. Sistemul de operare este construit pe niveluri, componentele fiecrui nucleu folosind toate serviciile oferite de nivelul anterior; 4) sisteme de operare organizate ca maini virtuale: deservesc mai multe procese. Fiecare proces dispune in mod exclusiv de o serie de resurse. Fiecare dintre procesele deservite reprezint un sistem de operare care are la dispozitie toate resursele alocate procesului respectiv. In acest mod, pe acelai echipament se poate lucra simultan cu mai multe sisteme de operare;

e) Dup natura suportului tehnic pe care se pstreaz sistemul de operare:


5

SISTEME DE OPERARE AVANSATE

1) sisteme de operare ROS (Resident Operating System): au componentele rezidente permanent in memoria intern; 2) sisteme de operare TOS (Tape Operating System): memoreaz componentele pe un suport extern de tip band. Sunt superioare sistemelor ROS, dar utilizarea lor a fost de scurt durat, fiind inlocuite de sistemele de operare de tip DOS; 3) sisteme de operareDOS (Disk Operating System): asigur rezidena componentelor pe disc magnetic; 4) sisteme de operare NOS (Netware Operating System): include funcii speciale, cum ar fi conectarea calculatoarelor i a dispozitivelor periferice intr-o reea local(LAN);

f) Dup numrul prelucrrilor executate simultan: 1) sisteme de operare monotasking: execut un singur task la un moment dat; 2) sisteme de operare multitasking: trebuie s asigure, in plus, partajarea timpului intre programele ce se execut simultan precum i gestiunea alocrii resurselor sistemului de calcul, att hardware ct si software. 1.5 Structura unui sistem de operare Majoritatea sistemelor de operare au in structura lor dou componente majore: - programe de control; - programe de serviciu. Programele de control au rolul de a controla si coordona activitatea tuturor componentelor sistemului. In aceast categorie intr: - programe de gestiune intreruperi - ansamblu de subrutine activate la apariia unui semnal fizic de intreruperi; - programe de gestiune procese - creeaz procese i rezolv probleme privind cooperarea i concurena acestora; - programe de gestiune a memoriei - aloc necesarul de memorie intern solicitat de procese i asigur protecia memoriei interprocese; - proceduri de tratare a intrarilor si iesirilor la nivel fizic - asigur efectuarea operaiunilor elementare de I/E cu toate tipurile de periferice din sistem; - programe de gestiune a fisierelor - colecte de module prin care se asigur deschiderea, inchiderea si accesul utilizatorului la datele din fiiere; - programe de planificare a lucrarilor si de alocare a resurselor; - programe de gestiune tehnica a sistemului de operare - ine evidena erorilor hardware i la cerere furnizeaz informaii strategice asupra gradului de utilizare a componentelor sistemului electronic de calcul; - programe de ststistica a sistemului de operare - ine evidena utilizatorilor, a lucrrilor executate de acetia i a resurselor consumate. Programele de serviciu: asigur sub supravegherea programelor decontrol, dezvoltarea programelor de aplicaii i exploatarea celorlalte faciliti oferite. Programele de serviciu pot fi grupate in: - programe translatoare- traduc programele surs in programe obiect (asambloare, compilatoare, interpretoare);
6

SISTEME DE OPERARE AVANSATE

- editoare de legaturi - lucreaz cu programul obiect rezultat in urma compilrii, transformndu-l in program executabil; - programe de incarcare - programe care asigur incrcarea programelor in memoria RAM, iniializnd execuia; - programe de depanare - ofer mijloace de verificare i corectare a operaiilor realizate de programul curent; - editoare de text - permit editarea textelor, crearea si actualizarea de programe, fiiere de date, fiiere de comenzi i orice alte texte; - programe de bibliotecare - asigur crearea, gestionarea si intreinerea bibliotecii sistem - medii de programare - permit automatizarea procesului de constituire si testare a programelor; - suprafete de operare - ofer o gam variat de servicii ce inlesnesc executarea rapid a lucrrilor de rutin; 1.6 Functiile sistemelor de operare

Rolul sistemului de operare este de a asigura utilizarea eficient a resurselor SEC facilitnd sarcinile utilizatorului. In acest sens un sistem de operare trebuie s indeplineasc anumite operaiuni ce pot fi grupate in 4 funcii eseniale: - gestiunea lucrrilor; - gestiunea intrrilor i ieirilor; - gestiunea fiierelor; - comunicarea cu utilizatorul. Gestiunea lucrarilor O lucrare reprezint un ansamblu de activiti delimitate prin comenzi specifice limbajului de comand. Lucrarea cuprinde mai multe etape intr-o ordine prestabilit de utilizator. Gestiunea lucrrilor este asigurat de un program specific care realizeaz gestiunea resurselor fizice ale calculatorului, coordonarea general a ordonrii lucrrilor. Acest program coordoneaz i controleaz orice activitate derulat de alte programe ale sistemului de operare. Gestiunea intrarilor/iesirilor Gestiunea intrrilor/ieirilor joac un rol important in aplicaiile de getiune. In practic, in momentul cnd prin programul utilizatorului se solicit o operaie de I/E, gestionarul de I/E preia sarcinile legate de citirea i scrierea informaiilor pe unitile periferice. Gestiunea fisierelor Sistemul de operare, programele utilizatorului sunt stocate si manipulate de SEC cu ajutorul fiierelor. Sistemul de gestiune a fiierelor este o component a sistemului de operare care realizeaz urmtoarele activiti: - gestiunea fisierelor stocate in memoriile auxiliare; - protectia datelor; - gestiunea bibliotecii de programe. Dialogul cu utilizatorii Dialodgul utilizator-calculator se realizeaz prin intermediul unor linii de comand. Cu ajutorul limbajului de comand utilizatorul specific: - delimitarea lucrrilor; - structura lucrrilor; - necesarul de resurse fizice; - informaii privind seturile de date asociate lucrrii.
7

SISTEME DE OPERARE AVANSATE

SISTEME DE OPERARE AVANSATE

Sisteme de operare in timp real

Un sistem de operare este o colectie organizata de programe numite programe de sistem, care: a) realizeaza o interfata intre utilizator si sistemul de calcul extinzand setul de operatii executate de calculator, minimizand efortul de programare a calculatorului si optimizand interactiunea om-calculator; b) gestioneaza resursele calculatorului, in sensul optimizarii utilizarii lor. In functie de complexitatea sistemului de calcul, programele de sistem se numesc: - program monitor; - program executiv; - program de comanda; - sistem de operare. In general, sistemele de calcul mici si, in special, cele dedicate dispun doar de un monitor care asigura un minim de servicii utilizatorului, cum ar fi: vizualizarea continutului memoriei, modificarea continutului memoriei RAM, vizualizarea continutului registrelor si a indicatorilor de stare (conditie) precum si modificarea valorilor lor, compararea unor zone de memorie etc. Sistemele de calcul complexe lucreaza sub comanda unui sistem de operare. 2.1 Functiile unui S.O. Principalele functii asigurate de S.O. actuale sunt: 2.1.1 Functia de asistenta a utilizatorului. Obiectivele urmarite sunt: a) Furnizarea unui limbaj de comanda care permite introducerea de catre utilizator a unor parametri si optiuni pentru utilizarea resurselor fizice si logice ale sistemului. Realizarea acestei functiuni se face cu ajutorul unui interpreter de comenzi. b) Furnizarea unor programe (editoare de legaturi) care realizeaza legarea diferitelor module ale unui program sau a mai multor programe de utilizator si a unor subrutine din biblioteci de programe intr-un singur program executabil. Aceasta permite o mare flexibilitate in programare, pentru ca, diversele module ale programului pot fi initial scrise in limbaje diferite, care sa asigure o programare optima pentru modulul respectiv. c) Existenta unor sisteme de gestiune a bibliotecilor de programe destinate inscrierii, pastrarii, actualizarii si eliminarii programelor prezente; d) Furnizarea unui set de macroinstructiuni care sa permita utilizatorului folosirea in programele proprii a unor functii specifice S.O. (de exemplu subrutine de lucru cu dispozitivele de I/E). e) Furnizarea unor programe utilitare pentru editarea programelor de utilizator si pentru manipularea informatiei prezente sub forma de fisiere, programe de copiere a fisierelor etc. f) Furnizarea unui limbaj de control de tip conversational, de dialog intre operator si sistem. De obicei, S.O. au un limbaj de comanda de tip cu autodocumentare datorita unor puternice functii HELP pe care le au implementate. 2.1.2 Functia de asistenta a executiei. S.O. trebuie sa permita: a) Izolarea logica a dispozitivelor defecte si asigurarea conditiilor pentru o eventuala executie a lucrarilor cu ajutorul resurselor ramase utilizabile. b) Testarea automata si diagnosticarea defectelor. c) Afisarea automata a informatiei de stare. S.O. sunt dinamice, in sensul ca, in permanenta pot fi adaugate noi functii sau rescrise programele ce realizeaza functii deja implementate. 2.1.3 Functia de gestiune. Principala sarcina a unui S.O. este aceea de gestiune a resurselor sistemului de calcul: unitatea centrala, memoria principala (interna), perifericele de I/E, bibliotecile si fisierele de date. Programele pentru gestiune ale unui S.O. pot fi impartite in 4 mari categorii: 1) Functia de gestiune a memoriei, cu urmatoarele atribute:
9

SISTEME DE OPERARE AVANSATE - tine evidenta utilizarii memoriei, adica permite cunoasterea in orice moment a zonelor de memorie libere si ocupate; - decide ce proces primeste memorie, cand si ce cantitate de memorie i se aloca. Alocarea memoriei se face atat pentru pastrarea programului corespunzator procesului cat si pentru necesitatile de executie. - asigura tehnici corespunzatoare de protectie a memoriei; - dezaloca resursa cand procesul s-a incheiat sau nu mai are nevoie de o anumita cantitate de memorie. 2) Functia de gestiune a procesorului si proceselor: - tine evidenta procesorului precum si evidenta starii proceselor; - decide prioritatea in utilizarea procesorului, in functie de prioritatea lucrarilor ce trebuie executate; - planificatorul lucrarilor aloca resursele procesorului necesare realizarii unui proces (lucrare); - elibereaza resursa cand procesul nu mai are nevoie de procesor sau cand s-a depasit o anumita cuanta de timp alocata pentru utilizare. 3) Functia de gestiune a dispozitivelor periferice are rolul de a aloca resursele si a initializa operatiile de I/E precum si de a dezaloca aceste resurse cand operatiile de I/E s-au incheiat. 4) Functia de gestiune a informatiei: - tine evidenta resurselor (fisierelor) si localizarea acestora pe suporturi magnetice; - ofera rutinele de acces la informatie; - aloca si dezaloca informatie prin functia de deschidere si respectiv de inchidere a fisierelor. Deci, putem spune ca: - functia de gestiune trebuie sa prevada functiile de control automat prin rutine specializate asupra tuturor resurselor fizice si logice ce apar; - sa asigure o cat mai mare independenta a programelor utilizator fata de particularitatile sistemului pe care s-a implementat S.O.; - sa rezolve toate problemele de control al functionarii sistemului printr-un procedeu performant de tratare a intreruperilor (utilizarea intreruperilor permite un dialog foarte flexibil intre U.C. si mediul extern, permitand semnalarea prompta a diverselor evenimente interne sau externe); - sa permita modificarea configuratiei de echipamente periferice, fara ca aceasta sa afecteze programele deja implementate. Din punct de vedere al utilizatorului, S.O. apare ca o interfata intre programele sale de aplicatii si echipamentele (elementele) sistemului de calcul, care poate fi reprezentata printr-o structura ierarhica de forma din Fig.4.1. Se observa ca accesul direct la resursele sistemului de calcul este puternic limitat de existenta a doua nivele intermediare: procesorul de limbaj si S.O. Fiecare nivel introduce functii noi inexistente la nivelele inferioare definind o masina virtuala corespunzatoare acelui nivel. Program aplicatii Procesor limbaj S.O. Sistem de calcul Fig. 2.1. 2.2 Structura S.O.

Componentele in care se descompune un S.O. sunt situate la diferite nivele ierarhice, avand, de exemplu, structura din Fig.4.2. Plasarea unei functii a S.O. pe unul din cele trei nivele se realizeaza pe baza departarii functiei respective de echipamentul fizic. Acest aspect este foarte evident in toate calculatoarele care folosesc S.O. si, in special, pentru S.O. scrise in limbaje evoluate.
10

SISTEME DE OPERARE AVANSATE

11

1 - Nucleu 1 2 3 2 - Suport de executie a programelor 3 - Suport de pregatire a programelor Fig. 2.2. S.O. pot fi scrise intr-un limbaj de nivel evoluat numai la nivelele superioare, care nu interactioneaza direct cu masina fizica. Existenta nucleului este obligatorie in orice S.O. Nucleul contine functiile privind tratarea operatiilor de I/E la nivel fizic, tratarea intreruperilor, tratarea sincronizarii si comunicarii intre procese, care sunt scrise, de obicei, in cod masina sau limbaj de asamblare. Functiile care formeaza nucleul S.O. sunt intens utilizate de celelalte doua nivele superioare si, din aceasta cauza, se implementeaza prin secvente de program rezidente in M.O. intr-o zona special rezervata acestui scop. Functiile de suport pentru executia programului sunt apelate in timpul executiei unui program printr-un procedeu asemanator apelului macroinstructiunilor, adica prin folosirea unor parametri. Nu toate functiile acestui nivel sunt rezidente in memorie, ci numai acele functii care sunt cel mai des utilizate, iar celelalte se incarca numai in functie de necesitati. Nivelul superior (3) consta din programe relativ rar apelate, care permit aducerea unui program in starea in care sa poata fi executat. Programele scrise in limbaje evoluate utilizeaza S.O. tocmai la acest nivel. Orice acces al programelor utilizator la functiile de la nivelele 2 si 1 se realizeaza indirect (si din aceasta cauza, acest nivel se numeste de pregatire a programelor). Apelul la componentele S.O. se realizeaza printr-un limbaj de comanda specific S.O. respectiv. Intr-o succesiune normala, un program de aplicatie parcurge, inainte de a fi executat, urmatoarele etape: introducerea in sistem, compilarea, editarea de legaturi, activarea programului. Nu este obligatoriu ca toate lucrarile sa parcurga toate aceste etape. Sunt lucrari la care fiecare faza poate sa apara o data sau de mai multe ori. Fiecareia din etapele prezentate, in S.O. ii corespund programe specifice: compilatoare, editoare de legaturi, editoare de rapoarte pentru prezentarea rezultatelor etc. 2.3 Caracteristici ale S.O.

Modul in care diversele S.O. implementeaza functiile specifice determina atributele S.O. Punerea in evidenta a acestor atribute este foarte importanta pentru ca reprezinta un mijloc obiectiv de comparare intre diverse S.O. Fiecare S.O. prezinta anumite caracteristici specifice, dar pot fi puse in evidenta si cateva caracteristici de ordin general, valabile in orice sistem de operare, din care putem enumera: 1) Timpul de raspuns, calculat ca intervalul de timp intre lansarea unei comenzi (cereri de servicii catre executiv) si achitarea acesteia de catre sistem. Acest atribut are in general doua componente distincte si anume: - timpul de asteptare corespunzator intervalului de timp pentru ca cererea sa fie luata in considerare; - timpul de executie (timpul necesar pentru a efectua lucrarile specifice cererii). 2) Simultaneitatea utilizarii, se refera la gradul in care un sistem poate fi utilizat in acelasi timp de mai multi utilizatori (multiprogramare) sau sa execute simultan mai multe programe (lucrari) ale aceluiasi utilizator (multitasking). 3) Eficienta, reprezinta proprietatea S.O. de a folosi in mod optim resursele de care dispune sistemul de calcul. 4) Partajarea si protectia, caracterizeaza gradul in care utilizatorii au posibilitatea sa utilizeze in comun informatia prezenta in sistem, modul in care ei pot sa comunice intre ei fara ca executia programelor specifice unui utilizator sa afecteze executia programelor celorlalti utilizatori. Este necesar ca, interactiunea dintre utilizatori sa nu conduca la alterarea intentionata sau accidentala a informatiei. 5) Generalitatea, flexibilitatea, extensibilitatea, masoara gradul in care un S.O. poate fi adaptat pe alte sisteme de calcul decat sistemul pentru care a fost creat. De asemenea, indica gradul in care un S.O.

poate fi dezvoltat, fie prin modificarea unora din functiile deja implementate, fie prin introducerea de noi functii si componente software si hardware fara eforturi deosebite de programare si proiectare. 6) Fiabilitatea si disponibilitatea unui S.O. este strans legata de fiabilitatea intregului sistem de calcul si exprima proprietatea sistemului de a functiona in continuu, fara a avea goluri de functionare din cauza defectarii sau blocarii unor componente ale sale. Cresterea fiabilitatii se poate face pe doua cai: - cresterea fiabilitatii componentelor hardware si software precum si introducerea rezervarii unor blocuri critice; - utilizarea unor S.O. si programe tolerante la defecte; aceasta inseamna ca, in cazul aparitiei unor anomalii de functionare, S.O. asigura in continuare desfasurarea activitatii sistemului, acceptandu-se o degradare a performantelor in anumite limite impuse care nu afecteaza insa esenta activitatii sistemului. Un accent deosebit se pune pe fiabilitatea si disponibilitatea sistemelor in cazul utilizarii acestora pentru prelucrari in timp real. 7) Transparenta si vizibilitatea. Transparenta indica gradul in care realizarea functiilor S.O. se face fara aportul utilizatorului. Pentru utilizator, ceea ce se afla sub interfata de utilizare care i se ofera trebuie sa fie invizibil, deci realizarea efectiva a functiilor S.O. trebuie sa fie invizibila. Vizibilitatea indica masura in care un utilizator poate avea acces la programele ce implementeaza anumite functii ale S.O. Exista situatii in care, desi nu este absolut necesar, utilizatorul are nevoie sa cunoasca anumite informatii specifice activitatii S.O. pentru a putea creste eficienta programelor sale de aplicatie. 2.4 Tipuri de sisteme de operare

Plecand de la caracteristicile S.O. si avand in vedere si destinatia sistemului de calcul utilizat, s-a ajuns la urmatoarea clasificare a S.O.: - S.O. secventiale; - S.O. cu multiprogramare; - S.O. in timp real; - S.O. cu prelucrare multipla. Un sistem de operare secvential permite executarea, la un moment dat, a unui singur program care trebuie terminat inainte de a se lua in considerare un alt program. Principalul dezavantaj al acestui tip de S.O. este timpul de raspuns mare comparativ cu timpul de operare al unitatii centrale. Sistemele cu multiprogramare accepta la un moment dat mai multe programe in memoria centrala partajata, acestea aflandu-se in diverse stadii de executie. Executia acestor programe se realizeaza prin multiplexarea unitatii centrale, urmarindu-se obtinerea, la un grad de simultaneitate cat mai ridicat, a unui timp de raspuns cat mai mic si a unei eficiente de utilizare maxima. In acest caz utilizatorul nu poate sa intervina la nivelul S.O. pentru a dirija modul de executie a programului. Un S.O. in timp real este dedicat unei anumite clase de aplicatii. Prelucrarea in timp real presupune o viteza de raspuns foarte mare pentru ca toate cererile din proces trebuie luate in considerare imediat ce au fost formulate. Notiunea de timp de raspuns este foarte elastica, domeniul de variatie al acestuia fiind foarte larg in functie de domeniul de utilizare al sistemului de calcul (microsecunde pentru procese foarte rapide, pana la ore in dirijarea unor procese economice). In general, aplicatiile implementate pe echipamente de calcul ce functioneaza in timp real sunt in bucla infinita si presupun o baleiere permanenta a datelor sosite din proces concomitent cu calculul comenzilor corespunzatoare, iar interventia din partea operatorului este minima. Complexitatea S.O. in timp real este mult mai mare decat a celorlalte tipuri de S.O. pentru ca se impun performante deosebite pentru a satisface intr-un timp critic diversele cereri sosite din exterior. Deoarece, in multe astfel de sisteme apare problema cooperarii intre diversele programe executate, trebuie rezolvate probleme sofisticate privind sincronizarea si comunicarea intre programe. Un sistem de calcul dotat cu un S.O. cu prelucrare multipla dispune de de mai multe procesoare care pot sa execute simultan unul sau mai multe programe. In cazul executiei mai multor programe independente, avem de-a face cu efectul de multiprogramare mentionat mai sus, dar cu performante mult imbunatatite. In cazul executiei simultane a unui singur program de catre mai multe unitati trebuie sa existe posibilitatea de descopunere a acestui program in parti componente numite sarcini de program sau taskuri, care in timpul executiei trebuie sa coopereze intre ele in vederea atingerii obiectivului urmarit de program in ansamblu.

Un sistem de operare care ofera posibilitatea de a executa in paralel (sau simultan) mai multe programe (taskuri) care interactioneaza intre ele, parti componente ale unui program dat, poarta denumirea de S.O. cu facilitati multitasking. Mentionam insa ca nici multiprogramarea si nici multitaskingul nu impun capacitatea de prelucrare multipla din partea sistemului de calcul, deci astfel de S.O. pot fi implementate si pe sisteme monoprocesor. Sistemele de calcul destinate conducerii proceselor industriale trebuie sa posede in mod necesar sisteme de operare in timp real cu facilitati multitasking. O particularitate esentiala a unui astfel de S.O. este aceea ca el trebuie sa fie accesibil utilizatorului care ii poate cere o serie de servicii in vederea realizarii evolutiei dorite a programului. Privit prin prisma utilizatorului si a programelor de aplicatii, ansamblul de programe al acestui tip de S.O. poate fi impartit in doua categorii: - programe necesare in faza de pregatire, elaborare si testare a programelor de aplicatii (editorul de texte, compilatorul, link-editorul, debuggerul etc.) numite, din acest motiv, si programe de serviciu; - programe necesare in etapa de conducere, care se leaga cu programele utilizatorului in faza de dezvoltare, formand aplicatia dedicata care se implementeaza pe echipamentul de conducere. Pentru a nu incarca in mod nejustificat atat din punct de vedere hardware cat si software echipamentul de calcul destinat conducerii procesului industrial, dezvoltarea aplicatiei se va face pe un alt sistem numit sistem de dezvoltare care va contine ambele categorii de programe. 2.5 Principiile programarii paralele

Consideratii generale Programarea paralela sau concurenta este activitatea de scriere a unui program care contine o serie de parti componente necesar a se afla in executie in acelasi moment. Orice aplicatie in timp real contine astfel de operatii paralele care reprezinta etape de executie asincrona a acesteia. Asa cum am mentionat in capitolul anterior, partile componente ale programului ce pot fi executate in paralel poarta denumirea de taskuri. Din punct de vedere al sistemului de calcul, taskul este cea mai mica unitate de prelucrare careia i se atribuie o identitate. Taskul reprezinta un program in forma executabila compus dintr-o succesiune de instructiuni executate secvential si care realizeaza de obicei o anumita functie. Daca un task este incarcat si executat in orice zona a memoriei principale spunem ca taskul este relocabil. Fiecarui task i se asociaza un indicator de importanta numit prioritate. Alocarea prioritatii poate fi fixa sau dinamica. In cazul prioritatilor fixe, inseamna ca, unui task i se aloca, in faza de proiectare a aplicatiei, o prioritate si ca aceasta nu poate fi modificata indiferent de evolutia ulterioara a procesului, pe cand in cazul alocarii dinamice a prioritatii, prioritatea unui task se poate modifica pe baza anumitor criterii prestabilite in functie de evenimentele ce au loc in proces. Alocarea dinamica a prioritatii este realizata de S.O., iar dezavantajul acestui procedeu il constituie complexitatea sporita a gestiunii lucrarilor (taskurilor). Taskurile sunt activate in functie de prioritatile lor de o componenta a S.O. numita PLANIFICATOR (SCHEDULER) Rutinele (ROUTINES) sunt unitati mai mici de program destinate tratarii rapide a unor evenimente. Sunt activate direct de S.O. la detectarea producerii unor evenimente in procesul industrial. Detectarea acestor evenimente se realizeaza de regula prin intermediul sistemului de intreruperi al sistemului de calcul. Subrutinele (SUBROUTINES) sunt cele mai mici unitati de program apelate de taskuri. Acestea pot fi: dedicate, adica specifice unui singur task sau comune, situatie in care pot fi apelate de mai multe taskuri sau rutine. Spre deosebire de taskuri care sunt intreruptibile, subrutinele nu sunt intreruptibile, adica nu se accepta intreruperea activitatii unei subrutine pentru a trece la executia unui alt task. Acest lucru se datoreste faptului ca, in general, subrutinele implica un timp de raspuns foarte mic, critic sau, altfel spus, sunt asociate unor evenimente critice. Exista si asa numitele subrutine reentrante disponibile mai multor taskuri si care pot fi intrerupte deoarece nu sunt asociate unor evenimente critice. Vom spune ca doua taskuri sunt paralele sau concurente daca prima instructiune a unui task demareaza inainte ca ultima instructiune a celuilalt task sa fi fost completata.

Daca sistemul de calcul (conducere) este multiprocesor, paralelismul executiei taskurilor poate fi asigurat in mod real in sensul ca fiecare task poate fi executat de catre un procesor. In acest caz, se obtine o executie paralela suprapusa in timp, numita si executie paralela fizica. Daca echipamentul este monoprocesor si dotat cu un S.O. in timp real cu facilitati multitasking, executia paralela a taskurilor se va face intercalat, pe principiul distribuirii timpului unitatii centrale intre taskuri ("time slicing"). La un moment dat, va detine controlul procesorului un singur task, dar datorita vitezei mari de lucru a acestuia, precum si datorita modului de programare se lasa impresia ca taskurile se executa simultan, ca si cand fiecare task ar beneficia de un procesor propriu - virtual, evident ceva mai lent. In acest caz, se spune ca are loc o executie pseudo-paralela sau o executie paralela logica. In cele ce urmeaza ne vom referi la acest din urma mod de executie paralela a taskurilor, ceea ce corespunde situatiei mai frecvent intalnite in aplicatiile de conducere si supraveghere automata a proceselor. Pentru a putea realiza acest paralelism in prelucrarea taskurilor, arhitectura sistemelor de calcul trebuie sa contina obligatoriu canale care sa execute toate operatiile de transfer de informatie, independent de procesor. Procesorul va avea doar rolul de a initia si initializa operatia de I/E printr-un dialog adecvat cu canalul. In continuare canalul executa toate operatiile de transfer necesare, iar in incheiere semnaleaza procesorului, printr-un semnal de intrerupere, ca si-a incheiat activitatea. Aceasta presupune existenta unui sistem de intreruperi bine pus la punct. Exemplu de executie a taskurilor in regim de multiprogramare Consideram cazul unui sistem in care exista disponibile simultan trei taskuri T1, T2, T3. Taskul T1 are prioritatea maxima, dar la initializarea sistemului, se presupune ca este gata pentru executie taskul T3. Schematic, ocuparea de catre cele trei taskuri a procesorului si activitatea S.O. si a canalelor de I/E este reprezentata in urmatoarea diagrama. T3 1 5 3 4 ******** 7 t Canal 2 6 blocat ********* terminat 8 terminat t 9 t t

T2

T1

terminat

SO

Hasurat s-a reprezentat starea activa a unui task, a S.O. sau a CANAL-ului. *** - reprezinta starea blocata a unui task, adica starea in care acesta nu poate fi executat, fiind in asteptarea unei resurse (pentru exemplul dat, resursa este un canal I/E). ------ reprezinta starea de intrerupere a unui task. Initial, la pornirea sistemului, se executa programe specifice S.O. Acesta, va da la un moment dat, controlul primului program gata de executie, adica taskului T3. La momentul (1), taskul T3 initiaza o operatie de I/E. Dupa ce transmite canalului toti parametrii necesari executarii operatiei de I/E, T3 trece in starea blocat pentru ca asteapta rezultatele operatiei de I/E initiate. Aceasta conduce la preluarea controlului de catre S.O., care va selecta acum taskul T1 (task care are prioritate maxima in acest moment) caruia ii va da controlul. La momentul (2) canalul lanseaza o intrerupere catre procesor indicand incheierea operatiei de I/E initiata de taskul T3 ceea ce duce la suspendarea taskului T1 aflat in executie (trecerea lui in starea intrerupt) controlul preluandu-l S.O., care trece la o subrutina de tratare a intreruperii sosite. Dupa acceptarea si tratarea intreruperii, taskul T3 trece din starea blocat in starea intrerupt. Aceasta inseamna ca, din acest moment, executia taskului T3 poate fi reluata imediat ce se incheie executia taskurilor de prioritate superioara.

Dupa terminarea tratarii intreruperii, la momentul (3) se reia executia taskului T1 pentru ca acesta este, in acest moment, de prioritate maxima. La momentul (4) si taskul T1 lanseaza o operatie de I/E, dupa care trece in starea blocat, redand controlul S.O. Acesta va lansa in executie la momentul (5) taskul cu prioritate maxima in acel moment, in cazul nostru taskul T2. Dupa terminarea operatiei de I/E, canalul trimite, la momentul (6), un semnal de intrerupere, care determina trecerea taskurilor T1 si T2 in starea de intrerupere, controlul procesorului fiind preluat de S.O. Acesta trece la subrutina de tratare a intreruperii generate de canal si, dupa incheierea tratarii acesteia, da controlul taskului T1 care are acum prioritate maxima. Terminarea executiei taskului T1 determina reactivarea S.O. (momentul (7)), care va da controlul taskului T2, care la terminarea executiei (momentul (8)) reda controlul S.O. Acesta reactiveaza taskul T3, iar dupa terminarea acestuia (momentul (9)), controlul este preluat de S.O. Din acest exemplu, se vede clar ca in cazul programarii paralele, un task este un ansamblu indivizibil program-procesor. In cadrul oricarui fel de executie paralela exista doua categorii de taskuri peste un program dat: taskuri disjuncte sau independente si taskuri care interactioneaza (sau care coopereaza). Doua sau mai multe taskuri se numesc disjuncte daca nu schimba informatii intre ele sau daca nu utilizeaza resurse (zone de memorie, periferice etc.), in comun. In caz contrar, se spune ca ele interactioneaza. Evolutia unui program alcatuit numai din taskuri disjuncte este unica indiferent de ordinea de executie a taskurilor. Dar, in cazul unei executii pseudo-paralele a doua sau mai multe taskuri peste un program dat, avem de-a face, in general, cu taskuri care interactioneaza. Evolutia unui program compus din astfel de taskuri nu este unica, ea depinzand de modul de planificare al taskurilor spre executie, precum si de timpul de executie al acestora. Pentru obtinerea unei evolutii dorite a programului, e necesara o programare foarte atenta care sa permita realizarea interactiunii corecte intre taskurile componente. 2.6 Gestiunea memoriei

Alaturi de procesor, memoria constituie o resursa fizica fundamentala a oricarui calculator numeric. Distingem: memoria principala sau operativa - MO reprezentand memoria interna a sistemumlui de calcul si memoria secundara sau externa. Se stie ca nici un program nu poate fi executat daca el nu se afla depus in memoria operativa. Tinand cont de lungimea, in general, mare a programelor de aplicatie in timp real, de obicei, acestea nu sunt integral rezidente in memoria interna. Din aceasta cauza, se impune ca, partial sau total, programul sa fie inmagazinat pe un suport extern de memorie, de regula, disc magnetic. Dupa cum s-a aratat, fiecare program de aplicatie poate fi privit ca o reuniune de taskuri care interactioneaza intre ele. Pentru a putea fi executat, la un moment dat, un task trebuie sa fie complet incarcat in memoria interna. Taskul trebuie sa aiba alocata suficienta memorie, atat pentru el, cat si pentru datele pe care le vehiculeaza. Rezulta ca sistemul de operare trebuie sa dispuna de un mecanism special care sa aloce memorie interna diferitelor taskuri care sunt activate la un moment dat. Deoarece mai multe taskuri pot indeplini conditiile de activare, la un moment dat, acestea cer sa li se aloce spatiu in memoria interna. Avand in vedere ca memoria are o capacitate limitata, gestiunea memoriei presupune introducerea unor tehnici de plasare si inlocuire in memoria operativa a programelor si datelor aflate pe suporturi de memorie secundara. Alocatorul de memorie trebuie sa rezolve problema schimbului de informatie intre memoria operativa si memoria secundara in mod automat, printr-o tehnica de dute-vino (swapping) si sa determine in orice moment cum trebuie distribuita informatia in memorie, in scopul optimizarii utilizarii ei. Componentele sistemului de operare prevazute pentru gestiunea memoriei fac parte din suportul de executie a programelor si sunt situate deasupra suportului de gestiune a unitatii centrale. Prin spatiu de adresare se intelege totalitatea numerelor de adresa referite intr-un program. In timpul executiei programului, fiecarei variabile din program ii va fi asociata o anumita adresa din memoria operativa. Gestiunea memoriei include doua operatii esentiale: - adresarea memoriei;

- protectia memoriei. Adresarea memoriei consta din procedee prin care se realizeaza asocierea intre un element al spatiului de memorie si o adresa efectiva din memoria operativa (un element al spatiului de adresare). Protectia memoriei consta din acele procedee care garanteaza utilizarea corecta a memoriei operative de catre toate taskurile aflate in executie la un moment dat. Gestiunea memoriei in sistemele cu monoprogramare In astfel de sisteme, la un moment dat, in memoria interna este incarcat si se executa un singur task, celelalte taskuri aflandu-se pe suportul de memorie externa (disc magnetic). In principiu, memoria operativa este impartita in trei zone distincte, Fig. 4.3. Zona rerervata sistemului de operare - SO Spatiul pentru programele utilizator Fig. 2.3. Neutilizat

In zona rezervata sistemului de operare (SO) sunt plasate modulele rezidente ale SO sau anumite module folosite temporar. Restul memoriei operative este disponibila programelor utilizatorului. Suportul software pentru gestiunea memoriei in aceste sisteme este foarte redus. De regula se verifica daca programele utilizator planificate pentru executie nu depasesc capacitatea memoriei operative disponibile in sistem (capacitatea MO - capacitatea zonei destinate SO). Daca se constata depasirea capacitatii disponibile, se va emite un semnal de eroare, iar lucrarea respectiva se va abandona. Mecanismele de protectie a memoriei constau din procedee relativ simple prin care se permite citirea informatiei din zona aferenta SO si interzicerea operatiei de a inscrie informatii in aceasta zona. Sistemele de operare de acest tip se numesc monitor sau supervizor. Functiile unui asemenea SO sunt: 1. - Asigurarea continuitatii incarcarii sistemumui. Aceasta inseamna ca in momentul in care se termina executia unui task, controlul este preluat de supervizor, care initiaza executia taskului celui mai prioritar in acel moment, care preia si controlul. Daca taskul aflat in executie este intrerupt (de un task mai prioritar), SO va suspenda executia taskului curent si acesta, impreuna cu informatia aferenta contextului cand a fost intrerupt, va fi imediat transferat pe un suport de memorie externa, in memoria operativa incarcandu-se noul task ce urmeaza a fi executat. Reluarea executiei taskului intrerupt se va face, dupa reincarcarea acestuia in memorie, din punctul in care a fost intrerupt. 2. - Initierea si achitarea operatiilor de intrare-iesire solicitate de programele utilizator. 3. - Punera la dispozitie, pentru programele utilizator, a unor rutine standard frecvent utilizate. Singura cale de a obtine accesul in zona aferenta SO de catre programele utilizator consta in apelul unor rutine ale SO. Pprincipalul avantaj al acestei metode consta in simplitatea SO si a spatiului de memorie mic ocupat de acesta, precum si in faptul ca se dispune pentru executia taskului curent de intregul spatiu al memoriei disponibile. Dezavantajul metodei il constituie timpul de raspuns mare datorat comutarilor frecvente intre taskuri sau de la un program la altul, deoarece transferul intre memoria interna si memoria externa cere mult timp. O metoda de a elimina acest dezavantaj consta in desemnarea unor taskuri critice pentru care se impune un timp de raspuns minim, care raman permanent intr-o zona protejata a memoriei interne. De asemenea, utilizatorul are la dispozitie un mecanism prin care va putea executa programe, uneori cu mult mai mari decat spatiul de adrese fizice disponibile. Acest mecanism se numeste metoda inlantuirii si suprapunerii (overlay) si consta in suprapunerea unor module de program. In acest caz, un program aplicativ sau un task aflat in executie controleaza el insusi incarcarea de pe suportul extern a unor module de program sau taskuri. Incarcarea se face la momente de timp bine definite impuse de evenimente externe sau interne, noile taskuri aducandu-se in memoria interna in zona proprie a programului apelant, putand sa-l acopere partial sau total. Rezulta ca programul de aplicatie preia atat functia de planificare a executiei taskurilor, cat si de gestiune a memoriei interne, substituindu-se SO. Desi aceasta metoda presupune o complicare a programului de

aplicatie, totusi este foarte utila pentru aplicatii de complexitate mica si medie si la care timpii de raspuns au valori foarte critice, precum si in cazul sistemelor cu divizarea timpului. Dezavantajul esential al monoprogramarii este acela ca existand la un moment dat un singur program in memorie, nu poate fi utilizat paralelismul intre efectuarea operatiilor de intrare-iesire si operatiile de prelucrare propriu-zise, ceea ce conduce la un timp de lucru global mult mai mare si un factor redus de utilizare a resurselor. Cu toate acestea, aceasta tehnica este foarte utilizata, mai ales, in cazul unor calculatoare de putere mica si medie destinate prelucrarii unor lucrari cu caracter tehnico-stiintific. Astfel de lucrari ocupa un timp indelungat procesorul cu efectuarea unor operatii aritmetice si logice complexe ceea ce face sa se resimta mai putin influenta timpului necesar schimbului informatiei intre MO si memoria externa. Gestiunea memoriei in sistemele cu multiprogramare Multiprogramarea a fost introdusa pentru cresterea gradului de utilizare a procesorului prin exploatarea paralelismumui intre activitatea procesorului si activitatea dispozitivelor de intrare- iesire. Multiprogramarea presupune existenta simultana in memoria interna a mai multor taskuri si executia lor paralela prin mecanismul multitasking. Comutarea intre taskuri se realizeaza sub controlul SO in functie de prioritatile taskurilor si de evenimentele ce au loc in proces. Existenta mai multor programe in memoria operativa presupune impartirea acesteia in zone distincte numite partitii sau regiuni. Situatia alocarii memoriei la un moment dat, intr-un sistem cu multiprogramare, se poate reprezenta ca in Fig. 4.4.

Zona rezervata sistemului de operare - SO Taskul 1 Neutilizat


Fig. 2.4. Partitia 1

Taskul 2 Neutilizat Taskul 3 Neutilizat

Partitia 2

Partitia3

Se observa ca, si in acest caz, o anumita zona de memorie va fi alocata necesitatilor SO. Fiecare partitie va fi formata dintr-o zona utila in care se incarca programele si datele aferente unui task si o zona neutilizata. In ceea ce priveste protectia memoriei, apar doua aspecte: 1. - Ca si in cazul monoprogramarii este necesar ca programele utilizator sa nu afecteze in nici un fel informatiile din zona SO. 2. - Se impune ca executia unui program (task) sa nu afecteze in nici un fel celelalte programe (taskuri) cu care coexista in memorie. Un mecanism usor de implementat care sa raspunda cerintelor de mai sus il reprezinta mecanismul cheie de protectie - cheie de acces. Conform acestui mecanism, fiecarei partitii i se asociaza, utilizand mijloace hardware, o cheie de protectie. Cand procesorul este alocat unui program (task), campul din tabela de stare a taskului ce contine cheia de acces la memorie va fi actualizat corespunzator partitiei programului curent aflat in executie. In timpul executiei, la fiecare acces la memorie se verifica egalitatea cheii de acces cu cea a cheii de protectie, accesul fiind permis numai in partitiile unde se inregistreaza egalitatea. Mecanismul cheie de protectie - cheie de acces poate fi extins usor si la canalele de intrare-iesire. Daca memoria operativa este divizata in partitii inainte de executia oricarei lucrari, se spune ca lucram cu partitii statice (fixe). In acest caz dimensiunea partitiei este fixata inca din etapa de generare a SO. Intr-o asemenea organizare, un program (task) dintr-o partitie este executat pana in momentul in care va initia o operatie de intrare-iesire. Evident ca cel care initiaza propriu-zis operatia de intrare-iesire este SO. Dupa initierea operatiei de intrare-iesire, SO va trece controlul unui alt task rezident in alta partitie a memoriei si care dispune de toate resursele necesare cu exceptia procesorului. La fel se petrec lucrurile si in cazul in care un task este intrerupt de un task mai prioritar sau ca urmare a aparitiei unui eveniment in

proces: SO va da controlul taskului mai prioritar sau se trece la rutina de tratare a intreruperii solicitate. Daca intr-o faza a lucrarii cantitatea de memorie solicitata depaseste cantitatea de memorie ce poate fi pusa la dispozitie intr-o partitie, intreaga lucrare se abandoneaza. Modul de alocare a memoriei cu partitii fixe este indicat in situatia in care se cunosc dimensiunile programelor (taskurilor) si zonele de memorie ocupate de datele pe care acestea le vehiculeaza. In acest caz partajarea memoriei se va face in functie de necesitati, obtinand deci o buna utilizare a memoriei. Daca partitiile sunt create nu la generarea sistemului, ci chiar in timpul executiei lucrarii, inaintea inceputului fiecarei faze a lucrarii, se spune ca sistemul de calcul lucreaza cu partitii dinamice. In aceasta situatie SO poate ajusta dimensiunea partitiilor in functie de necesitatile curente. Uneori aceste modificari se realizeaza chiar in timpul executiei unor programe prin extensia sau reducerea memoriei alocate acestor programe. SO poate modifica si numarul partitiilor existente la un moment dat in memorie. Aceste apecte impun ca SO sa detina informatii detaliate despre organizarea memoriei sub forma a doua tabele: una, pentru partitiile alocate si alta, pentru partitiile libere. Informatiile ce se pastreaza in aceaste tabele se refera la dimensiunile partitiilor, adresa primei locatii a partitiei, rectrictiile de acces la fiecare partitie. Cele mai cunoscute procedee de alocare dinamica a memoriei sunt: procedeul FIRST FIT (procedeul primei partitii) - eficient in cazul programelor de dimensiuni mari si procedeul BEST FIT (procedeul celei mai bune partitii) - specific in cazul unor programe mici si cu o mare diversitate. Alte algoritme de alocare dinamica a memoriei sunt: algoritmul injumatatirii (BUDDY SYSTEM), care impune ca fiecare partitie libera sa aibe o dimensiune egala cu o putere a lui 2, algoritmul numerelor lui Fibonacci, care presupune o divizare a memoriei proportionala cu numerele din sirul lui Fibonacci etc. Deoarece alocarea dinamica a memoriei duce la aparitia unor fragmente de memorie neutilizate, in general de dimensiuni mici, ceea ce duce la amanarea introducerii in executie a unor lucrari noi pana la terminarea unei lucrari in curs de executie ce elibereaza o partitie suficienta de memorie, este necesar ca, periodic, aceste regiuni libere sa fie combinate intr-o regiune mai mare, operatie numita compactare sau recompactare a memoriei. Operatia este foarte costisitoare deoarece presupune deplasarea programelor in memorie, cu modificarea tuturor adreselor (mai putin adresele porturilor dispozitivelor de intrare-iesire) si se realizeaza printr-un mecanism comun software-hardware. Principalul avantaj al alocarii dinamice, in special in cazul folosirii programelor relocabile (adica programe ce contin adrese relative dupa faza de editare a legaturilor) il constituie eliminarea fragmentarii memoriei, cea ce duce la o utilizare mult mai eficienta a MO si la un grad superior de multiprogramare. Dezavantajul consta in folosirea unor componente hardware suplimentare, reducerea vitezei de lucru datorita timpului necesar pentru calculul adreselor efective si cresterea timpului efectiv de lucru datorita timpului mare necesar compactarii memoriei, in special daca aceasta operatie se realizeaza frecvent. Mentionam ca metoda este mai putin utilizata in cazul SO cu divizarea timpului. Gestiune memoriei operative prin paginare Daca se renunta la cerinta ca o partitie sa fie contigua si se prevad dispozitive hardware necesare, se obtine o solutie la fragmentarea memoriei si anume gestiunea memoriei prin paginare. Conform acestei metode, spatiul de adresare al fiecarui program se considera divizat in parti egale numite pagini; de asemenea, MO se considera divizata in zone de aceeasi dimensiune numite blocuri de memorie sau cadre-pagina. Fiecarui program (task) i se aloca un numar intrg de astfel de blocuri. Alegerea dimensiunii blocului este o problema de optimizare. Daca blocurile sunt prea lungi, se simplifica activitatea de gestiune, dar poate apare fenomenul de utilizare nerationala a memoriei. Daca blocurile sunt prea mici, eventualul castig de memorie este platit prin complexitatea tabelelor de pagina si a programelor de gestiune a memoriei. 2.7 Gestiunea proceselor (taskurilor) si a procesorului

Se stie ca procesorul sau, mai general, unitatea centrala reprezinta principla resursa a oricarui calculator. Orice program (task) destinat prelucrarii datelor apeleaza la serviciile procesorului. Analizam cazul unui sistem de calcul monoprocesor. In aceasta situatie, in cazul multiprogramarii, la un moment dat, mai multe taskuri din componenta unui program pot solicita resursele unitatii centrale. Apar, deci, conflicte pentru utilizarea procesorului. Din punct de vedere al organizarii functionale interne a unui calculator numeric, unui task ii corespunde un proces. Fiecare proces are asociate o serie de resurse care ii conditioneaza desfasurarea si este

reprezentat in sistemul de operare printr-o structura de date numita bloc de comanda a procesului (taskului). Un bloc de comanda a procesului (taskului) va reflecta starea procesului (taskului) si va contine toate informatiile necesare pentru a relua procesul (taskul) din punctul in care a fost intrerupt. Cu mici diferente de la un sistem de operare la altul, un bloc de comanda a procesului (taskului) va contine: - identificatorul procesului (taskului); - starea procesului (taskului); - copia registrelor generale la suspendarea procesului; - informatii despre resursele alocate procesului. Observatie: Modul in care este creat un proces (task) este specific fiecarui sistem de operare. Taskurile care compun o aplicatie se pot afla in una din urmatoarele trei stari: NEINSTALAT, INACTIV sau ACTIV, Fig. 4.5. 5 BLOCAT (BLOCKED) Cerere de terminare 9 fortata (din alt task) 7 6 GATA DE EXECUTIE (READY) 2 4

IN EXECUTIE (RUN)

Cerere de 1 intrare in executie (din alt task)

8 Cerere de terminare fortata (din alt task)

ACTIV

INACTIV (INACTIVE) Instalare Stergere

NEINSTALAT Fig. 2.5. Un task ACTIV poate fi, la rindul lui, in una din urmatoarele substari: BLOCAT (BLOCKED), GATA DE EXECUTIE (READY) sau IN EXECUTIE (RUN). Un task neinstalat este un task creat rezident pe un suport extern sau in memoria interna a calculatorului, dar care nu a fost inca adus la cunostinta sistemului de operare (EXECUTIVULUI). Un task creat este facut cunoscut sistemului de operare prin operatia de instalare, in urma careia el este trecut automat in starea INACTIV. Un task se afla in starea INACTIV daca este instalat, dar nu este planificat pentru executie. Prin instalare se creeaza si i se aloca taskului un vector de stare sau un bloc de control al taskului care reprezinta materializarea taskului in sistem si care contine informatiile specificate mai sus. Vectorii de stare ai taskurilor sunt grupati intr-o tabela a taskurilor care este folosita de sistemul de operare cu ocazia instalarii si distrugerii (stergerii) taskurilor, precum si pentru efectuarea schimbarilor survenite in starea taskurilor pe parcursul duratei lor de existenta. Taskului i se atribuie un nume sau un numar care permite sistemului de operare si altor taskuri sa-l desemneze fara ambiguitate pe toata durata lui de existenta. Un task poate reveni in starea NEINSTALAT numai din starea INACTIV prin operatia de stergere (sau distrugere) a lui, dezafectindu-i-se vectorul de stare. Un task pentru care se face o cerere de intrare in executie trece din starea INACTIV in starea ACTIV si anume in substarea READY, tranzitia 1, adica are indeplinite toate conditiile si poate astfel concura la ocuparea procesorului. Momentul trecerii unui task in substarea GATA DE EXECUTIE nu poate fi prevazut cu exactitate de catre programator, acest moment fiind functie de complexitatea aplicatiei si de modul in care

se face planificarea taskurilor pentru intrarea lor in executie. Precizam ca planificarea taskurilor pentru executie este realizata de un modul al sistemului de operare numit planificator (SCHEDULER). Trecerea unui task in substarea IN EXECUTIE (RUN) se face numai din substarea READY, tranzitia 2. Exista doua tehnici de baza pentru realizarea planificarii taskurilor spre executie: 10. Procedeul round-robin, prin care taskurile asezate intr-o coada de asteptare sunt executate succesiv, fie pina la terminarea lor normala, fie un interval (cuanta) de timp t bine determinat. Strategia de administrare a cozii este de tip FIFO (First In - First Out : Primul venit - Primul iesit). Dupa ce un task a fost executat, acesta este trecut in coada de asteptare si este lansat in executie taskul urmator. Daca taskul nu se termina in timpul alocarii curente, el este trecut prin coada de asteptare de n ori, unde n este cel mai mic intreg care satisface relatia t n t unde t este cuanta de timp alocata rularii curente a unui task, iar t este timpul de executie al taskului. De obicei, parametrul t se alege astfel incat majoritatea interactiunilor utilizator-sistem sa se termine intr-o singura cuanta (de regula de ordinul milisecundelor). Se observa ca, acest algoritm intrerupe un task in curs de executie indiferent daca la epuizarea cuantei de timp acordate taskul respectiv s-a terminat sau nu. 20. Procedeul dupa prioritati, prin intermediul caruia fiecarui task ii este atribuit un indicator de importanta materalizat printr-un nu numar numit prioritate, iar dintre taskurile gata de executie, la un moment dat, care concura la ocuparea procesorului, sistemul de operare va aduce IN EXECUTIE taskul cu prioritatea cea mai mare la acel moment. Observatii: 1. In cazul EXECUTIVELOR care permit ambele moduri de planificare a taskurilor pentru executie, procedeul round-robin se aplica taskurilor de aceeasi prioritate. 2. Exista sisteme de operare evoluate care ofera posibilitatea de activare a taskurilor in conditii de criza de timp si care dispun de proprietatea remarcabila de crestere automata a prioritatii unui task daca acesta nu a fost executat intr-un anumit interval de timp. 3. Este evident ca pe un sistem de calcul monoprocesor, la un moment dat, un singur task se afla IN EXECUTIE. Trecerea unui task dintr-o stare in alta se poate realiza, de asemenea, in doua moduri: 10. Prin intermediul intreruperilor determinate de evenimentele interne sau externe generate prin intermediul sistemului de intreruperi, contextul comutarii fiind determinat de nivelul intreruperii si de subrutina de tratare a acesteia. Evenimentele ce sunt luate in considerare de sistem sunt: - intreruperi de la procesul condus; - intreruperi de la ceasul de timp real; - intreruperi generate de dispozitivele de intrare-iesire; - intreruperi initiate de operator de la COP; - terminarea sau suspendarea executarii unui task activ. 20. Prin directive (cereri de servicii) catre sistemul de operare (EXECUTIV) din taskul care se afla in executie, contextul comutarii fiind determinat de tipul directivei si de parametrii acesteia. Un sistem de operare in timp real trebuie sa permita ambele procedee de comutare a taskurilor, aceasta si datorita faptului ca directivele folosesc implicit sistemul de intreruperi al microprocesorului. Mai mult, un EXECUTIV de timp real este necesar sa fie insotit de un MONITOR care sa constituie interfata intre operator si programul ce reprezinta aplicatia de conducere si care sa contina comenzi avand acelasi efect asupra taskurilor ca si directivele. Astfel, prin intermediul MONITORULUI, operatorul se poate informa asupra starii taskurilor, poate realiza, daca este necesar, modificarea starii acestora, actiuni necesare, mai ales, in faza de dezvoltare si depanare a programului. Celelalte tranzitii ale unui task dintr-o stare in alta au loc in urmatoarele conditii: - Tranzitia 3 din substarea RUN in starea INACTIV apare in mod logic (sau normal) la terminarea taskului. - Tranzitia 4 din substarea RUN in substarea READY se realizeaza in doua situatii: a) - taskul curent este intrerupt de un alt task, de un task critic, mai prioritar, aparut in conditii de context extern sau intern;

b) - in cazul modului de prelucrare a taskurilor in regim de time sharing (cu divizarea timpului), cand cuanta de timp alocata executiei taskului curent s-a epuizat, desi el dispune in continuare de toate resursele necesare executiei sale. - Trecerea din substarea RUN in substarea BLOCKED, tranzitia 5, se realizeaza in situatia in care taskul aflat in executie este intrerupt pentru indeplinirea uneia dintre urmatoarele conditii: a) - terminarea unei operatii de intrare-iesire solicitata de task; b) - aparitia unui eveniment extern; c) - trecerea unui anumit interval de timp. - Un task trece din substarea BLOCKED in substarea READY, tranzitia 6, cand cauzele care au produs blocarea executiei taskului au fost inlaturate, adica sunt indeplinite conditiile: a) - s-a incheiat operatia de intrare-iesire initiata de task; b) - s-a eliberat o zona de memorie interna suficienta pentru a permite executia taskului; c) - a avut loc evenimentul extern asteptat; d) - a expirat intervalul de timp de asteptare. - Tranzitia 7 din substarea READY in substarea BLOCKED apare in situatia cand un task ce era gata de executie este trecut in substarea BLOCAT de un task aflat in executie, sau nu mai poate fi executat din considerente ca nu mai dispune de suficienta memorie interna. - De asemenea, un task in executie poate trece, prin terminare fortata, in starea INACTIV atat taskuri aflate in substarea READY, tranzitia 8, cat si taskuri aflate in substarea BLOCKED, tranzitia 9. Observatie: Prin terminare fortata, unui task activ i se suspenda toate conditiile de asteptare si i se retrage orice posibilitate de alocare a unei resurse. Trebuie facuta mentiunea ca daca un task pierde controlul procesorului ramanand in starea ACTIV, reluarea executiei lui se va face din punctul in care a fost intrerupt. Pentru ca reluarea executiei sa se faca in contextul intreruperii taskului este necesar ca, in momentul intreruperii unui task, sistemul de operare sa asigure salvarea intregului context aferent taskului, adica continutul registrelor generale ale unitatii centrale, continutul registrului indicatorilor de stare etc. Daca comutarea starii taskurilor se face sub controlul unui EXECUTIV de timp real prin intermediul directivelor, in urma lansarii unei directive, controlul procesorului este transferat de la taskul aflat in executie (taskul care a lansat directiva) catre EXECUTIV pentru ca acesta sa satisfaca imediat cererea continuta in directiva. Din punct de vedere al returnarii controlului de catre EXECUTIV catre taskurile componente aplicatiei distingem doua categorii de directive: - Directive pe care EXECUTIVUL le satisface returnand apoi controlul taskului care a dat directiva (care a lansat cererea de servicii); - Directive care cer o serie de servicii EXECUTIVULUI, dupa satisfacerea carora acestea nu mai returneaza controlul taskurilor apelante ci, determina o noua replanificare (rescheduling) a taskurilor pentru executie. EXECUTIVUL va aduce in executie taskul gata de executie cu prioritatea cea mai mare. In acest caz, se spune ca directiva declara eveniment semnificativ. Structura generala a unui task executat sub controlul unui EXECUTIV de timp real este prezentata in Fig 4.6. Secventa de program de initializare

Fig. 2.6.

Secventa de program care realizeaza functia pentru care a fost creat taskul

Se executa ciclic, in bucla infinit

Directiva (apel de servicii catre EXECUTIV ) si abandonare procesor

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