Sunteți pe pagina 1din 20

Programarea aplicaiilor de timp real Operaii fundamentale multitasking

Operaii fundamentale multitasking


Concurena pentru deinerea resurselor poate genera situaii conflictuale
ntre taskuri. Pentru evitarea acestora i pentru ca taskurile s-i realizeze
obiectivele au fost formalizate aa numitele operaii multitasking ntre care o
importan aparte prezint: excluderea mutual, sincronizarea i comunicarea 1
Pentru implementarea acestor operaii sistemele de operare sau executivele
de timp real pun la dispoziie instrumente cum ar fi: semafoare, cutii potale,
mesaje de trecere, variabile de tip eveniment, fanioane de excluziune, monitoare,
etc.
1. Resurse i seciuni critice
n general termenul de resurs desemneaz orice element necesar unui task
pentru a putea fi executat . Resursele pot fi de dou categorii i anume materiale i
logice.
n rndul resurselor materiale pot fi considerate:
- procesorul;
- memoria intern;
- memoriile externe;
- dispozitivele de intrare / ieire;
- ceasul de timp real;
- dispozitivele speciale.
n resursele logice pot fi incluse:
- subrutinele (procedurile);
- masivele de date;
- fiierele;
- variabilele.
O alt clasificare mparte resursele n: resurse locale i resurse comune.
Resursele locale sunt resursele care pot fi accesate de ctre un singur
task. Acestea pot fi n primul rnd de natur logic (subrutine, fiiere, variabile),
dar pot fi i de natur fizic, cum ar fi anumite dispozitive de intrare / ieire.

n mod obinuit acestea sunt cunoscute ca Operaii Fundamentale Multitasking.

Programarea aplicaiilor de timp real Operaii fundamentale multitasking

Resursele comune sunt acele resurse care pot fi accesate de mai multe
taskuri. Acestea pot fi att de natur logic (subrutine, tampoane de date,
variabile, etc. ) ct i fizic (procesor, memorie, dispozitive de intrare/ieire etc.).
La rndul lor resursele comune pot fi critice, partajabile, reentrante.

O resurs comun asupra creia la un moment dat se poate desfura o


singur sesiune de lucru respectiv care poate fi accesat la un moment dat de ctre
un singur task se numete resurs critic. n aceast categorie pot fi incluse
procesorul, locaiile de memorie, echipamente de intrare, subrutinele care i
modific pe parcurs unele date proprii, etc.

O resurs comun care admite ca n sesiuni de lucru s fie n derulare


asupraei la un moment dat (respectiv s poat fi accesat de ctre n taskuri) se
numete resurs partajabil cu n puncte de intrare.

O resurs comun care admite s fie oricte sesiuni de lucru s fie n


derulare la un moment dat se numete resurs reentrant2.
n continuare vor fi tratate unele aspecte referitoare la utilizarea
neconflictual a resurselor critice. Seciunea dintr-un task n care este accesat o
resurs critic se numete seciune critic. n sistemele multitasking trebuie s
existe reglementri pentru accesarea seciunilor critice. n acest sens se impune
existena unor modaliti de implementare a excluderii mutuale.
Excluderea de ctre un task aflat ntr-o seciune critic referitoare la o
resurs a accesului altor taskuri de a accesa propriile seciuni critice referitoare la
aceiai resurs se constituie n excludere mutual.
Referitor la implementarea excluderii mutuale sunt de menionat
recomandrile fcute de prof. Andrew Tanenbaum de la Universitatea Vrijie
Amsterdam, Olanda n anul 1987.
Sintetic aceste recomandri au n vedere urmtoarele aspecte:
1 orice seciune critic poate fi executat la un moment dat de ctre un
singur task (aceasta este practic esena excluderii mutuale care afirm c un singur
task se poate afla la un moment dat n propria seciune critic referitoare la o
resurs);
2 nu se poate face nici o ipotez n ceea ce privete viteza relativ i
frecvena de execuie a taskurilor (cu alte cuvinte la implementarea excluderii
mutuale nu pot fi avute n vedere considerente legate de frecvena sau viteza de
execuie a taskurilor);
2

Resursele reentrante pot fi considerate resurse partajabile cu n tinznd ctre infinit.

