Sunteți pe pagina 1din 14

Cap.4.

Sisteme de operare ín timp real

Un sistem de operare este o colecþie organizatá de programe numite programe de sistem, care:
a) realizeazá o interfaþá íntre utilizator ßi sistemul de calcul extinzänd setul de operaþii executate de
calculator, minimizänd efortul de programare a calculatorului ßi optimizänd interacþiunea om-calculator;
b) gestioneazá resursele calculatorului, ín sensul optimizárii utilizárii lor.
Ín funcþie de complexitatea sistemului de calcul, programele de sistem se numesc:
- program monitor;
- program executiv;
- program de comandá;
- sistem de operare.
Ín general, sistemele de calcul mici ßi, ín special, cele dedicate dispun doar de un monitor care
asigurá un minim de servicii utilizatorului, cum ar fi: vizualizarea conþinutului memoriei, modificarea
conþinutului memoriei RAM, vizualizarea conþinutului registrelor ßi a indicatorilor de stare (condiþie) precum
ßi modificarea valorilor lor, compararea unor zone de memorie etc.
Sistemele de calcul complexe lucreazá sub comanda unui sistem de operare.

4.1. Funcþiile unui S.O.


Principalele funcþii asigurate de S.O. actuale sunt:

4.1.1. Funcþia de asistenþá a utilizatorului. Obiectivele urmárite sunt:


a) Furnizarea unui limbaj de comandá care permite introducerea de cátre utilizator a unor parametri
ßi opþiuni pentru utilizarea resurselor fizice ßi logice ale sistemului. Realizarea acestei funcþiuni se face cu
ajutorul unui interpreter de comenzi.
b) Furnizarea unor programe (editoare de legáturi) care realizeazá legarea diferitelor module ale unui
program sau a mai multor programe de utilizator ßi a unor subrutine din biblioteci de programe íntr-un singur
program executabil. Aceasta permite o mare flexibilitate ín programare, pentru cá, diversele module ale
programului pot fi iniþial scrise ín limbaje diferite, care sá asigure o programare optimá pentru modulul
respectiv.
c) Existenþa unor sisteme de gestiune a bibliotecilor de programe destinate ínscrierii, pástrárii,
actualizárii ßi eliminárii programelor prezente;
d) Furnizarea unui set de macroinstrucþiuni care sá permitá utilizatorului folosirea ín programele
proprii a unor funcþii specifice S.O. (de exemplu subrutine de lucru cu dispozitivele de I/E).
e) Furnizarea unor programe utilitare pentru editarea programelor de utilizator ßi pentru manipularea
informaþiei prezente sub formá de fißiere, programe de copiere a fißierelor etc.
f) Furnizarea unui limbaj de control de tip conversaþional, de dialog íntre operator ßi sistem. De
obicei, S.O. au un limbaj de comandá de tip cu autodocumentare datoritá unor puternice funcþii HELP pe
care le au implementate.
4.1.2 Funcþia de asistenþá a execuþiei. S.O. trebuie sa permitá:
a) Izolarea logicá a dispozitivelor defecte ßi asigurarea condiþiilor pentru o eventualá execuþie a
lucrárilor cu ajutorul resurselor rámase utilizabile.
b) Testarea automatá ßi diagnosticarea defectelor.
c) Afißarea automatá a informaþiei de stare.
S.O. sunt dinamice, ín sensul cá, ín permanenþá pot fi adáugate noi funcþii sau rescrise programele ce
realizeazá funcþii deja implementate.
4.1.3 Funcþia de gestiune. Principala sarciná a unui S.O. este aceea de gestiune a resurselor
sistemului de calcul: unitatea centralá, memoria principalá (interná), perifericele de I/E, bibliotecile ßi
fißierele de date. Programele pentru gestiune ale unui S.O. pot fi ímpárþite ín 4 mari categorii:
1) Funcþia de gestiune a memoriei, cu urmátoarele atribute:

4-1
- þine evidenþa utilizárii memoriei, adicá permite cunoaßterea ín orice moment a zonelor de
memorie libere ßi ocupate;
- decide ce proces primeßte memorie, cänd ßi ce cantitate de memorie i se alocá. Alocarea
memoriei se face atät pentru pástrarea programului corespunzátor procesului cät ßi pentru necesitáþile de
execuþie.
- asigurá tehnici corespunzátoare de protecþie a memoriei;
- dezalocá resursa cänd procesul s-a íncheiat sau nu mai are nevoie de o anumitá cantitate de
memorie.
2) Funcþia de gestiune a procesorului ßi proceselor:
- þine evidenþa procesorului precum ßi evidenþa stárii proceselor;
- decide prioritatea ín utilizarea procesorului, ín funcþie de prioritatea lucrárilor ce trebuie
executate;
- planificatorul lucrárilor alocá resursele procesorului necesare realizárii unui proces (lucrare);
- elibereazá resursa cänd procesul nu mai are nevoie de procesor sau cänd s-a depáßit o anumitá
cuantá de timp alocatá pentru utilizare.
3) Funcþia de gestiune a dispozitivelor periferice are rolul de a aloca resursele ßi a iniþializa operaþiile
de I/E precum ßi de a dezaloca aceste resurse cänd operaþiile de I/E s-au íncheiat.
4) Funcþia de gestiune a informaþiei:
- þine evidenþa resurselor (fißierelor) ßi localizarea acestora pe suporturi magnetice;
- oferá rutinele de acces la informaþie;
- alocá ßi dezalocá informaþie prin funcþia de deschidere ßi respectiv de ínchidere a fißierelor.
Deci, putem spune cá:
- funcþia de gestiune trebuie sá prevadá funcþiile de control automat prin rutine specializate asupra
tuturor resurselor fizice ßi logice ce apar;
- sá asigure o cät mai mare independenþá a programelor utilizator faþá de particularitáþile sistemului
pe care s-a implementat S.O.;
- sá rezolve toate problemele de control al funcþionárii sistemului printr-un procedeu performant de
tratare a íntreruperilor (utilizarea íntreruperilor permite un dialog foarte flexibil íntre U.C. ßi mediul extern,
permiþänd semnalarea promptá a diverselor evenimente interne sau externe);
- sá permitá modificarea configuraþiei de echipamente periferice, fárá ca aceasta sá afecteze
programele deja implementate.
Din punct de vedere al utilizatorului, S.O. apare ca o interfaþá íntre programele sale de aplicaþii ßi
echipamentele (elementele) sistemului de calcul, care poate fi reprezentatá printr-o structurá ierarhicá de
forma din Fig.4.1.
Se observá cá accesul direct la resursele sistemului de calcul este puternic limitat de existenþa a douá
nivele intermediare: procesorul de limbaj ßi S.O. Fiecare nivel introduce funcþii noi inexistente la nivelele
inferioare definind o maßiná virtualá corespunzátoare acelui nivel.

Program aplicaþii

Procesor limbaj
S.O.

Sistem de calcul

Fig. 4.1.

4.2. Structura S.O.


Componentele ín care se descompune un S.O. sunt situate la diferite nivele ierarhice, avänd, de
exemplu, structura din Fig.4.2. Plasarea unei funcþii a S.O. pe unul din cele trei nivele se realizeazá pe baza
depártárii funcþiei respective de echipamentul fizic. Acest aspect este foarte evident ín toate calculatoarele
care folosesc S.O. ßi, ín special, pentru S.O. scrise ín limbaje evoluate.

4-2
1 - Nucleu
2 - Suport de execuþie a programelor
1 2 3
3 - Suport de pregátire a programelor

