Documente Academic
Documente Profesional
Documente Cultură
Operatii Fundamentale Multitasking
Operatii 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.
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 ).
3
4
II-1
DA
NU
I<0
Continu execuia
taskului apelant
Se apeleaz dispecerul
n figura 2.21 este surprins situaia n care continu execuia taskului apelant, deci taskul deblocat este
adus n execuie logic.
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
Pentru ca soluia s fie funcional, semaforul SEMEX nu trebuie aservit altor scopuri n afara excluderii
mutuale.
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
Utilizarea csuei potal CPEX i a mesajului MESEX trebuie s fie numai n excludere mutual.
utilizat numai la implementarea excluderii mutuale.
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
GET
CPEX
SCr_T1
PUT
DEPUNE MESEX n CPEX
P2_T1
NU
SCr_T2
PUT
DEPUNE MESEX n CPEX
P2_T2
de
10
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
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.
Task T1
Iniializare T0
SEMSYNC=0
Iniializare T1
SEMSYNC=0
NU
P(SEMSYNC)
t_ex_T1 ?
DA
P_T1
V(SEMSYNC)
12
Task T1
Task T2
Iniializare T1
Iniializare T2
DA
Mes n C0 ?
NU
GET
MES_SYNC n C1?
NU
DA
GET
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
13
t
t
Ex.
Task
T2
Ex.
Task
T2
Ex.
Task
T2
Ex.
Task
T2
Ex.
Task
T2
Ex.
Task
T2
Ex.
Task
T2
Ex.
Task
T2
14
Task T2
Iniializare T2
DA
Mes n C0 ?
NU
GET
C0
NU
t=t ?
DA
P_T2
15
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
16
MES_EV
n C0?
EV_EXT ?
DA
TRIMITE
MES_EV
n C0
NU
DA
PUT
GET
PREIA
MES_EV
din C0
C0
P_T2
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
Task T1
Task T2
Iniializare T1
Iniializare T2
P1_T1
P1_T2
T2 gata recepie ?
T1 gata transmisie ?
NU
DA
DA
RECEIVE
NU
SEND
NU
NU
CP1
P1_T1
P2_T2
19
20