Programarea aplicaiilor de timp real Operaii fundamentale multitasking

3 orice task are dreptul s acceseze propria seciune critic referitoare ala
o anumit resurs dup un interval finit de timp;
4 orice task trebuie s evacueze o seciune critic proprie dup un interval
finit de timp;
5 taskurile nu se pot bloca n interiorul propriilor seciuni critice.
n continuare vor fi prezentate cteva modaliti de implementare a
excluderii mutuale.
2. Excluderea mutual realizat cu semafoare
Un semafor reprezint, conform introdus n anul 1965 de ctre
matematicianul olandez Edsger Wybe Dijkstra, un dublet format dintr-o variabil
de tip ntreg I i o coad de ateptare C, respectiv
S ( I ,C ).

La iniializare variabilei I i se atribuie o valoare I 0 0 , iar coada C este vid.


Dac variabila I ia numai valorile 0 i 1 semaforul se numete binar iar dac ia i
alte valori ntregi, semaforul se numete general.
Asupra semafoarelor pot fi efectuate dou operaii denumite P (de la
cuvntul olandez Passeren a trece) i V (de la cuvntul olandez Vrigeven a
elibera). Aceste funcii sunt indivizibile3 i se numesc primitive. n ceea ce
privete coada de ateptare , aceasta poate gestionat conform principiului FIFO4,
sau dup prioriti (univoce sau neunuivoce).
Primitiva P(S) presupune realizarea urmtoarelor operaii (ilustrate n
organigrama din figura 1):
1 - II-1;
2 dac I 0 , funcia se ncheie i taskul n care aceasta se execut i
continu execuia;
3 dac I < 0, taskul n care se execut primitiva, iese din rndul taskurilor
rulabile, se blocheaz iar indexul su este nscris n coada de ateptare C. n aceste
mprejurri se provoac un proces de comutare care determin trecerea n rulare
(execuie fizic) a altui task.

3
4

Indivizibilitatea are n vedere faptul c cele dou funcii nu pot fi ntrerupte.


First Input First Output

Programarea aplicaiilor de timp real Operaii fundamentale multitasking

II-1
DA

NU

I<0
Continu execuia
taskului apelant

Se scoate taskul apelant din rndul


taskurilor rulabile, se blocheaz i se
nregistreaz n coada C

Se apeleaz dispecerul

Se aduce n execuie alt task


Fig. 1. . Execuia primitivei P(S).

Primitiva V(S) presupune realizarea urmtoarelor operaii (ilustrate n


organigrama din figura 2.):
1 - II+1;
2 dac I 0 , se deblocheaz taskul aflat pe prima poziie n coada de
ateptare la semafor i se nscrie n rndul taskurilor rulabile, dup care se face apel
la dispecer, dup care continu execuia taskului apelant ;
3 dac I > 0, taskul n care se execut primitiva, i continu execuia.
n timpul execuiei primitivei V(S), dac n urma incrementrii rezult I0,
dup deblocarea taskului aflat pe prima poziie n coada C se d controlul
dispecerului. Acesta decide funcie de prioritate dac aduce sau nu n execuie
taskul deblocat5.
Din definirea primitivelor P(S) i V(S) rezult urmtoarele precizri
referitoare la valorile variabilei I aferente semaforului (S):
dac I > 0 , atunci aceasta reprezint numrul de taskuri care pot
executa primitiva P(S) fr a se bloca, presupunnd c ntre timp nu se execut nici
o primitiv V(S);

n figura 2.21 este surprins situaia n care continu execuia taskului apelant, deci taskul deblocat este
adus n execuie logic.

Programarea aplicaiilor de timp real Operaii fundamentale multitasking

dac I 0 , atunci |I|


semaforul S i nregistrate n coada C.

reprezint numrul de taskuri blocate la

II+1
NU

DA

I 0
Se deblocheaz taskul aflat pe prima
poziie n coada C, se elimin din ea
i se nscrie ntre taskurile rulabile

Continu execuia
taskului apelant

Se apeleaz dispecerul

Fig. 3. Execuia primitivei V(S).

Excluderea mutual cu semafoare presupune utilizarea unui singur semafor