Fig. 4.2.
S.O. pot fi scrise íntr-un limbaj de nivel evoluat numai la nivelele superioare, care nu interacþioneazá
direct cu maßina fizicá.
Existenþa nucleului este obligatorie ín orice S.O. Nucleul conþine funcþiile privind tratarea
operaþiilor de I/E la nivel fizic, tratarea íntreruperilor, tratarea sincronizárii ßi comunicárii íntre procese, care
sunt scrise, de obicei, ín cod maßiná sau limbaj de asamblare. Funcþiile care formeazá nucleul S.O. sunt
intens utilizate de celelalte douá nivele superioare ßi, din aceastá cauzá, se implementeazá prin secvenþe de
program rezidente ín M.O. íntr-o zoná special rezervatá acestui scop.
Funcþiile de suport pentru execuþia programului sunt apelate ín timpul execuþiei unui program
printr-un procedeu asemánátor apelului macroinstrucþiunilor, adicá prin folosirea unor parametri. Nu toate
funcþiile acestui nivel sunt rezidente ín memorie, ci numai acele funcþii care sunt cel mai des utilizate, iar
celelalte se íncarcá numai ín funcþie de necesitáþi.
Nivelul superior (3) constá din programe relativ rar apelate, care permit aducerea unui program ín
starea ín care sá poatá fi executat. Programele scrise ín limbaje evoluate utilizeazá S.O. tocmai la acest nivel.
Orice acces al programelor utilizator la funcþiile de la nivelele 2 ßi 1 se realizeazá indirect (ßi din aceastá
cauzá, acest nivel se numeßte de pregátire a programelor). Apelul la componentele S.O. se realizeazá
printr-un limbaj de comandá specific S.O. respectiv.
Íntr-o succesiune normalá, un program de aplicaþie parcurge, ínainte de a fi executat, urmátoarele
etape: introducerea ín sistem, compilarea, editarea de legáturi, activarea programului. Nu este obligatoriu ca
toate lucrárile sá parcurgá toate aceste etape. Sunt lucrári la care fiecare fazá poate sá apará o datá sau de mai
multe ori.
Fiecáreia din etapele prezentate, ín S.O. íi corespund programe specifice: compilatoare, editoare de
legáturi, editoare de rapoarte pentru prezentarea rezultatelor etc.

4.3. Caracteristici ale S.O.


Modul ín care diversele S.O. implementeazá funcþiile specifice determiná atributele S.O. Punerea ín
evidenþá a acestor atribute este foarte importantá pentru cá reprezintá un mijloc obiectiv de comparare íntre
diverse S.O.
Fiecare S.O. prezintá anumite caracteristici specifice, dar pot fi puse ín evidenþá ßi cäteva
caracteristici de ordin general, valabile ín orice sistem de operare, din care putem enumera:
1) Timpul de ráspuns, calculat ca intervalul de timp íntre lansarea unei comenzi (cereri de servicii
cátre executiv) ßi achitarea acesteia de cátre sistem. Acest atribut are ín general douá componente distincte ßi
anume:
- timpul de aßteptare corespunzátor intervalului de timp pentru ca cererea sá fie luatá ín considerare;
- timpul de execuþie (timpul necesar pentru a efectua lucrárile specifice cererii).
2) Simultaneitatea utilizárii, se referá la gradul ín care un sistem poate fi utilizat ín acelaßi timp de
mai mulþi utilizatori (multiprogramare) sau sá execute simultan mai multe programe (lucrári) ale aceluiaßi
utilizator (multitasking).
3) Eficienþa, reprezintá proprietatea S.O. de a folosi ín mod optim resursele de care dispune sistemul
de calcul.
4) Partajarea ßi protecþia, caracterizeazá gradul ín care utilizatorii au posibilitatea sá utilizeze ín
comun informaþia prezentá ín sistem, modul ín care ei pot sá comunice íntre ei fárá ca execuþia programelor
specifice unui utilizator sá afecteze execuþia programelor celorlalþi utilizatori. Este necesar ca, interacþiunea
dintre utilizatori sá nu conducá la alterarea intenþionatá sau accidentalá a informaþiei.
5) Generalitatea, flexibilitatea, extensibilitatea, másoará gradul ín care un S.O. poate fi adaptat pe
alte sisteme de calcul decät sistemul pentru care a fost creat. De asemenea, indicá gradul ín care un S.O.
4-3
poate fi dezvoltat, fie prin modificarea unora din funcþiile deja implementate, fie prin introducerea de noi
funcþii ßi componente software ßi hardware fárá eforturi deosebite de programare ßi proiectare.
6) Fiabilitatea ßi disponibilitatea unui S.O. este sträns legatá de fiabilitatea íntregului sistem de calcul
ßi exprimá proprietatea sistemului de a funcþiona ín continuu, fárá a avea goluri de funcþionare din cauza
defectárii sau blocárii unor componente ale sale. Creßterea fiabilitáþii se poate face pe douá cái:
- creßterea fiabilitáþii componentelor hardware ßi software precum ßi introducerea rezervárii unor
blocuri critice;
- utilizarea unor S.O. ßi programe tolerante la defecte; aceasta ínseamná cá, ín cazul apariþiei unor
anomalii de funcþionare, S.O. asigurá ín continuare desfáßurarea activitáþii sistemului, acceptändu-se o
degradare a performanþelor ín anumite limite impuse care nu afecteazá ínsá esenþa activitáþii sistemului.
Un accent deosebit se pune pe fiabilitatea ßi disponibilitatea sistemelor ín cazul utilizárii acestora
pentru prelucrári ín timp real.
7) Transparenþa ßi vizibilitatea. Transparenþa indicá gradul ín care realizarea funcþiilor S.O. se face
fárá aportul utilizatorului. Pentru utilizator, ceea ce se aflá sub interfaþa de utilizare care i se oferá trebuie sá
fie invizibil, deci realizarea efectivá a funcþiilor S.O. trebuie sá fie invizibilá. Vizibilitatea indicá másura ín
care un utilizator poate avea acces la programele ce implementeazá anumite funcþii ale S.O. Existá situaþii ín
care, deßi nu este absolut necesar, utilizatorul are nevoie sá cunoascá anumite informaþii specifice activitáþii
S.O. pentru a putea creßte eficienþa programelor sale de aplicaþie.

4.4. Tipuri de sisteme de operare


