Documente Academic
Documente Profesional
Documente Cultură
1.Primitiva AŞTEAPTĂ( t) are efect numai asupra taskului care a lansat-o, presupunând din
partea EXECUTIVULUI următoarele acţiuni neîntreruptibile:
- înscriera valorii t într-un contor local aferent taskului;
- blocarea taskului până la expirarea intervalului de timp t;
- decrementarea contorului cu o cuantă de timp la fiecare întrerupere dată de ceasul de timp
real;
- trecerea taskului în starea READY la anularea contorului şi declararea de eveniment
semnificativ.
Din punct de vedere al evoluţiei programului, dacă taskul lucrează în buclă infinită, modul de
sincronizare realizat de această directivă este prezentat în Figura 5.7.
t t t
0
Timp
Interval de timp de execuţie a taskului
Interval de timp de aşteptare
Fig.5.7.
Se observă că intervalul de timp de reprogramare a execuţiei taskului este t+ cu
variabil deoarece nu este cunoscut momentul intrării în execuţie a taskului şi nici durata execuţiei
lui.
Observaţie: La expirarea intervalului de timp t, taskul este trecut în starea READY urmând să fie
adus în execuţie de către EXECUTIV funcţie de procedeul ales pentru planificarea taskurilor pentru
execuţie). Acest mod de sincronizare a execuţiei unui task poate fi satisfăcător numai dacă t .
În caz contrar, intervalul de timp de reprogramare a execuţiei taskului nu mai poate fi
evaluat.
În aplicaţiile practice se doreşte însă ca intervalul de reprogramare a execuţiei unui task să
fie cunoscut şi să aibă valoarea t, specificată ca parametru în directivă. Altfel spus, se doreşte o
sincronizare de tipul celei arătate în Fig.4.6.
t t t
0
Timp
35
Task Task
PLANIFICATOR
t t t
0
Timp
36
Task REPROGRAMAT
Secvenţă de iniţializare
MARCHEAZĂ( t, EV )
Secvenţă de program
executată ciclic
AŞTEAPTĂ(EV) Fig.4.9
Avantajul acestei structuri este acela că nu mai este nevoie de un task suplimentar, ca în cazul
anterior, şi nu se mai pierde primul interval de reprogramare.
37
prezentată în Fig.4.10, iar diagrama de lucru este cea din Fig.4.6.
Observaţie: Pentru anularea reprogramării unui task trebuie creată o primitivă specială,
ANULEAZĂ, având ca parametru numărul sau numele taskului, care determină EXECUTIVUL
să-l scoată din listele de ceas.
Secvenţă de program
-construire mesaj- Secvenţă de program
P ( ZC ) P ( ZC )
V (ZC ) V (ZC)
38
=>2. Mesajul este destinat numai unui singur task. În acest caz se creează primitive speciale
de transmitere, respectiv de recepţionare a mesajelor care vor cuprinde pe lângă mesajul
transmis(recepţionat) numele sau numărul taskului transmiţător(consumator), precum şi un
mecanism de sincronizare. Cel mai eficient este ca acest mecanism să fie implicit, adică încorporat
în directive prin intermediul variabilelor eveniment. Aceste primitive sunt de forma:
- TRANSMITE (EV, TASKCONS, MESAJ);
(SEND)
- RECEPTIONEAZĂ (TASKPROD, MESAJ).
(RECEIVE)
Directiva TRANSMITE() este lansată din taskul producător TASKPROD şi presupune
executarea următoarelor acţiuni din partea EXECUTIVULUI:
- setarea variabilei eveniment EV (EV capătă valoarea ADEVĂRAT);
- depunerea mesajului(de regulă de lungime fixă) şi a numelui sau numărului taskului
căruia îi este destinat acest mesaj (TASKCONS) la o adresă MESAJ într-o zonă de
memorie de regulă alocată dinamic.
Directiva RECEPTIONEAZĂ() lansată din taskul consumator TASKCONS testează dacă
la adresa MESAJ este înscris numele sau numărul său şi dacă da, preia mesajul transmis, iar dacă
nu, evoluţia programului, în general, nu mai poate fi controlată. De aceea, pentru o
funcţionare corectă a comunicării între taskuri prin intermediul acestor directive, trebuie realizate
următoarele deziderate:
- taskul producător TASKPROD transmite un mesaj taskului consumator TASKCONS şi nu
trebuie să-i mai transmită un alt mesaj până nu se aigură că acest task a preluat mesajul (adică până
nu i se confirmă recepţionarea lui);
- taskul consumator TASKCONS trebuie să aştepte mesajul transmis de taskul producător
TASKPROD, dacă acesta nu a fost încă transmis, şi să confirme consumarea lui pentru a permite
taskului producător să-i transmită un nou mesaj.
Sincronizarea comunicării celor două taskuri se realizează cu ajutorul variabilelor
eveniment. Cum, de obicei, în orice problemă de transmisie-recepţie mesaje este necesară şi
o sincronizare a comunicării cu o condiţie de timp, în Fig.4.12 este prezentată structura celor două
taskuri care comunică prin intermediul celor două directive TRANSMITE şi RECEPTIONEAZĂ şi
unde sincronizarea cu timpul se realizează prin intermediul unei directive tip
REPROGRAMEAZĂ(NRTASK, t).
Variabilele de sincronizare EV1 şi EV2 au valoarea iniţială FALS. În felul acesta
taskul consumator TASKCONS aşteaptă de fiecare dată pe variabila EV1 până când taskul
producător TASKPROD îi transmite mesajul, la expirarea intervalului de timp t. În
continuare, taskul producător aşteaptă pe variabila eveniment EV2 până îi soseşte confirmarea
(adică variabila EV2 capătă valoarea ADEVĂRAT) că taskul consumator a preluat mesajul şi este
capabil să primească un nou mesaj.
Observaţie: După cum s-a mai arătat, directiva REPROGRAMEAZĂ putea fi lansată şi
dintr-un alt task, eventual un task de iniţializare.
39
Task producător - TASKPROD Task consumator - TASKCONS
Secvenţă de iniţializare
REPROGRAMEAZĂ(TASKPROD, t )
Secvenţă de iniţializare
,
Figura 4.12
40