binar, pe care l vom nota SEMEX, care se iniializeaz cu valoarea 1. n fiecare
task care trebuie s se exclud mutual, nainte de intrarea n seciunea critic se
execut o directiv P(SEMEX), iar dup ieirea din seciune o directiv V(SEMEX).
Este clar c n intervalul de timp n care un task se afl n propria seciune
critic referitoare la o anumit resurs SEMEX=0. n aceste condiii orice alt task
ce va dori s accead n propria seciune critic referitoare la aceiai resurs, va
executa directiva P(SEMEX), ceea ce va determina blocarea sa ntruct dup
decrementare SEMEX =-1.
La ieirea din seciunea critic execuia directivei V(SEMEX) va determina
SEMEX=0 i conform celor precizate anterior , taskul aflat n prima poziie n
coada C aferent semaforului S , va fi deblocat6 i va putea ptrunde la rndul su
n propria seciune critic.

Pentru ca soluia s fie funcional, semaforul SEMEX nu trebuie aservit altor scopuri n afara excluderii
mutuale.

Programarea aplicaiilor de timp real Operaii fundamentale multitasking

Ca exemplu n figura 4 se prezint schemele logice aferente excluderii


mutuale cu semafoare a dou taskuri T1, T2.. Se observ c cele dou taskuri se
execut la intervale prestabilite t_ex_T1, t_ex_T1.
Task T1

Task T2

Iniializare T1
SEMEX=1

Iniializare T2
SEMEX=1

NU

NU

t_ex T1 ?

t_ex_T2 ?

DA

DA

P1_T1

P1_T2

P(SEMEX)

P(SEMEX)

SCr_T1

SCr_T2

V(SEMEX)

V(SEMEX)

P2_T1

P2_T2

Fig. 4. Excluderea mutual cu semafoare:


P1_T1, ,P2_T2 proceduri ale taskurilor T1 i T2.

Avnd n vedere c SEMEX este iniializat cu valoarea 1, dac de exemplu


pentru T1se impune accesul n seciunea sa critic, acest lucru va fi posibil ntruct
directiva P(SEMEX) nu va bloca Taskul T1. Dac n timp ce T1 se afl n seciunea
sa critic T2 va ajunge la iminena intrrii n seciunea sa critic, acest deziderat nu
se va putea realiza ntruct directiva P(SEMEX) va determina blocarea Taskului T2
la semaforul SEMEX. Deblocarea se va produce cnd T1 va termina de executat
seciunea sa critic dup care va executa directiva V(SEMEX). Ca urmare a acestei
directive SEMEX va cpta valoarea 0 (zero) i T2 va deveni rulabil urmnd a fi
planificat de dispecer pentru execuia seciunii sale critice.

Programarea aplicaiilor de timp real Operaii fundamentale multitasking

Din cele prezentate rezult c se realizeaz excluderea mutual, respectiv


un singur task se poate gsi la un moment dat n propria sa seciune critic.
3.

Excluderea mutual realizat cu mesaje i cutii potale

O cutie potal (CP) reprezint o structur al crui element central este un


tampon circular gestionat conform principiului FIFO. ntr-o CP taskurile pot
depune mesaje, accesibile oricrui task. n mod normal o CP se specific prin
numrul de poziii ale tamponului circular i prin lungimea admis pentru un
mesaj.
Mesajele reprezint volume de date transferate ntre taskuri pe parcursul
evoluiei lor. Mesajele pot fi transmise direct ntre taskuri (caz n care se numesc
mesaje de trecere) su prin intermediul cutiilor potale. Din punct de vedere al
coninutului mesajele pot fi cu coninut fix sau variabil. Cele cu coninut fix se
numesc mesaje simbolice iar celelalte mesaje informaionale. n ceea ce privete
formatul i acesta poate fi fix sau variabil. n mod normal mesajele simbolice sunt
mesaje cu format fix.
O funcie de depunere (PUT) a unui mesaj ntr-o anume CP trebuie s
conin un pointer la variabila al crui coninut se depune, n timp ce o funcie de
extragere (GET) a unui mesaj dintr-o anume CP va trebui s conin un pointer la
variabila n care se depune mesajul extras.
Cutiile potale trebuie astfel gestionate nct s se produc blocarea
taskurilor pe operaii de depunere , atunci cnd CP este plin sau pe operaii de
extragere atunci cnd CP este vid.
Excluderea mutual cu cutii potale presupune utilizarea unei singure CP
pe care o vom nota CPEX n care primul task ce se iniializeaz depune un mesaj
simbolic, notat MESEX. nainte de intrarea n seciunea critic fiecare task care
trebuie s se exclud mutual va extrage MESEX din CPEX, iar dup ieirea din
seciunea critic l va redepune.
Rezult c n intervalul de timp n care un task se afl n seciunea sa
critic referitoare la o anumit resurs cutia potal CPEX este vid. n aceste
condiii orice alt task ce va dori s accead n propria seciune critic referitoare la
aceiai resurs, se va bloca la execuia funciei de preluare a mesajului simbolic.
Deblocarea7 se va produce n momentul n care CPEX va conine din nou mesajul
simbolic MESEX
7