Plecänd de la caracteristicile S.O. ßi avänd ín vedere ßi destinaþia sistemului de calcul utilizat, s-a
ajuns la urmátoarea clasificare a S.O.:
- S.O. secvenþiale;
- S.O. cu multiprogramare;
- S.O. ín timp real;
- S.O. cu prelucrare multiplá.
Un sistem de operare secvenþial permite executarea, la un moment dat, a unui singur program care
trebuie terminat ínainte de a se lua ín considerare un alt program. Principalul dezavantaj al acestui tip de S.O.
este timpul de ráspuns mare comparativ cu timpul de operare al unitáþii centrale.
Sistemele cu multiprogramare acceptá la un moment dat mai multe programe ín memoria centralá
partajatá, acestea afländu-se ín diverse stadii de execuþie. Execuþia acestor programe se realizeazá prin
multiplexarea unitáþii centrale, urmárindu-se obþinerea, la un grad de simultaneitate cät mai ridicat, a unui
timp de ráspuns cät mai mic ßi a unei eficienþe de utilizare maximá. Ín acest caz utilizatorul nu poate sá
interviná la nivelul S.O. pentru a dirija modul de execuþie a programului.
Un S.O. ín timp real este dedicat unei anumite clase de aplicaþii. Prelucrarea ín timp real presupune o
vitezá de ráspuns foarte mare pentru cá toate cererile din proces trebuie luate ín considerare imediat ce au
fost formulate.
Noþiunea de timp de ráspuns este foarte elasticá, domeniul de variaþie al acestuia fiind foarte larg ín
funcþie de domeniul de utilizare al sistemului de calcul (microsecunde pentru procese foarte rapide, päná la
ore ín dirijarea unor procese economice).
Ín general, aplicaþiile implementate pe echipamente de calcul ce funcþioneazá ín timp real sunt ín
buclá infinitá ßi presupun o baleiere permanentá a datelor sosite din proces concomitent cu calculul
comenzilor corespunzátoare, iar intervenþia din partea operatorului este minimá.
Complexitatea S.O. ín timp real este mult mai mare decät a celorlalte tipuri de S.O. pentru cá se
impun performanþe deosebite pentru a satisface íntr-un timp critic diversele cereri sosite din exterior.
Deoarece, ín multe astfel de sisteme apare problema cooperárii íntre diversele programe executate, trebuie
rezolvate probleme sofisticate privind sincronizarea ßi comunicarea íntre programe.
Un sistem de calcul dotat cu un S.O. cu prelucrare multiplá dispune de de mai multe procesoare care
pot sá execute simultan unul sau mai multe programe. Ín cazul execuþiei mai multor programe independente,
avem de-a face cu efectul de multiprogramare menþionat mai sus, dar cu performanþe mult ímbunátáþite.
Ín cazul execuþiei simultane a unui singur program de cátre mai multe unitáþi trebuie sá existe
posibilitatea de descopunere a acestui program ín párþi componente numite sarcini de program sau taskuri,
care ín timpul execuþiei trebuie sá coopereze íntre ele ín vederea atingerii obiectivului urmárit de program ín
ansamblu.
4-4
Un sistem de operare care oferá posibilitatea de a executa ín paralel (sau simultan) mai multe
programe (taskuri) care interacþioneazá íntre ele, párþi componente ale unui program dat, poartá denumirea
de S.O. cu facilitáþi multitasking.
Menþionám ínsá cá nici multiprogramarea ßi nici multitaskingul nu impun capacitatea de prelucrare
multiplá din partea sistemului de calcul, deci astfel de S.O. pot fi implementate ßi pe sisteme monoprocesor.
Sistemele de calcul destinate conducerii proceselor industriale trebuie sá posede ín mod necesar
sisteme de operare ín timp real cu facilitáþi multitasking. O particularitate esenþialá a unui astfel de S.O. este
aceea cá el trebuie sá fie accesibil utilizatorului care íi poate cere o serie de servicii ín vederea realizárii
evoluþiei dorite a programului.
Privit prin prisma utilizatorului ßi a programelor de aplicaþii, ansamblul de programe al acestui tip de
S.O. poate fi ímpárþit ín douá categorii:
- programe necesare ín faza de pregátire, elaborare ßi testare a programelor de aplicaþii (editorul de
texte, compilatorul, link-editorul, debuggerul etc.) numite, din acest motiv, ßi programe de serviciu;
- programe necesare ín etapa de conducere, care se leagá cu programele utilizatorului ín faza de
dezvoltare, formänd aplicaþia dedicatá care se implementeazá pe echipamentul de conducere.
Pentru a nu íncárca ín mod nejustificat atät din punct de vedere hardware cät ßi software
echipamentul de calcul destinat conducerii procesului industrial, dezvoltarea aplicaþiei se va face pe un alt
sistem numit sistem de dezvoltare care va conþine ambele categorii de programe.

4.5. Principiile programárii paralele


Consideraþii generale
Programarea paralelá sau concurentá este activitatea de scriere a unui program care conþine o serie de
párþi componente necesar a se afla ín execuþie ín acelaßi moment.
Orice aplicaþie ín timp real conþine astfel de operaþii paralele care reprezintá etape de execuþie
asincroná a acesteia. Aßa cum am menþionat ín capitolul anterior, párþile componente ale programului ce pot
fi executate ín paralel poartá denumirea de taskuri. Din punct de vedere al sistemului de calcul, taskul este
cea mai micá unitate de prelucrare cáreia i se atribuie o identitate.
Taskul reprezintá un program ín formá executabilá compus dintr-o succesiune de instrucþiuni
executate secvenþial ßi care realizeazá de obicei o anumitá funcþie.
Dacá un task este íncárcat ßi executat ín orice zoná a memoriei principale spunem cá taskul este
relocabil. Fiecárui task i se asociazá un indicator de importanþá numit prioritate. Alocarea prioritáþii poate fi
fixá sau dinamicá. Ín cazul prioritáþilor fixe, ínseamná cá, unui task i se alocá, ín faza de proiectare a
aplicaþiei, o prioritate ßi cá aceasta nu poate fi modificatá indiferent de evoluþia ulterioará a procesului, pe
cänd ín cazul alocárii dinamice a prioritáþii, prioritatea unui task se poate modifica pe baza anumitor criterii
prestabilite ín funcþie de evenimentele ce au loc ín proces. Alocarea dinamicá a prioritáþii este realizatá de
S.O., iar dezavantajul acestui procedeu íl constituie complexitatea sporitá a gestiunii lucrárilor (taskurilor).
Taskurile sunt activate ín funcþie de prioritáþile lor de o componentá a S.O. numitá PLANIFICATOR
(SCHEDULER)
Rutinele (ROUTINES) sunt unitáþi mai mici de program destinate tratárii rapide a unor evenimente.
Sunt activate direct de S.O. la detectarea producerii unor evenimente ín procesul industrial. Detectarea
acestor evenimente se realizeazá de regulá prin intermediul sistemului de íntreruperi al sistemului de calcul.
Subrutinele (SUBROUTINES) sunt cele mai mici unitáþi de program apelate de taskuri. Acestea pot
fi: dedicate, adicá specifice unui singur task sau comune, situaþie ín care pot fi apelate de mai multe taskuri
sau rutine. Spre deosebire de taskuri care sunt íntreruptibile, subrutinele nu sunt íntreruptibile, adicá nu se
acceptá íntreruperea activitáþii unei subrutine pentru a trece la execuþia unui alt task. Acest lucru se datoreßte
faptului cá, ín general, subrutinele implicá un timp de ráspuns foarte mic, critic sau, altfel spus, sunt asociate
unor evenimente critice.
Existá ßi aßa numitele subrutine reentrante disponibile mai multor taskuri ßi care pot fi íntrerupte
deoarece nu sunt asociate unor evenimente critice.
Vom spune cá douá taskuri sunt paralele sau concurente dacá prima instrucþiune a unui task
demareazá ínainte ca ultima instrucþiune a celuilalt task sá fi fost completatá.

4-5
Dacá sistemul de calcul (conducere) este multiprocesor, paralelismul execuþiei taskurilor poate fi
asigurat ín mod real ín sensul cá fiecare task poate fi executat de cátre un procesor. Ín acest caz, se obþine o
execuþie paralelá suprapusá ín timp, numitá ßi execuþie paralelá fizicá.
Dacá echipamentul este monoprocesor ßi dotat cu un S.O. ín timp real cu facilitáþi multitasking,
execuþia paralelá a taskurilor se va face intercalat, pe principiul distribuirii timpului unitáþii centrale íntre
taskuri ("time slicing"). La un moment dat, va deþine controlul procesorului un singur task, dar datoritá
vitezei mari de lucru a acestuia, precum ßi datoritá modului de programare se lasá impresia cá taskurile se
executá simultan, ca ßi cänd fiecare task ar beneficia de un procesor propriu - virtual, evident ceva mai lent.
Ín acest caz, se spune ca are loc o execuþie pseudo-paralelá sau o execuþie paralelá logicá.
Ín cele ce urmeazá ne vom referi la acest din urmá mod de execuþie paralelá a taskurilor, ceea ce
corespunde situaþiei mai frecvent íntälnite ín aplicaþiile de conducere ßi supraveghere automatá a proceselor.
Pentru a putea realiza acest paralelism ín prelucrarea taskurilor, arhitectura sistemelor de calcul
trebuie sá conþiná obligatoriu canale care sá execute toate operaþiile de transfer de informaþie, independent de
procesor. Procesorul va avea doar rolul de a iniþia ßi iniþializa operaþia de I/E printr-un dialog adecvat cu
canalul. Ín continuare canalul executá toate operaþiile de transfer necesare, iar ín íncheiere semnaleazá
procesorului, printr-un semnal de íntrerupere, cá ßi-a íncheiat activitatea. Aceasta presupune existenþa unui
sistem de íntreruperi bine pus la punct.
Exemplu de execuþie a taskurilor ín regim de multiprogramare
Considerám cazul unui sistem ín care existá disponibile simultan trei taskuri T1, T2, T3. Taskul T1
are prioritatea maximá, dar la iniþializarea sistemului, se presupune cá este gata pentru execuþie taskul T3.
Schematic, ocuparea de cátre cele trei taskuri a procesorului ßi activitatea S.O. ßi a canalelor de I/E
este reprezentatá ín urmátoarea diagramá.
T3 terminat
blocat t
*********
T2 1 terminat 9
t

