Documente Academic
Documente Profesional
Documente Cultură
4-Sisteme de Operare Ín Timp Real
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
- þ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
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-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-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.
Í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á.
Zona rezervatá
sistemului de operare - SO
Taskul 1 Partiþia 1
Neutilizat
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 - 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.
4 - 14