Utilizarea csuei potal CPEX i a mesajului MESEX trebuie s fie numai n excludere mutual.
utilizat numai la implementarea excluderii mutuale.

Programarea aplicaiilor de timp real Operaii fundamentale multitasking

n figura 5 se prezint schemele logice aferente excluderii mutuale cu


utilizarea cutiilor potale a dou taskuri, T1i T2. Ca i n cazurile precedente cele
dou taskuri sunt sincronizate cu timpul, intervalele de execuie fiind t_ex_T1,
t_ex_T1.
Avnd n vedere c la iniializare cutia potal CPEX va conine mesajul
simbolic MESEX, dac de exemplu pentru T1se impune accesul n seciunea sa
critic, acest lucru va fi posibil ntruct prin funcia de extragere GET va putea fi
preluat mesajul MESEX. Dac n timp ce T1 se afl n seciunea sa critic T2 va
ajunge la iminena intrrii n seciunea sa critic, acest deziderat nu se va putea
realiza ntruct funcia GET va determina Taskului T2 la cutia potal CPEX.
Deblocarea se va produce cnd T1 va termina de executat seciunea sa critic dup
care va executa funcia PUT de depunere a MESEX n CPEX.
Task T1

Task T2

Iniializare T1

Iniializare T2

PUT MESEX
NU

PUT MESEX
NU

SAU

t_ex_T1 ?

t_ex_T2 ?

DA

DA

P1_T1

NU

P1_T2

MESEX n CPEX

MESEX n CPEX

DA

DA

PREIA MESEX din CPEX

PREIA MESEX din CPEX


GET

GET
CPEX

SCr_T1
PUT
DEPUNE MESEX n CPEX

P2_T1

NU

SCr_T2
PUT
DEPUNE MESEX n CPEX

P2_T2

Fig. 5. Excluderea mutual cu cutii potale i mesaje:


P1_T1, ,P2 _T2 proceduri ale taskurilor T1 i T2.
8

Programarea aplicaiilor de timp real Operaii fundamentale multitasking

n urma acestei depuneri T2 va deveni executabil urmnd a fi planificat de


dispecer pentru execuia seciunii sale critice.
Din cele prezentate rezult c i prin utilizarea cutiilor potale i a
mesajelor se poate realiza excluderea mutual, respectiv se poate asigura prezena
unui singur task la un moment dat n propria sa seciune critic.
3. Sincronizarea taskurilor cu utilizarea semafoarelor
De regul, n evoluia lor, taskurile unei aplicaii trebuie s se supun unor
relaii de ordine care s le asigure o anumit succesiune temporal.
De exemplu ntr-o aplicaie de conducere n timp real un task efectueaz
achiziia datelor din proces i le depune ntr-un buffer de unde vor fi preluate de
taskurile utilizator (reglare, supraveghere, monitorizare etc. ). n aceast situaie
taskurile beneficiare trebuie s atepte ncrcarea buffer-ului, dup care n cadrul
unei seciuni critice vor prelua datele.
Sincronizarea taskurilor reprezint procesul de punerea a unui task n
relaie cu alt task, cu timpul sau cu un eveniment extern. Dou taskuri se consider
sincronizate dac se pot stabili relaii predictibile ntre anumite momente ale
desfurrii lor. Sensul general al sincronizrii este acela de coordonare n timp,
decorelare.
n mod obinuit sincronizarea se poate face:
funcie de producerea unui eveniment extern taskului;
funcie de realizarea unei condiii de timp.
Sincronizarea cu timpul poate fi tratat ca o sincronizare cu evenimente
externe dac se consider impulsurile ceasului de timp real ca fiind astfel de
evenimente. Pentru realizarea sincronizrii sunt necesare funcii specifice de tratare
i anume:
- wait ateptare pn la producerea evenimentului;
- signal anunare c evenimentul s-a produs.
Metodele i mecanismele utilizate pentru realizarea sincronizrii se
deosebesc sub mai multe aspecte i anume:
- natura sincronizrii (cu evenimente externe sau cu timpul);
- momentul sincronizrii (cu nceputul, zona median sau sfritul unui
task):
- implementarea sincronizrii (prin faciliti ale limbajelor
programare, ale limbajelor de comand sau ale monitoarelor).
9