T1 5 terminat 8
t
********
3 4 7
SO

Canal 2 6
t

Haßurat s-a reprezentat starea activá a unui task, a S.O. sau a CANAL-ului.
*** - reprezintá starea blocatá a unui task, adicá starea ín care acesta nu poate fi executat, fiind ín
aßteptarea unei resurse (pentru exemplul dat, resursa este un canal I/E).
------ reprezintá starea de íntrerupere a unui task.
Iniþial, la pornirea sistemului, se executá programe specifice S.O. Acesta, va da la un moment dat,
controlul primului program gata de execuþie, adicá taskului T3. La momentul (1), taskul T3 iniþiazá o operaþie
de I/E. Dupá ce transmite canalului toþi parametrii necesari executárii operaþiei de I/E, T3 trece ín starea
blocat pentru cá aßteaptá rezultatele operaþiei de I/E iniþiate. Aceasta conduce la preluarea controlului de
cátre S.O., care va selecta acum taskul T1 (task care are prioritate maximá ín acest moment) cáruia íi va da
controlul.
La momentul (2) canalul lanseazá o íntrerupere cátre procesor indicänd íncheierea operaþiei de I/E
iniþiatá de taskul T3 ceea ce duce la suspendarea taskului T1 aflat ín execuþie (trecerea lui ín starea íntrerupt)
controlul preluändu-l S.O., care trece la o subrutiná de tratare a íntreruperii sosite. Dupá acceptarea ßi tratarea
íntreruperii, taskul T3 trece din starea blocat ín starea íntrerupt. Aceasta ínseamná cá, din acest moment,
execuþia taskului T3 poate fi reluatá imediat ce se íncheie execuþia taskurilor de prioritate superioará.

4-6
Dupá terminarea tratárii íntreruperii, la momentul (3) se reia execuþia taskului T1 pentru cá acesta
este, ín acest moment, de prioritate maximá. La momentul (4) ßi taskul T1 lanseazá o operaþie de I/E, dupá
care trece ín starea blocat, redänd controlul S.O. Acesta va lansa ín execuþie la momentul (5) taskul cu
prioritate maximá ín acel moment, ín cazul nostru taskul T2. Dupá terminarea operaþiei de I/E, canalul
trimite, la momentul (6), un semnal de íntrerupere, care determiná trecerea taskurilor T1 ßi T2 ín starea de
íntrerupere, controlul procesorului fiind preluat de S.O. Acesta trece la subrutina de tratare a íntreruperii
generate de canal ßi, dupá íncheierea tratárii acesteia, dá controlul taskului T1 care are acum prioritate
maximá. Terminarea execuþiei taskului T1 determiná reactivarea S.O. (momentul (7)), care va da controlul
taskului T2, care la terminarea execuþiei (momentul (8)) redá controlul S.O. Acesta reactiveazá taskul T3, iar
dupá terminarea acestuia (momentul (9)), controlul este preluat de S.O.
Din acest exemplu, se vede clar cá ín cazul programárii paralele, un task este un ansamblu indivizibil
program-procesor.
Ín cadrul oricárui fel de execuþie paralelá existá douá categorii de taskuri peste un program dat:
taskuri disjuncte sau independente ßi taskuri care interacþioneazá (sau care coopereazá).
Douá sau mai multe taskuri se numesc disjuncte dacá nu schimbá informaþii íntre ele sau dacá nu
utilizeazá resurse (zone de memorie, periferice etc.), ín comun. Ín caz contrar, se spune cá ele
interacþioneazá. Evoluþia unui program alcátuit numai din taskuri disjuncte este unicá indiferent de ordinea
de execuþie a taskurilor. Dar, ín cazul unei execuþii pseudo-paralele a douá sau mai multe taskuri peste un
program dat, avem de-a face, ín general, cu taskuri care interacþioneazá.
Pentru o mai buná ínþelegere a celor spuse prezentám o serie de exemple.
Exemplul l: Fie o aplicaþie formatá din trei taskuri: T1, T2, T3 avänd urmátoarea componenþá:
Task T1 Task T2 Task T3
M1 = MAX(A,B) M2 = MAX(C,D) M = MAX(M1,M2)
Structura taskurilor este foarte simplá: T1 ßi T2 calculeazá valoarea maximá dintre douá numere A, B,
respectiv C, D, rezultatele fiind numerele M1, respectiv M2. Taskul T3 determiná maximul dintre M1 ßi M2. Se
observá imediat cá taskurile T1 ßi T2 sunt disjuncte, ordinea execuþiei lor nealteränd evoluþia ín ansamblu a
programului. Taskul T3, ín schimb, coopereazá cu taskurile T1 ßi T2 (preia valorile M1 ßi M2 de la acestea) ßi,
ca atare, el trebuie sá intre ín execuþie numai dupá terminarea execuþiei acestor douá taskuri.
Ca urmare, ordinea de execuþie a taskurilor pentru o evoluþie corectá a programului dat va fi: T1, T2,
T3 sau T2, T1, T3, oricare altá ordine de execuþie avänd ca rezultat scáparea de sub control a evoluþiei
programului.
Exemplul 2: Fie o aplicaþie formatá din douá taskuri T1 ßi T2.
Taskul T1 observá ßi contorizeazá o serie de evenimente incrementänd o variabilá CONTOR. Taskul
T2 tipáreßte ocazional numárul evenimentelor contorizate de taskul T1 ßi dupá fiecare tipárire anuleazá
variabila CONTOR:
Task T1 Task T2
Observá evenimentul Tipareßte CONTOR
CONTOR=CONTOR +1 CONTOR=0
Se observá cá cele 2 taskuri interacþioneazá íntre ele utilizänd ín comun variabila CONTOR care se
modificá ín timp.
Dacá nu se iau másuri speciale de programare, poate apare urmátoarea situaþie eronatá: presupunem
cá T1 a incrementat variabila CONTOR la 20, iar taskul T2 a tipárit aceaste cifre. Se poate íntämpla ínsá ca
ínainte ca T2 sá anuleze variabila CONTOR, taskul T1 sá sesizeze un nou eveniment ßi sá incrementeze
variabila CONTOR de la 20 la 21. Rezultá deci cá acest eveniment se va pierde, el rámänänd neraportat.
O altá situaþie, mai puþin evidentá, dar care conduce la rezultate eronate este urmátoarea:
Implementrea operaþiei CONTOR = CONTOR + 1 presupune existenþa mai multor instrucþiuni ín
cod maßiná:
- íncarcá CONTOR ín acumulator;
- incrementeazá acumulatorul;
- memoreazá conþinutul acumulatorului ín CONTOR.
Ín timp ce taskul T1 executá aceastá secvenþá, el poate fi íntrerupt de T2 ßi sá se ajungá la urmátoarea
situaþie:
4-7
Presupunem cá variabila CONTOR = 15 ßi aceastá valoare este íncárcatá ín acumulator. Considerám
cá T2 tipáreßte valoarea 15 ßi face CONTOR = 0. Ín continuare, taskul T1 aduná 1 la conþinutul
acumulatorului ßi memoreazá rezultatul 16 ín CONTOR. Rezultá deci cá au fost raportate 15 evenimente, iar
variabila CONTOR = 16 ßi nu 0 cum ar fi trebuit sá fie ín mod normal.
Exemplul 3: Se considerá 2 taskuri T1 ßi T2 care scriu fiecare cäte un mesaj pe consola operatorului
(display), folosind poziþionarea directá a cursorului ín cäte o poziþie (linie, coloaná) a consolei.