de

Programarea aplicaiilor de timp real Operaii fundamentale multitasking

Din punctul de vedere al sincronizrii cu timpul pot exista dou situaii,


ilustrate n figura 6, i anume:
- taskul ateapt expirarea unui interval de timp t dup care se execut
(figura 6 a);
- taskul se execut n interiorul cuantei de timp t (figura 6 b);.
t

Fig. 6. Sincronizarea cu timpul:


a intervalul de execuie n afara intervalului de sincronizare t;
b intervalul de execuie n interiorul intervalului de sincronizare t.

Se va exemplifica utilizarea semafoarelor pentru un sistem de dou taskuri


T1 i T2 care trebuie s se sincronizeze reciproc, n fiecare task fiind definit cte
un punct de sincronizare PS1 pentru T1, respectiv PS2 pentru T2. Sincronizarea
trebuie astfel realizat nct taskul Ti s nu poat trece de punctul su de
sincronizare PSi pn cnd cellalt task Tj nu a ajuns n punctul su de
sincronizare PSj ( i , j { 0 ,1} ).
Din analiza figurii 7, n care se prezint sincronizarea cu semafoare, rezult
c punctele de sincronizare se afl ntre procedurile P1 i P2 ale fiecrui task. Cu
alte cuvinte un task nu poate executa propria procedur P2 pn cnd cellalt task
nu i-a executat procedura P1.
Sincronizarea se realizeaz cu ajutorul a doua semafoare binare notate n
figura 7 cu SEMSYNC1 i SEMSYNC2 care n taskurile T1 i T2 se iniializeaz cu
valorile 1 respectiv 0. n punctul de sincronizare PSi al taskului Ti se execut
secvena P(SEMSYNCi), V(SEMSYNCj) cu i , j { 0 ,1} .
Dac de exemplu T2 ajunge n PS2 nainte ca T1 s i execute procedura
P1, se va bloca ntruct SEMSYNC2=0. Taskul se va debloca dup ce T1 depete
PS1 deoarece va executa directiva V(SEMSYNC2).

10

Programarea aplicaiilor de timp real Operaii fundamentale multitasking


Task T1

Task T2

Iniializare T1
SEMSYNC1=1

Iniializare T2
SEMSYNC2=0

NU

NU
t_ex_T1 ?

t_ex_T2 ?

DA

DA

P1_T1

P1_T2

P(SEMSYNC1)

P(SEMSYNC2)

PS1

PS2
V(SEMSYNC2)

V(SEMSYNC1)

P2_T1

P2_T2

Fig. 7. Utilizarea semafoarelor pentru sincronizarea a dou taskuri:


P1_T1, ,P2_T2 proceduri ale taskurilor T1 i T2.

n figura 8 este ilustrat utilizarea sincronizrii cu un eveniment extern.


Taskul T1 trebuie s i execute procedura P2 numai dup producerea
evenimentului extern EVEXT. n acest scop se utilizeaz semaforul de sincronizare
SYMSYNC care se iniializeaz cu valoarea 0. Asupra acestui semafor se execut o
directiv de tip V n taskul T0 care supravegheaz producerea evenimentului.
Task T0

Iniializare T0
SEMSYNC=0
NU
EVEXT?

Task T1

Iniializare T1
SEMSYNC=0

P1_T1