Task T1 Task T2
Poziþioneazá cursor ín (L1,C1) Poziþioneazá cursor ín (L2,C2)
Scrie MESAJ 1 Scrie MESAJ 2

MESAJ 1 ßi MESAJ 2 sunt de fapt ßiruri de caractere, iar (L1, C1) ßi (L2, C2) numere de linie ßi
coloaná pe display (uzual, un display alfanumeric are 24 de linii ßi 80 de coloane).
Dacá nu se iau másuri speciale de protecþie, se poate ajunge la urmátoarea situaþie eronatá: taskul T1
preia controlul, poziþioneazá cursorul ín linia ßi coloana (L1, C1) ßi íncepe sá tipáreascá MESAJ 1; dacá T1
este íntrerupt ínainte ca sá fie terminatá tipárirea lui MESAJ 1 ßi controlul este preluat de T2, acesta va
poziþiona cursorul pe display ín linia/coloana (L2, C2), va scrie MESAJ 2, dupá care controlul revine lui T1,
care continuá din punctul ín care a fost íntrerupt, deci continuá tipárirea lui MESAJ 1; cursorul a rámas ínsá
ín poziþia lásatá de acþiunea taskului T2 ßi tipárirea lui MESAJ 1 este astfel compromisá.

Din aceste exemple rezultá clar cá dacá nu se iau másuri speciale de programare, ín cazul taskurilor
care interacþioneazá, rezultatul nu poate fi prevázut, aceasta datoritá imposibilitáþii aprecierii momentului
cänd se face transferul controlului.
Evoluþia unui program compus din astfel de taskuri nu este unicá, ea depinzänd de modul de
planificare al taskurilor spre execuþie, precum ßi de timpul de execuþie al acestora. Pentru obþinerea unei
evoluþii dorite a programului, e necesará o programare foarte atentá care sá permitá realizarea interacþiunii
corecte íntre taskurile componente.

4.6. Gestiunea memoriei


Aláturi de procesor, memoria constituie o resursá fizicá fundamentalá a oricárui calculator numeric.
Distingem: memoria principalá sau operativá - MO reprezentänd memoria interná a sistemumlui de calcul ßi
memoria secundará sau externá. Se ßtie cá nici un program nu poate fi executat dacá el nu se aflá depus ín
memoria operativá. Þinänd cont de lungimea, ín general, mare a programelor de aplicaþie ín timp real, de
obicei, acestea nu sunt integral rezidente ín memoria interná. Din aceastá cauzá, se impune ca, parþial sau
total, programul sá fie ínmagazinat pe un suport extern de memorie, de regulá, disc magnetic. Dupá cum s-a
arátat, fiecare program de aplicaþie poate fi privit ca o reuniune de taskuri care interacþioneazá íntre ele.
Pentru a putea fi executat, la un moment dat, un task trebuie sá fie complet íncárcat ín memoria interná.
Taskul trebuie sá aibá alocatá suficientá memorie, atät pentru el, cät ßi pentru datele pe care le vehiculeazá.
Rezultá cá sistemul de operare trebuie sá dispuná de un mecanism special care sá aloce memorie interná
diferitelor taskuri care sunt activate la un moment dat. Deoarece mai multe taskuri pot índeplini condiþiile de
activare, la un moment dat, acestea cer sá li se aloce spaþiu ín memoria interná. Avänd ín vedere cá memoria
are o capacitate limitatá, gestiunea memoriei presupune introducerea unor tehnici de plasare ßi ínlocuire ín
memoria operativá a programelor ßi datelor aflate pe suporturi de memorie secundará. Alocatorul de
memorie trebuie sá rezolve problema schimbului de informaþie íntre memoria operativá ßi memoria
secundará ín mod automat, printr-o tehnicá de dute-vino (swapping) ßi sá determine ín orice moment cum
trebuie distribuitá informaþia ín memorie, ín scopul optimizárii utilizárii ei. Componentele sistemului de
operare prevázute pentru gestiunea memoriei fac parte din suportul de execuþie a programelor ßi sunt situate
deasupra suportului de gestiune a unitáþii centrale.
Prin spaþiu de adresare se ínþelege totalitatea numerelor de adresá referite íntr-un program. Ín timpul
execuþiei programului, fiecárei variabile din program íi va fi asociatá o anumitá adresá din memoria
operativá.
Gestiunea memoriei include douá operaþii esenþiale:
- adresarea memoriei;

4-8
- protecþia memoriei.
Adresarea memoriei constá din procedee prin care se realizeazá asocierea íntre un element al
spaþiului de memorie ßi o adresá efectivá din memoria operativá (un element al spaþiului de adresare).
Protecþia memoriei constá din acele procedee care garanteazá utilizarea corectá a memoriei operative
de cátre toate taskurile aflate ín execuþie la un moment dat.

Gestiunea memoriei ín sistemele cu monoprogramare


Ín astfel de sisteme, la un moment dat, ín memoria interná este íncárcat ßi se executá un singur task,
celelalte taskuri afländu-se pe suportul de memorie externá (disc magnetic). Ín principiu, memoria operativá
este ímpárþitá ín trei zone distincte, Fig. 4.3.
Zona rerervatá
sistemului de operare - SO
Spaþiul pentru programele utilizator
Figura 4.3.
Neutilizat

Ín zona rezervatá sistemului de operare (SO) sunt plasate modulele rezidente ale SO sau anumite
module folosite temporar. Restul memoriei operative este disponibilá programelor utilizatorului.
Suportul software pentru gestiunea memoriei ín aceste sisteme este foarte redus. De regulá se
verificá dacá programele utilizator planificate pentru execuþie nu depáßesc capacitatea memoriei operative
disponibile ín sistem (capacitatea MO - capacitatea zonei destinate SO). Dacá se constatá depáßirea
capacitáþii disponibile, se va emite un semnal de eroare, iar lucrarea respectivá se va abandona. Mecanismele
de protecþie a memoriei constau din procedee relativ simple prin care se permite citirea informaþiei din zona
aferentá SO ßi interzicerea operaþiei de a ínscrie informaþii ín aceastá zoná. Sistemele de operare de acest tip
se numesc monitor sau supervizor. Funcþiile unui asemenea SO sunt:
1. - Asigurarea continuitáþii íncárcárii sistemumui. Aceasta ínseamná cá ín momentul ín care se
terminá execuþia unui task, controlul este preluat de supervizor, care iniþiazá execuþia taskului celui mai
prioritar ín acel moment, care preia ßi controlul. Dacá taskul aflat ín execuþie este íntrerupt (de un task mai
prioritar), SO va suspenda execuþia taskului curent ßi acesta, ímpreuná cu informaþia aferentá contextului
cänd a fost íntrerupt, va fi imediat transferat pe un suport de memorie externá, ín memoria operativá
íncárcändu-se noul task ce urmeazá a fi executat. Reluarea execuþiei taskului íntrerupt se va face, dupá
reíncárcarea acestuia ín memorie, din punctul ín care a fost íntrerupt.
2. - Iniþierea ßi achitarea operaþiilor de intrare-ießire solicitate de programele utilizator.
3. - Punera la dispoziþie, pentru programele utilizator, a unor rutine standard frecvent utilizate.
Singura cale de a obþine accesul ín zona aferentá SO de cátre programele utilizator constá ín apelul unor
rutine ale SO.
Pprincipalul avantaj al acestei metode constá ín simplitatea SO ßi a spaþiului de memorie mic ocupat
de acesta, precum ßi ín faptul cá se dispune pentru execuþia taskului curent de íntregul spaþiu al memoriei
disponibile.
Dezavantajul metodei íl constituie timpul de ráspuns mare datorat comutárilor frecvente íntre taskuri
sau de la un program la altul, deoarece transferul íntre memoria interná ßi memoria externá cere mult timp.
O metodá de a elimina acest dezavantaj constá ín desemnarea unor taskuri critice pentru care se
impune un timp de ráspuns minim, care rámän permanent íntr-o zoná protejatá a memoriei interne. De
asemenea, utilizatorul are la dispoziþie un mecanism prin care va putea executa programe, uneori cu mult mai
mari decät spaþiul de adrese fizice disponibile. Acest mecanism se numeßte metoda ínlánþuirii ßi suprapunerii
(overlay) ßi constá ín suprapunerea unor module de program. Ín acest caz, un program aplicativ sau un task
aflat ín execuþie controleazá el ínsußi íncárcarea de pe suportul extern a unor module de program sau taskuri.
Íncárcarea se face la momente de timp bine definite impuse de evenimente externe sau interne, noile taskuri
aducändu-se ín memoria interná ín zona proprie a programului apelant, putänd sá-l acopere parþial sau total.
Rezultá cá programul de aplicaþie preia atät funcþia de planificare a execuþiei taskurilor, cät ßi de gestiune a
memoriei interne, substituindu-se SO. Deßi aceastá metodá presupune o complicare a programului de