DA
P(SEMSYNC)
V(SEMSYNC)
P2_T1
11
Fig. 8. Utilizarea semafoarelor n pentru sincronizarea cu un eveniment
extern: P1_T1, ,P2_T1 proceduri ale taskului T1.

Programarea aplicaiilor de timp real Operaii fundamentale multitasking

Semafoarele pot fi utilizate i n sincronizarea cu timpul, n figura 9 fiind


prezentat un exemplu n acest sens. Taskul T1 trebuie s se execute la intervale de
timp t_ex_T1 . n acest scop se construiete taskul T0 cu rol de planificator.
Acesta execut o ateptare temporizat la semaforul de sincronizare SYMSYNC
iniializat cu valoarea 0. Ateptarea temporizat presupune execuia directivei
V(SEMSYNC) la expirarea intervalului t_ex_T1. Aceast directiv va debloca
taskul T1, care ntre momentele de execuie ateapt pe o funcie P la acelai
semafor, rezultatul fiind acela c taskul T1 se va executa cu periodicitatea
t_ex_T18 .
Task T0

Task T1

Iniializare T0
SEMSYNC=0

Iniializare T1
SEMSYNC=0

NU
P(SEMSYNC)

t_ex_T1 ?
DA

P_T1

V(SEMSYNC)

Fig. 9. Utilizarea semafoarelor n pentru sincronizarea cu timpul:


P_T1 procedur a taskului T1.

4. Sincronizarea realizat cu mesaje i cutii potale


Cutiile potale i mesajele pot fi utilizate att pentru implementarea
sincronizrii cu timpul, ct i cu evenimente externe.
n cazul sincronizrii cu timpul se utilizeaz de regul ateptarea
temporizat la o cutie potal vid. Mesajele implicate sunt de regul mesaje
simbolice, respectiv mesaje cu format i coninut fix. n continuare vor fi
prezentate dou soluii de sincronizare bazate pe cutii potale i mesaje.
O prim soluie, ilustrat n figura 10 presupune existena a dou taskuri
T1- cu rol de planificator i T2 care trebuie s se execute la intervale t. Soluia
implic prezena a trei cutii potale C0, C1, C2 cu urmtoarele funcii:
8

Timpul de execuie al taskului T1 este inclus n acest interval.

12

Programarea aplicaiilor de timp real Operaii fundamentale multitasking

- C0 CP destinat ateptrii temporizate;


- C1 CP destinat transferului mesajului de sincronizare MES_SYNC;
- C2 CP destinat transferului mesajului de confirmare MES_CONF.

Task T1
Task T2
Iniializare T1
Iniializare T2
DA

Mes n C0 ?

PREIA Mes din C0

NU

GET

MES_SYNC n C1?

NU

DA

GET

PREIA MES_SYNC din C1

C0
NU

t=t ?

C1

DA
TRIMITE MES_SYNC n C1

TRIMITE MES_CONF n C2
PUT

NU

P_T2
MES_CONF n C2?

C2

DA
PREIA MES_CONF din C2

GET

Fig. 10. Utilizarea cutiilor potale pentru sincronizarea cu timpul:


C0, C1, C2 cutii potale; P_T2 procedur ale taskului T2.

Taskul T1 realizeaz urmtoarea secven de operaii:


1.1 ateapt un interval de timp t (intervalul de sincronizare) la cutia
potal vid C0;
1.2 la expirarea acestui intervalul transmite n cutia potal C1 mesajul
de sincronizare MES_SYNC;

13

Programarea aplicaiilor de timp real Operaii fundamentale multitasking

1.3 ateapt i preia din cutia potal C2 mesajul de confirmare


MES_CONF;
1.4 se revine la pasul 1.1 , intrndu-se din nou n starea de ateptare
temporizat.
Mesajul de confirmare MES_CONF este un mesaj cu form fix care
informeaz taskul planificator T1 n legtur cu funcionalitatea taskului T2, care
trebuie s se execute temporizat.
n ceea ce privete taskul T2 , acesta execut urmtoarea secven:
2.1 ateapt i preia din cutia potal C1 mesajul de sincronizare
MES_SYNC;
2.2 - transmite n cutia potal C2 mesajul de confirmare MES_CONF;
2.3 execut procedura P-T2.
Din secvena de mai sus rezult faptul c execuia taskului T2 se produce n
interiorul cuantei de timp t , aspect evideniat n figura 11.
t