4-9
aplicaþie, totußi este foarte utilá pentru aplicaþii de complexitate micá ßi medie ßi la care timpii de ráspuns au
valori foarte critice, precum ßi ín cazul sistemelor cu divizarea timpului.
Dezavantajul esenþial al monoprogramárii este acela cá existänd la un moment dat un singur program
ín memorie, nu poate fi utilizat paralelismul íntre efectuarea operaþiilor de intrare-ießire ßi operaþiile de
prelucrare propriu-zise, ceea ce conduce la un timp de lucru global mult mai mare ßi un factor redus de
utilizare a resurselor.
Cu toate acestea, aceastá tehnicá este foarte utilizatá, mai ales, ín cazul unor calculatoare de putere
micá ßi medie destinate prelucrárii unor lucrári cu caracter tehnico-ßtiinþific. Astfel de lucrári ocupá un timp
índelungat procesorul cu efectuarea unor operaþii aritmetice ßi logice complexe ceea ce face sá se resimtá mai
puþin influenþa timpului necesar schimbului informaþiei íntre MO ßi memoria externá.

Gestiunea memoriei ín sistemele cu multiprogramare


Multiprogramarea a fost introdusá pentru creßterea gradului de utilizare a procesorului prin
exploatarea paralelismumui íntre activitatea procesorului ßi activitatea dispozitivelor de intrare- ießire.
Multiprogramarea presupune existenþa simultaná ín memoria interná a mai multor taskuri ßi execuþia lor
paralelá prin mecanismul multitasking. Comutarea íntre taskuri se realizeazá sub controlul SO ín funcþie de
prioritáþile taskurilor ßi de evenimentele ce au loc ín proces. Existenþa mai multor programe ín memoria
operativá presupune ímpárþirea acesteia ín zone distincte numite partiþii sau regiuni. Situaþia alocárii
memoriei la un moment dat, íntr-un sistem cu multiprogramare, se poate reprezenta ca ín Fig. 4.4.

Zona rezervatá
sistemului de operare - SO
Taskul 1 Partiþia 1
Neutilizat

Figura 4.4. Taskul 2


Partiþia 2
Neutilizat
Taskul 3
Partiþia3
Neutilizat
Se observá cá, ßi ín acest caz, o anumitá zoná de memorie va fi alocatá necesitáþilor SO. Fiecare
partiþie va fi formatá dintr-o zoná utilá ín care se íncarcá programele ßi datele aferente unui task ßi o zoná
neutilizatá. Ín ceea ce priveßte protecþia memoriei, apar douá aspecte:
1. - Ca ßi ín cazul monoprogramárii este necesar ca programele utilizator sá nu afecteze ín nici un fel
informaþiile din zona SO.
2. - Se impune ca execuþia unui program (task) sá nu afecteze ín nici un fel celelalte programe
(taskuri) cu care coexistá ín memorie.
Un mecanism ußor de implementat care sá ráspundá cerinþelor de mai sus íl reprezintá mecanismul
cheie de protecþie - cheie de acces. Conform acestui mecanism, fiecárei partiþii i se asociazá, utilizänd
mijloace hardware, o cheie de protecþie. Cänd procesorul este alocat unui program (task), cämpul din tabela
de stare a taskului ce conþine cheia de acces la memorie va fi actualizat corespunzátor partiþiei programului
curent aflat ín execuþie. Ín timpul execuþiei, la fiecare acces la memorie se verificá egalitatea cheii de acces
cu cea a cheii de protecþie, accesul fiind permis numai ín partiþiile unde se ínregistreazá egalitatea.
Mecanismul cheie de protecþie - cheie de acces poate fi extins ußor ßi la canalele de intrare-ießire.
Dacá memoria operativá este divizatá ín partiþii ínainte de execuþia oricárei lucrári, se spune ca
lucrám cu partiþii statice (fixe). Ín acest caz dimensiunea partiþiei este fixatá íncá din etapa de generare a SO.
Íntr-o asemenea organizare, un program (task) dintr-o partiþie este executat päná ín momentul ín care va
iniþia o operaþie de intrare-ießire. Evident cá cel care iniþiazá propriu-zis operaþia de intrare-ießire este SO.
Dupá iniþierea operaþiei de intrare-ießire, SO va trece controlul unui alt task rezident ín altá partiþie a
memoriei ßi care dispune de toate resursele necesare cu excepþia procesorului. La fel se petrec lucrurile ßi ín
cazul ín care un task este íntrerupt de un task mai prioritar sau ca urmare a apariþiei unui eveniment ín

4 - 10
proces: SO va da controlul taskului mai prioritar sau se trece la rutina de tratare a íntreruperii solicitate. Dacá
íntr-o fazá a lucrárii cantitatea de memorie solicitatá depáßeste cantitatea de memorie ce poate fi pusá la
dispoziþie íntr-o partiþie, íntreaga lucrare se abandoneazá.
Modul de alocare a memoriei cu partiþii fixe este indicat ín situaþia ín care se cunosc dimensiunile
programelor (taskurilor) ßi zonele de memorie ocupate de datele pe care acestea le vehiculeazá. Ín acest caz
partajarea memoriei se va face ín funcþie de necesitáþi, obþinänd deci o buná utilizare a memoriei.
Dacá partiþiile sunt create nu la generarea sistemului, ci chiar ín timpul execuþiei lucrárii, ínaintea
ínceputului fiecárei faze a lucrárii, se spune cá sistemul de calcul lucreazá cu partiþii dinamice. Ín aceastá
situaþie SO poate ajusta dimensiunea partiþiilor ín funcþie de necesitáþile curente. Uneori aceste modificári se
realizeazá chiar ín timpul execuþiei unor programe prin extensia sau reducerea memoriei alocate acestor
programe. SO poate modifica ßi numárul partiþiilor existente la un moment dat ín memorie. Aceste apecte
impun ca SO sá deþiná informaþii detaliate despre organizarea memoriei sub forma a douá tabele: una, pentru
partiþiile alocate ßi alta, pentru partiþiile libere. Informaþiile ce se pástreazá ín aceaste tabele se referá la
dimensiunile partiþiilor, adresa primei locaþii a partiþiei, rectricþiile de acces la fiecare partiþie.
Cele mai cunoscute procedee de alocare dinamicá a memoriei sunt: procedeul FIRST FIT (procedeul
primei partiþii) - eficient ín cazul programelor de dimensiuni mari ßi procedeul BEST FIT (procedeul celei
mai bune partiþii) - specific ín cazul unor programe mici ßi cu o mare diversitate. Alte algoritme de alocare
dinamicá a memoriei sunt: algoritmul ínjumátáþirii (BUDDY SYSTEM), care impune ca fiecare partiþie
liberá sá aibe o dimensiune egalá cu o putere a lui 2, algoritmul numerelor lui Fibonacci, care presupune o
divizare a memoriei proporþionalá cu numerele din ßirul lui Fibonacci etc.
Deoarece alocarea dinamicá a memoriei duce la apariþia unor fragmente de memorie neutilizate, ín
general de dimensiuni mici, ceea ce duce la amänarea introducerii ín execuþie a unor lucrári noi päná la
terminarea unei lucrári ín curs de execuþie ce elibereazá o partiþie suficientá de memorie, este necesar ca,
periodic, aceste regiuni libere sá fie combinate íntr-o regiune mai mare, operaþie numitá compactare sau
recompactare a memoriei. Operaþia este foarte costisitoare deoarece presupune deplasarea programelor ín
memorie, cu modificarea tuturor adreselor (mai puþin adresele porturilor dispozitivelor de intrare-ießire) ßi se
realizeazá printr-un mecanism comun software-hardware.
Principalul avantaj al alocárii dinamice, ín special ín cazul folosirii programelor relocabile (adicá
programe ce conþin adrese relative dupá faza de editare a legáturilor) íl constituie eliminarea fragmentárii
memoriei, cea ce duce la o utilizare mult mai eficientá a MO ßi la un grad superior de multiprogramare.
Dezavantajul constá ín folosirea unor componente hardware suplimentare, reducerea vitezei de lucru
datoritá timpului necesar pentru calculul adreselor efective ßi creßterea timpului efectiv de lucru datoritá
timpului mare necesar compactárii memoriei, ín special dacá aceastá operaþie se realizeazá frecvent.
Menþionám cá metoda este mai puþin utilizatá ín cazul SO cu divizarea timpului.
Gestiune memoriei operative prin paginare
Dacá se renunþá la cerinþa ca o partiþie sá fie contiguá ßi se prevád dispozitive hardware necesare, se
obþine o soluþie la fragmentarea memoriei ßi anume gestiunea memoriei prin paginare. Conform acestei
metode, spaþiul de adresare al fiecárui program se considerá divizat ín párþi egale numite pagini; de
asemenea, MO se considerá divizatá ín zone de aceeaßi dimensiune numite blocuri de memorie sau
cadre-paginá. Fiecárui program (task) i se alocá un numár íntrg de astfel de blocuri. Alegerea dimensiunii
blocului este o problemá de optimizare. Dacá blocurile sunt prea lungi, se simplificá activitatea de gestiune,
dar poate apare fenomenul de utilizare neraþionalá a memoriei. Dacá blocurile sunt prea mici, eventualul
cäßtig de memorie este plátit prin complexitatea tabelelor de paginá ßi a programelor de gestiune a memoriei.

4.7. Gestiunea proceselor (taskurilor) ßi a procesorului


Se ßtie cá procesorul sau, mai general, unitatea centralá reprezintá principla resursá a oricárui
calculator. Orice program (task) destinat prelucrárii datelor apeleazá la serviciile procesorului.
Analizám cazul unui sistem de calcul monoprocesor. Ín aceastá situaþie, ín cazul multiprogramárii, la
un moment dat, mai multe taskuri din componenþa unui program pot solicita resursele unitáþii centrale. Apar,
deci, conflicte pentru utilizarea procesorului.
Din punct de vedere al organizárii funcþionale interne a unui calculator numeric, unui task íi
corespunde un proces. Fiecare proces are asociate o serie de resurse care íi condiþioneazá desfáßurarea ßi este

4 - 11
reprezentat ín sistemul de operare printr-o structurá de date numitá bloc de comandá a procesului (taskului).
Un bloc de comandá a procesului (taskului) va reflecta starea procesului (taskului) ßi va conþine toate
informaþiile necesare pentru a relua procesul (taskul) din punctul ín care a fost íntrerupt. Cu mici diferenþe de
la un sistem de operare la altul, un bloc de comandá a procesului (taskului) va conþine:
- identificatorul procesului (taskului);
- starea procesului (taskului);
- copia registrelor generale la suspendarea procesului;
- informaþii despre resursele alocate procesului.
Observaþie: Modul ín care este creat un proces (task) este specific fiecárui sistem de operare.
Taskurile care compun o aplicaþie se pot afla ín una din urmátoarele trei stári: NEINSTALAT,
INACTIV sau ACTIV, Fig. 4.5.

7 2
BLOCAT GATA DE ÍN EXECUÞIE
6 EXECUÞIE 4
(BLOCKED) (RUN)
(READY)
Cerere de
terminare
Cerere de 1 8 Cerere de
9 intrare ín terminare
forþatá execuþie forþatá
(din alt task) 3 ACTIV
(din alt task) (din alt task)

INACTIV
(INACTIVE)

Instalare §tergere

NEINSTALAT

Figura 4.5.
Un task ACTIV poate fi, la ríndul lui, ín una din urmátoarele substári: BLOCAT (BLOCKED),
GATA DE EXECUÞIE (READY) sau ÍN EXECUÞIE (RUN).
Un task neinstalat este un task creat rezident pe un suport extern sau ín memoria interná a
calculatorului, dar care nu a fost íncá adus la cunoßtinta sistemului de operare (EXECUTIVULUI). Un task
creat este fácut cunoscut sistemului de operare prin operaþia de instalare, ín urma cáreia el este trecut automat
ín starea INACTIV.
Un task se aflá ín starea INACTIV dacá este instalat, dar nu este planificat pentru execuþie. Prin
instalare se creeazá ßi i se alocá taskului un vector de stare sau un bloc de control al taskului care reprezintá
materializarea taskului ín sistem ßi care conþine informaþiile specificate mai sus. Vectorii de stare ai
taskurilor sunt grupaþi íntr-o tabelá a taskurilor care este folositá de sistemul de operare cu ocazia instalárii
ßi distrugerii (ßtergerii) taskurilor, precum ßi pentru efectuarea schimbárilor survenite ín starea taskurilor pe
parcursul duratei lor de existenþá. Taskului i se atribuie un nume sau un numár care permite sistemului de
operare ßi altor taskuri sá-l desemneze fárá ambiguitate pe toatá durata lui de existenþá. Un task poate reveni
ín starea NEINSTALAT numai din starea INACTIV prin operaþia de ßtergere (sau distrugere) a lui,
dezafectíndu-i-se vectorul de stare.
Un task pentru care se face o cerere de intrare ín execuþie trece din starea INACTIV ín starea ACTIV
ßi anume ín substarea READY, tranziþia 1, adicá are índeplinite toate condiþiile ßi poate astfel concura la
ocuparea procesorului. Momentul trecerii unui task ín substarea GATA DE EXECUÞIE nu poate fi prevázut
cu exactitate de cátre programator, acest moment fiind funcþie de complexitatea aplicaþiei ßi de modul ín care