t
t

Ex.
Task
T2

Ex.
Task
T2

Ex.
Task
T2

Ex.
Task
T2

Fig. 11. Sincronizarea cu timpul: execuia taskului T2 se face n


interiorul cuantei de timp t.

Este posibil execuia taskului T2 n afara cuantei t, conform reprezentrii


din figura 12.
t

Ex.
Task
T2

Ex.
Task
T2

Ex.
Task
T2

Ex.
Task
T2

Fig. 12. Sincronizarea cu timpul: execuia taskului T2 se face n


exteriorul cuantei de timp t.

14

Programarea aplicaiilor de timp real Operaii fundamentale multitasking

n aceast situaie nu se mai impune existena taskului planificator T1.


Taskul T2 ateapt la cutia potal vid C0 un interval de timp t, deblocarea
producndu-se la expirarea acestei cuante de timp. n figura 13 se prezint
structura adaptat a taskului T2 pentru acest tip de sincronizare.
Se observ c nu mai sunt necesare mesaje de sincronizare i de
confirmare. Dac se dorete monitorizarea funcionalitii taskului T2, atunci se
menine taskul T1 care va primete la fiecare execuie a lui T2 cte un mesaj de
confirmare.
Procedeul sincronizrii cu timpul, n condiiile existenei unui task
planificator poate extins i la implementarea sincronizrii cu un eveniment extern,
corespunztor reprezentrii din figura 14.

Task T2
Iniializare T2
DA

Mes n C0 ?

PREIA Mes din C0

NU

GET

Fig. 2.33. Utilizarea unei cutii potale


vide pentru sincronizarea cu timpul:
C0 cutie potal; P_T2 procedur
ale taskului T2.

C0
NU

t=t ?
DA
P_T2

15

Programarea aplicaiilor de timp real Operaii fundamentale multitasking


Task T2
Task T1
Task T0

NU

Iniializare T0

Iniializare T1

EV_EXT ?

MES_EV
n C0?

Iniializare T2
NU

DA
PUT
GET
TRIMITE
MES_EV
n C0
C0

MES_SYNC
n C1?

DA

DA
GET

PREIA
MES_EV
din C0

PREIA
MES_SYNC
din C1

C1
TRIMITE PUT
MES_SYNC
n C1

NU

NU

PUT

TRIMITE
MES_CONF
n C2

P_T2

MES_CONF
n C2?

C2

DA
GET
PREIA
MES_CONF
din C2

Fig. 14. Utilizarea cutiilor potale pentru sincronizarea cu evenimente


externe: C0, C1, C2 cutii potale; P_T2 procedur ale taskului T2.

Dup cum se observ, nainte de producerea evenimentului EV_EXT


taskurile T0, T1, T2 sunt blocate dup cum urmeaz:
- T0 n ateptarea producerii evenimentului EV_EXT;
- T1 la cutia potal C0 n ateptarea mesajului MES_EV care confirm
producerea evenimentului;
- T2 la cutia potal C1 n ateptarea mesajului de sincronizare
MES_SYNC.
Este important de subliniat faptul c dup primirea mesajului de
sincronizare, T2 trebuie s depun n cutia potal C2 mesajul de confirmare
MES_CONF.

16

Programarea aplicaiilor de timp real Operaii fundamentale multitasking

Ca i n cazul sincronizrii cu timpul, taskul T1 poate fi eliminat n situaia


n care nu se dorete monitorizarea funcionalitii taskului T2, soluia principial
fiind prezentat n figura 15.
Task T2
Task T0
Iniializare T2
Iniializare T0
NU

MES_EV
n C0?

EV_EXT ?
DA
TRIMITE
MES_EV
n C0

NU

DA
PUT

GET

PREIA
MES_EV
din C0

C0

P_T2

Fig. 15. Utilizarea unei cutiilor potale pentru sincronizarea cu evenimente


externe: C0, cutie potale; P_T2 procedur ale taskului T2.

Dup cum se observ ntre momentele producerii evenimentului extern