4 - 12
se face planificarea taskurilor pentru intrarea lor ín execuþie. Precizám cá planificarea taskurilor pentru
execuþie este realizatá de un modul al sistemului de operare numit planificator (SCHEDULER). Trecerea
unui task ín substarea ÍN EXECUÞIE (RUN) se face numai din substarea READY, tranziþia 2. Existá douá
tehnici de bazá pentru realizarea planificárii taskurilor spre execuþie:
10. Procedeul round-robin, prin care taskurile aßezate íntr-o coadá de aßteptare sunt executate
succesiv, fie píná la terminarea lor normalá, fie un interval (cuantá) de timp ∆ t bine determinat. Strategia de
administrare a cozii este de tip FIFO (First In - First Out : Primul venit - Primul ießit). Dupá ce un task a fost
executat, acesta este trecut ín coada de aßteptare ßi este lansat ín execuþie taskul urmátor. Dacá taskul nu se
terminá ín timpul alocárii curente, el este trecut prin coada de aßteptare de n ori, unde n este cel mai mic
íntreg care satisface relaþia t ≤ n × ∆t unde ∆t este cuanta de timp alocatá rulárii curente a unui task, iar t este
timpul de execuþie al taskului. De obicei, parametrul ∆t se alege astfel íncät majoritatea interacþiunilor
utilizator-sistem sá se termine íntr-o singurá cuantá (de regulá de ordinul milisecundelor). Se observá cá,
acest algoritm íntrerupe un task ín curs de execuþie indiferent dacá la epuizarea cuantei de timp acordate
taskul respectiv s-a terminat sau nu.
20. Procedeul dupá prioritáþi, prin intermediul cáruia fiecárui task íi este atribuit un indicator de
importanþá materalizat printr-un nu numár numit prioritate, iar dintre taskurile gata de execuþie, la un
moment dat, care concurá la ocuparea procesorului, sistemul de operare va aduce ÍN EXECUÞIE taskul cu
prioritatea cea mai mare la acel moment.
Observaþii:
1. Ín cazul EXECUTIVELOR care permit ambele moduri de planificare a taskurilor pentru execuþie,
procedeul round-robin se aplicá taskurilor de aceeaßi prioritate.
2. Existá sisteme de operare evoluate care oferá posibilitatea de activare a taskurilor ín condiþii de
crizá de timp ßi care dispun de proprietatea remarcabilá de creßtere automatá a prioritáþii unui task dacá
acesta nu a fost executat íntr-un anumit interval de timp.
3. Este evident cá pe un sistem de calcul monoprocesor, la un moment dat, un singur task se aflá ÍN
EXECUÞIE.
Trecerea unui task dintr-o stare ín alta se poate realiza, de asemenea, ín douá moduri:
10. Prin intermediul íntreruperilor determinate de evenimentele interne sau externe generate prin
intermediul sistemului de íntreruperi, contextul comutárii fiind determinat de nivelul íntreruperii ßi de
subrutina de tratare a acesteia. Evenimentele ce sunt luate ín considerare de sistem sunt:
- íntreruperi de la procesul condus;
- íntreruperi de la ceasul de timp real;
- íntreruperi generate de dispozitivele de intrare-ießire;
- íntreruperi iniþiate de operator de la COP;
- terminarea sau suspendarea executárii unui task activ.
20. Prin directive (cereri de servicii) cátre sistemul de operare (EXECUTIV) din taskul care se aflá ín
execuþie, contextul comutárii fiind determinat de tipul directivei ßi de parametrii acesteia.
Un sistem de operare ín timp real trebuie sá permitá ambele procedee de comutare a taskurilor,
aceasta ßi datoritá faptului cá directivele folosesc implicit sistemul de íntreruperi al microprocesorului.
Mai mult, un EXECUTIV de timp real este necesar sá fie ínsoþit de un MONITOR care sá constituie
interfaþa íntre operator ßi programul ce reprezintá aplicaþia de conducere ßi care sá conþiná comenzi avänd
acelaßi efect asupra taskurilor ca ßi directivele. Astfel, prin intermediul MONITORULUI, operatorul se poate
informa asupra stárii taskurilor, poate realiza, dacá este necesar, modificarea stárii acestora, acþiuni necesare,
mai ales, ín faza de dezvoltare ßi depanare a programului.
Celelalte tranziþii ale unui task dintr-o stare ín alta au loc ín urmátoarele condiþii:
- Tranziþia 3 din substarea RUN ín starea INACTIV apare ín mod logic (sau normal) la terminarea
taskului.
- Tranziþia 4 din substarea RUN ín substarea READY se realizeazá ín douá situaþii:
a) - taskul curent este íntrerupt de un alt task, de un task critic, mai prioritar, apárut ín condiþii de context
extern sau intern;

4 - 13
b) - ín cazul modului de prelucrare a taskurilor ín regim de time sharing (cu divizarea timpului), cänd cuanta
de timp alocatá execuþiei taskului curent s-a epuizat, deßi el dispune ín continuare de toate resursele necesare
execuþiei sale.
- Trecerea din substarea RUN ín substarea BLOCKED, tranziþia 5, se realizeazá ín situaþia ín care
taskul aflat ín execuþie este íntrerupt pentru índeplinirea uneia dintre urmátoarele condiþii:
a) - terminarea unei operaþii de intrare-ießire solicitatá de task;
b) - apariþia unui eveniment extern;
c) - trecerea unui anumit interval de timp.
- Un task trece din substarea BLOCKED ín substarea READY, tranziþia 6, cänd cauzele care au
produs blocarea execuþiei taskului au fost ínláturate, adicá sunt índeplinite condiþiile:
a) - s-a íncheiat operaþia de intrare-ießire iniþiatá de task;
b) - s-a eliberat o zoná de memorie interná suficientá pentru a permite execuþia taskului;
c) - a avut loc evenimentul extern aßteptat;
d) - a expirat intervalul de timp de aßteptare.
- Tranziþia 7 din substarea READY ín substarea BLOCKED apare ín situaþia cänd un task ce era gata
de execuþie este trecut ín substarea BLOCAT de un task aflat ín execuþie, sau nu mai poate fi executat din
considerente cá nu mai dispune de suficientá memorie interná.
- De asemenea, un task ín execuþie poate trece, prin terminare forþatá, ín starea INACTIV atät
taskuri aflate ín substarea READY, tranziþia 8, cät ßi taskuri aflate ín substarea BLOCKED, tranziþia 9.
Observaþie: Prin terminare forþatá, unui task activ i se suspendá toate condiþiile de aßteptare ßi i se retrage
orice posibilitate de alocare a unei resurse.
Trebuie fácutá menþiunea cá dacá un task pierde controlul procesorului rámänänd ín starea ACTIV,
reluarea execuþiei lui se va face din punctul ín care a fost íntrerupt. Pentru ca reluarea execuþiei sá se facá ín
contextul íntreruperii taskului este necesar ca, ín momentul íntreruperii unui task, sistemul de operare sá
asigure salvarea íntregului context aferent taskului, adicá conþinutul registrelor generale ale unitáþii centrale,
conþinutul registrului indicatorilor de stare etc.
Dacá comutarea stárii taskurilor se face sub controlul unui EXECUTIV de timp real prin intermediul
directivelor, ín urma lansárii unei directive, controlul procesorului este transferat de la taskul aflat ín execuþie
(taskul care a lansat directiva) cátre EXECUTIV pentru ca acesta sá satisfacá imediat cererea conþinutá ín
directivá. Din punct de vedere al returnárii controlului de cátre EXECUTIV cátre taskurile componente
aplicaþiei distingem douá categorii de directive:
- Directive pe care EXECUTIVUL le satisface returnänd apoi controlul taskului care a dat directiva
(care a lansat cererea de servicii);
- Directive care cer o serie de servicii EXECUTIVULUI, dupá satisfacerea cárora acestea nu mai
returneazá controlul taskurilor apelante ci, determiná o nouá replanificare (rescheduling) a taskurilor pentru
execuþie. EXECUTIVUL va aduce ín execuþie taskul gata de execuþie cu prioritatea cea mai mare. Ín acest
caz, se spune cá directiva declará eveniment semnificativ.
Structura generalá a unui task executat sub controlul unui EXECUTIV de timp real este prezentatá ín Fig 4.6.

Secvenþá de program de iniþializare

Secvenþá de program care realizeazá


Fig. 4.6. funcþia pentru care a fost creat taskul Se executá
ciclic, ín
buclá infinitá
Directivá (apel de servicii cátre EXECUTIV )
ßi abandonare procesor

4 - 14

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