EV_EXT taskurile T0 i T2 sunt blocate dup cum urmeaz:
- T0 n ateptarea producerii evenimentului EV_EXT;
- T2 la cutia potal C0 n ateptarea mesajului MES_EV referitor la
producerea evenimentului extern.
n aceste condiii taskul T2 este deblocat n momentul n care n cutia
potal C0 este depus MES_EV asociat producerii evenimentului extern.
5.

Utilizarea cutiilor potale i mesajelor n comunicare

Dup cum s-a artat procesarea datelor n regim concurent multitasking


implic pe lng utilizarea de resurse n comun i schimbul de informaie ntre
taskuri concretizat n operaia de comunicare. Uzual taskurile transfer informaia
sub form de mesaje care, dup cum s-a vzut la prezentarea excluderii mutuale
pot fi cu coninut variabil (mesaje informaionale) sau fix (mesaje simbolice).
17

Programarea aplicaiilor de timp real Operaii fundamentale multitasking

n mod obinuit comunicarea se implementeaz prin mecanismul


productor-consumator, taskurile putnd fi din acest punct de vedere
- taskuri de tip productor;
- taskuri de tip consumator.
Pentru facilitarea comunicrii sistemele de operare trebuie s pun la
dispoziie instrumente specifice, unul dintre acestea fiind conducta (pipe). O
conduct reprezint un tampon unidirecional gestionat conform principiului FIFO,
n care un task productor depune mesaje pe care le preia un task consumator.
Mecanismul de comunicare prin conduct trebuie s asigure blocarea
taskului productor care ajunge n faa unei operaii de scriere i conducta este
plin. Acelai mecanism va trebui s blocheze un task de tip consumator aflat n
situaia de preluare a unui mesaj (citire) dintr-o conduct goal.
n situaia n care dou taskuri au att rol de productor, ct i de
consumator vor trebui utilizate dou conducte, situaie evideniat n figura 16.
Taskul i

Conducta 1

Conducta 2

Taskul j
Fig. 16. Ilustrarea comunicrii prin conducte ntre dou taskuri.

Dup cum se observ Conducta 1 este deschis la scriere pentru taskul i i la citire
pentru taskul j, cu alte cuvinte cele dou taskuri ndeplinesc rolurile de productor
respectiv consumator. n ceea ce privete Conducta 2, aceasta este deschis la
scriere pentru taskul j i la citire pentru taskul i, rolurile celor dou taskuri fiind
inversate respectiv taskul i consumator, taskul j productor.

18

Programarea aplicaiilor de timp real Operaii fundamentale multitasking

Task T1

Task T2

Iniializare T1

Iniializare T2

P1_T1

P1_T2

T2 gata recepie ?

T1 gata transmisie ?

NU

DA

DA

RECEIVE

TRIMITE MES_ INF la T2

NU

PREIA MES_ INF de la T1

SEND
NU
NU

TRIMITE MES_CONF n CP1


MES_CONF n CP1?
PUT
DA

CP1

PREIA MES_CONF din CP1

P1_T1

P2_T2

Fig. 17. Utilizarea mesajelor de trecere i a cutiilor potale n comunicare.

Mesajele de trecere i cutiile potale reprezint alte dou mijloace destinate


asigurrii comunicrii dintre taskuri. Mesajele se trimit direct de la un taskul
emitor ctre cel receptor, n timp ce cutiile potale reprezint faciliti de
comunicare care pot fi utilizate de ctre toate taskurile aferente aplicaiei de timp
real.
n figura 17 se prezint un exemplu de comunicare ntre dou taskuri n
care se utilizeaz ambele modaliti. Mesajul informaional MES_INF este
transmis de Taskul T1 sub forma unui mesaj de trecere n timp ce Taskul T2 va
trimite un mesajul simbolic de confirmare MES_CONF prin intermediul cutiei
potale CP1.

19

Programarea aplicaiilor de timp real Operaii fundamentale multitasking

Este important de subliniat faptul c transmiterea unui mesaj de trecere este


posibil dac taskul receptor este gata s l primeasc. n ceea ce privete
receptorul acesta se va bloca n ateptarea mesajului dac taskul emitor nu este
gata s l transmit.
n ceea ce privete mesajul de confirmare, Taskul T1 se blocheaz pn la
depunerea acestuia n cutia potal CP1.

20

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