Sunteți pe pagina 1din 118

Programarea sistemelor de timp

real

Semafoare

1
Definiţie

z Este un obiect al unui nucleu/sistem de operare


de timp real care poate fi achiziţionat de unul sau
mai multe procese în vederea:
– sincronizării
– excluderii mutuale de la accesul simultan la o anumită
resursă
Elemente caracteristice

z Semafoarele sunt caracterizate prin


următoarele elemente:
– semafoarele au o anumită structură care poate
diferi de la un RTOS la altul;
– sunt structuri globale astfel încât starea lor poate
fi afectată de către orice proces.
Elementele asociate

z nume
z identificator unic
z valoare (număr binar sau natural)
z bloc de control al semaforului
z listă de procese asociate
Elementele asociate
Observaţii

z Lista proceselor asociate unui semafor poate


fi implementată:
– ca o listă de tip FIFO
– astfel încât să ţină cont de nivelul de prioritate al
proceselor asociate.
z Implementarea este specifică fiecărui sistem
de operare de timp real.
z Se spune despre procese că iau în posesie
un semafor sau îl eliberează
Clasificare

z semafor binar – poate lua doar două valori;


z semafor numărător – poate lua mai multe
valori;
z semafor cu excludere mutuală (mutex -
mutual exclusive) – poate lua doar două
valori dar are o serie de caracteristici
specifice cu ar fi asigurarea accesului
exclusiv la o resursă (de unde şi numele).
Semafoare binare

z pot lua două valori, 0 şi 1.


z semaforul are valoare 0 = indisponibil şi nu poate fi
luat în posesie (acest lucru deoarece anterior a fost
luat în posesie de un alt proces).
z semaforul are valoarea 1 = disponibil şi poate fi luat
în posesie.

Observaţie: Semafoarele binare pot fi eliberate şi de


către alte procese decât cele care le-au luat în
posesie.
Semafoare binare
Semafoare numărătoare

z poate lua mai multe valori.


z semaforul are valoarea 0 = semaforul
indisponibil (nu poate fi luat în posesie)
z semaforul are valoarea >0 = semaforul
disponibil (poate fi luat în posesie)
z În funcţie de implementare, numărul de câte
ori poate fi luat în posesie poate să fie limitat
sau nelimitat.
Semafoare numărătoare

z este utilizată interpretarea conform căreia un


semafor numărător are un număr de elemente care
pot fi luate în posesie. Semaforul numărător numără
câte astfel de elemente mai sunt disponibile. Când
nici un element nu mai este disponibil, valoarea
numărătorului este 0 şi deci semaforul devine
indisponibil.
z elementele semaforului pot să fie eliberate şi de
către procese care nu au luat în posesie în prealabil
un element al semaforului.
Semafoare numărătoare
Semafoare cu excludere mutuală

z asemănătoare semafoarelor binare în sensul


pot lua tot două valori
z au faţă de cele din urmă o serie de
proprietăţi care le individualizează
z În funcţie de implementarea RTOS
proprietăţile suplimentare pot fi:
– proprietate exclusivă
– recursivitate
– control asupra eliminării proceselor
– evitarea apariţiei inversiunii de prioritate
Semafoare cu excludere mutuală

z Proprietatea asupra unui mutex este obţinută


când un proces blochează mutex-ul luându-l
în posesie
z Un proces pierde proprietatea asupra unui
mutex când îl eliberează
z Când un mutex este în posesia unui proces
el nu poate fi deblocat de către alt proces
Semafoare cu excludere mutuală
Acţiuni asociate semafoarelor

Principalele acţiuni asociate semafoarelor sunt:


z crearea
z eliminarea
z luarea în posesie
z eliberarea
z ştergerea listei proceselor asociate
z obţinerea de informaţii
Crearea semafoarelor

z Crearea semafoarelor este diferită pentru tipuri


diferite de semafoare.
z Apelurile pentru crearea acestora este specifică
fiecărui tip de RTOS
z Diferenţe posibile:
– valoarea de iniţializare
z semafoare binare/mutuale: 0 sau 1
z semafoare numărătoare:
– starea accesibiă/neaccesibilă
– valoarea de iniţializare

– valoarea de iniţializare= valoarea maximă sau nu


Eliminarea semafoarelor

z Constă în a şterge un anumit semafor din lista celor


disponibile sistemului de operare.
z Stergerea poate să fie temporară sau definitivă.
z Ştergerea unui semafor poate să aibă efecte
negative în cazul în care nu se asigură că resursa
asociată acestuia nu a fost mai întâi eliberată.
z La eliminarea unui semafor, lista de procese
asociate (aflate în starea de aşteptare) este
desfiinţată. (toate procesele aflate în listă sunt
deblocate)
Luarea în posesie a unui semafor
z Operaţia este specifică fiecărui tip de semafor în parte.
z Dacă semaforul nu este disponibil, procesul interesat de
semafor poate să se comporte în mod diferit în funcţie de
cerinţele aplicaţiei
z Variantele posibile:
– procesul intră în starea blocată în care aşteaptă eliberarea
semaforului;
– procesul intră în starea blocată pentru o perioadă de timp. În
această perioadă semaforul poate sau nu deveni disponibil.
z După luarea în posesie a semaforului sau după expirarea timpului,
procesul este scos din lista proceselor asociate respectivului semafor,
starea următoare a acestuia fiind stabilită de planificator în funcţie de
starea celorlalte procese şi în funcţie de nivelul de prioritate al
acestora.
– procesul îşi continuă execuţia indiferent dacă semaforul este
accesibil sau nu.
Luarea în posesie a unui semafor

z În cazul semafoarelor de excludere mutuală


recursivă, semaforul poate fi luat în posesie
în mod repetat de către procesul care îl
posedă.
z Această situaţie este necesară în cazul în
care subprocese ale procesului ce deţine
semaforul necesită accesul la aceeaşi
resursă.
Eliberarea semafoarelor

z Semafoare binare/numărătoare
– eliberarea semafoarelor poate fi realizată de către
oricare dintre procesele existente în sistem.
z Semafoarele de excludere mutuală
– pot fi eliberate doar de către procesele care le-au
luat în posesie.
– semaforul poate fi eliberat în mod repetat de către
procesul care l-a luat în posesie. Numărul de
eliberări trebuie să fie egal cu numărul de luări în
posesie
Golirea listei de procese în aşteptare

Situaţii posibile
z Golirea listei de procese înainte de
eliminarea unui semafor.
z Realizarea unei sincronizări între procese.
Obţinerea de informaţii de la
semafoare

z Operaţia permite obţinerea de informaţii


referitoare la următoarele elemente ale unui
semafor:
– informaţii legate de elementele de identificare:
nume, identificator unic;
– informaţii legate de tipul semaforului şi valoarea
acestuia;
– informaţii legate de procesele aflate în lista de
aşteptare
Utilizări tipice ale semafoarelor

z sincronizarea unui proces în aşteptare,


z sincronizarea mai multor procese în
aşteptare,
z sincronizare cu urmărirea creditului
z sincronizarea accesului la o resursă cu
acces unic,
z sincronizarea resurselor partajabile recursiv
z sincronizarea accesului la mai multe resurse
partajabile
Sincronizare prin aşteptarea unui
semnal
Sincronizare prin aşteptarea unui semnal

ProcAstept ( ){
:
Ia în posesie semafor binar
:
}

ProcSemnal ( ){
:
Eliberează semafor binar
:
}
Sincronizarea mai multor procese în
aşteptare
Sincronizarea mai multor procese în
aşteptare

ProcAsteptn ( ){
:
Operaţii specifice
Ia în posesie semafor binar
:
}

ProcSemnal ( ){
:
Operaţii specifice
Goleşte lista de aşteptare a semaforului
:
}
Sincronizare cu urmărirea creditului
Sincronizare cu urmărirea creditului

ProcAstept ( ){
:
Ia în posesie semafor numărător
:
}

ProcSemnal ( ){
:
Eliberează semafor numărător
:
}
Sincronizare cu urmărirea creditului

z Utilizat când viteza de execuţie a celor două procese


este diferită (procesul semnalizator are viteză mai
mare)
z Procesul semnalizator îşi poate continua execuţia
numărând fiecare semnalizare efectuată
z Când este deblocat, procesul în aşteptare îşi
execută instrucţiunile cu viteza proprie. Semaforul
numărător va fi decrementat
z Metoda este aplicabilă dacă semnalizarea se face în
pachete astfel încât procesul în aşteptare să poată
răspunde tuturor semnalelor
Sincronizarea accesului la o resursă
cu acces unic
Sincronizarea accesului la o resursă
cu acces unic

z Metodă utilizată pentru accesarea exclusivă


a unei resurse
z Resursa poate fi:
– locaţie sau zonă de memorie
– structură de date
– port de intrare/ieşire
z Semaforul este creat cu starea iniţială având
valoarea 1 (disponibil/deblocat)
Sincronizarea accesului la o resursă
cu acces unic

Solicitant1 ( ){
:
Ia în posesie semafor
Scrie sau citeşte resursă
Eliberează semafor
:
}
Sincronizarea resurselor cu acces
recursiv
Sincronizarea resurselor cu acces
recursiv

z Metodă utilizată când subrutine apelate dintr-


un proces trebuie să aibă acces la aceeaşi
resursă ca şi procesul respectiv.
Sincronizarea resurselor cu acces
recursiv

Solicitant1 ( ){ SubrutinaB ( ){
: :
Ia în posesie mutex Ia în posesie mutex
Scrie sau citeşte resursă Scrie sau citeşte resursă
SubrutinaA() Eliberează mutex
Eliberează mutex :
: }
}
SubrutinaA ( ){
:
Ia în posesie mutex
Scrie sau citeşte resursă
SubrutinaB()
Eliberează mutex
:
}
Sincronizarea accesului la mai multe
resurse partajabile
Sincronizarea accesului la mai multe
resurse partajabile

Solicitantn ( ){
:
Ia în posesie semafor numărător
Scrie sau citeşte resursă
Eliberează semafor numărător
:
}
Sincronizarea accesului la mai multe
resurse partajabile

z Metoda este folosită când există mai multe


resurse echivalente
z Semaforul numărător este iniţializat cu
valoarea egală cu numărul de resurse
echivalente
Programarea sistemelor de timp
real

Cozi de mesaje

1
Coadă de mesaje. Definiţie

z Este un obiect al unui nucleu/sistem de operare


de timp real prin intermediul căreia procesele pot
trimite sau recepţiona mesaje în vederea:
– sincronizării
– schimbării de informaţii uni sau bidirecţional
Elemente caracteristice

z Cozile de mesaje sunt caracterizate prin


următoarele elemente:
– au o anumită structură care poate diferi de la un
RTOS la altul;
– menţin temporar mesajele ceea ce permite
decuplarea proceselor (transmisia/recepţia
mesajelor nu trebuie să se facă sincron).
Elementele asociate

z nume
z identificator unic
z lungimea cozii
z lăţimea maximă a cozii
z bloc de control al cozii
z 2 liste de procese asociate
– lista proceselor ce aşteaptă să trimită mesaje
– lista proceselor ce aşteaptă să primească mesaje
z capul şi capătul cozii
Elementele asociate
Observaţii

z Memoria necesară este alocată de către RTOS în


funcţie de parametrii furnizaţi de utilizator:
– lăţimea maximă a mesajului
– lungimea cozii (numărul de mesaje ce pot fi memorate în
coadă).
z Alocarea memoriei se face din blocurile de memorie:
– disponibile întregului sistem
– rezervate special
z Procesele din listele de aşteptare sunt selectate
pentru a trimite/primi un mesaj în funcţie de
– prioritate
– ordonare după un model FIFO
Stările unei cozi de mesaje
Conţinutul mesajelor

z poate lua mai multe valori.


z valoarea preluată de la un senzor,
z o imagine pentru a fi afişată pe ecran,
z un mesaj text ce trebuie afişat pe un LCD,
z codul obţinut la apăsarea unei taste de la o
tastatură
z pachet de date de trimis prin intermediul
reţelei
Transmiterea mesajelor

z dimensiunea maximă a mesajelor este


stabilită la intiţializare
z pot apare două probleme
– dimensiunea mesajele poate fi
z fixă
z variabilă
– transmiterea mesajului presupune două operaţii
de copiere a mesajului
z expeditor -> coadă de mesaje
z coadă de mesaje -> destinatar
Transmiterea mesajelor
Transmiterea mesajelor. Soluţii

1. în coada de mesaje se va înscrie un pointer


la mesaj
– avantaje
z permite transmiterea de mesaje de lungimi diferite
z copierea va fi mai rapidă (se copie doar pointerul)
– dezavantaje
z necesită introducerea în mesaj a unor informaţii legate
de lungimea mesajului
z necesită mecanisme de gestionare a mesajelor
eterogene
2. utilizarea unor mesaje de dimensiuni mici
Acţiuni asociate cozilor de mesaje

Principalele acţiuni asociate cozilor de mesaje sunt:


z crearea
z eliminarea
z golirea cozii de mesaje
z trimiterea de mesaje
z emisia mesajelor
z recepţionarea mesajelor
z obţinerea de informaţii legate de coada de mesaje
Crearea cozilor de mesaje

z Cozile sunt structuri globale, nu aparţin unui


anumit proces
z Apelurile pentru crearea acestora este
specifică fiecărui tip de RTOS
z Diferenţe posibile:
– valorile de iniţializare
z lungimea cozii
z lăţimea maximă a cozii
– modul de preluare a mesajelor de către procesele
în aşteptare (bazat pe prioritate, FIFO etc)
Eliminarea cozilor de mesaje

z Constă în a şterge unei anumite cozi de mesaje din


lista celor disponibile sistemului de operare
z Stergerea poate să fie temporară sau definitivă
z Ştergerea unei cozi de mesaje poate să aibă efecte
negative având în vedere faptul că mesajele
existente în listă sunt şterse
z La eliminarea unui cozi de mesaje, lista de procese
asociate (aflate în starea de aşteptare) este
desfiinţată (toate procesele aflate în listă sunt
deblocate)
Golirea cozii de mesaje

Situaţii posibile
z Golirea cozii înainte de eliminarea acesteia.
z Realizarea unei sincronizări între procese.
Trimiterea de mesaje

z Pot exista 2 modele:


– FIFO - fiecare mesaj nou este aşezat la sfârşitul
cozii.
– LIFO – fiecare mesaj nou este aşezat în capul
cozii
Transmiterea mesajelor. Model FIFO
Transmiterea mesajelor. Model LIFO
Transmiterea mesajelor

z când coada de mesaje este plină


procesul
– nu se blochează (apelul întoarce un cod
de eroare)
– se blochează pe o durată limitată
– se blochează pe o durată nedefinită
Aşteptare pentru transmiterea
mesajelor. Model FIFO
Aşteptare pentru transmiterea
mesajelor. Model LIFO
Deblocarea proceselor din lista de
aşteptare la transmisie

z blocare pe o durată limitată – procesul


se deblochează când
– devine disponibil o locaţie pentru un mesaj
în coadă
– expiră timpul de aşteptare
z blocare pe o durată nedefinită
– devine disponibil o locaţie pentru un mesaj
în coadă
Emisia mesajelor

z Emisia este operaţia de transmisie a unui


mesaj către mai multe procese
z Nu toate RTOS au implementată operaţia de
emisie
Recepţionarea mesajelor

z se face în funcţie de modelul de


aşteptare
– LIFO
– FIFO
– prioritate
Recepţionarea mesajelor. Model FIFO
Recepţionarea mesajelor. Model FIFO
Recepţionarea mesajelor

z când coada de mesaje este goală


procesul
– nu se blochează (apelul întoarce un cod
de eroare)
– se blochează pe o durată limitată
– se blochează pe o durată nedefinită
Deblocarea proceselor din lista de
aşteptare la recepţie

z blocare pe o durată limitată – procesul


se deblochează când
– apare un mesaj în coadă
– expiră timpul de aşteptare
z blocare pe o durată nedefinită
– apare un mesaj în coadă
Citirea mesajelor din coadă

z Citirea se poate realiza în două moduri:


– distructiv – mesajul citit din coadă este şters din
coadă
– nedistructiv – mesajul citit rămâne în coadă
Obţinerea de informaţii de la coada de
mesaje

z Operaţia permite obţinerea de informaţii


referitoare la următoarele elemente ale unei
cozi de mesaje:
– informaţii legate de elementele de identificare:
nume, identificator unic;
– informaţii legate parametrii cozii (lungime, lăţime
maximă;
– informaţii legate de procesele aflate în lista de
aşteptare
Utilizări tipice ale cozilor de mesaje

z comunicare unidirecţională fără blocare,


z comunicare unidirecţională cu blocare,
z comunicare bidirecţională cu blocare
z emisie
Comunicare unidirecţională fără
blocare
Comunicare unidirecţională fără
blocare

ProcEmitator () {
:
Trimite mesaj în coada de mesaje
:
}
ProcDestinatar () {
:
Citeşte mesajul din coada de mesaje
:
}
Comunicare unidirecţională fără
blocare

z p(ProcEmitator)<p(ProcDestinatar)
– ProcDestinatar – se execută, citeşte mesajele şi se
blochează când coada e goală
– când ProcEmitator trimite un mesaj, ProcDestinatar este
deblocat şi se execută din nou
z p(ProcEmitator)>p(ProcDestinatar)
– ProcEmitator – trimite mesaje până se umple coada de
mesaje şi se blochează
– ProcDestinatar – citeşte mesajele din coadă permiţând
ProcEmitător să se execute şi să trimită noi mesaje
Comunicare unidirecţională cu blocare
Comunicare unidirecţională cu blocare

ProcEmitator () {
:
Trimite mesaj în coada de mesaje
Ia în posesie semafor
:
}
ProcDestinatar () {
:
Citeşte mesajul din coada de mesaje
Eliberează semafor
:
}
Comunicare unidirecţională cu blocare

z Permite confirmarea recepţiei fiecărui mesaj


în parte
z Confirmarea se poate realiza cu ajutorul unui
semafor binar
Comunicare bidirecţională cu blocare
Comunicare bidirecţională cu blocare
tip client-server
Comunicare bidirecţională cu blocare
tip client-server

z Clientul trimite cererile prin coada de mesaje de


transmisie
z Serverul furnizează datele cerute prin intermediul
cozii de recepţie
z Se pot realiza aplicaţii cu mai mulţi clienţi şi un
server.
– coada de comenzi comună
– fiecare client va fi servit prin intermediul unei cozi separate
Observaţii
z Cele două cozi pot avea lăţimi maxime diferite
z Serverul va avea prioritate mai mare pentru a putea
servi clientul cât mai rapid
Comunicare bidirecţională cu blocare

ProcEmitator () {
:
Trimite mesaj în coada de emisie mesaje
Aşteaptă mesaj în coada de recepţie mesaje
:
}
ProcDestinatar () {
:
Citeşte mesajul din coada de emisie mesaje
Trimite mesaj în coada de recepţie mesaje
:
}
Emisie
Emisie

ProcEmitator () {
:
Trimite mesaj în coada de mesaje
:
}
ProcDestn () { // n=1,2,3
:
Citeşte mesajul din coada de mesaje
:
}
Programarea sistemelor de timp
real

Cutii poştale

1
Cutie poştală. Definiţie

z Este un obiect al unui nucleu/sistem de operare


de timp real prin intermediul căreia procesele pot
trimite sau recepţiona un mesaj în vederea:
– sincronizării
– schimbării de informaţii uni sau bidirecţional
Elemente caracteristice

z Cutiile poştale sunt caracterizate prin


următoarele elemente:
– au o anumită structură care poate diferi de la un
RTOS la altul;
– o cutie poştală menţine temporar un mesajceea
ce permite decuplarea proceselor
(transmisia/recepţia mesajelor nu trebuie să se
facă sincron).
Elementele asociate

z nume
z identificator unic
z dimensiunea mesajului
z bloc de control al cutiei poştale
z 2 liste de procese asociate
– lista proceselor ce aşteaptă să trimită mesaje
– lista proceselor ce aşteaptă să primească mesaje
Elementele asociate
Observaţii

z Memoria necesară mesajului poate fi alocată de


către RTOS în funcţie de dimensiunea mesajului.
z Alocarea memoriei se face din blocurile de memorie:
– disponibile întregului sistem
– rezervate special
z Procesele din listele de aşteptare sunt selectate
pentru a trimite/primi un mesaj în funcţie de
– prioritate
– ordonare după un model FIFO sau LIFO
Stările unei cutii poştale
Conţinutul mesajelor

z poate fi de diferite tipuri în funcţie de


informaţia pe care o poartă:
– valoarea preluată de la un senzor,
– o imagine pentru a fi afişată pe ecran,
– un mesaj text ce trebuie afişat pe un LCD,
– codul obţinut la apăsarea unei taste de la o
tastatură
– pachet de date de trimis prin intermediul reţelei
Transmiterea mesajelor

z dimensiunea şi formatul mesajelor trebuie să fie


agreat de ambele procese (expeditor şi destinatar) şi
sunt stabilite la iniţializare
z pot apare două probleme
– dimensiunea şi formatul mesajelor pentru cutii poştale
diferite pot
z aceleaşi
z diferite
– transmiterea mesajului presupune două operaţii de copiere
a mesajului
z expeditor -> cutie poştală
z cutie poştală -> destinatar
Transmiterea mesajelor
Transmiterea mesajelor. Soluţii

1. în cutia poştală se va înscrie un pointer la


mesaj
– avantaje
z permite transmiterea de mesaje de lungimi diferite
z copierea va fi mai rapidă (se copie doar pointerul)
– dezavantaje
z necesită introducerea în mesaj a unor informaţii legate
de lungimea mesajului
z necesită mecanisme de gestionare a mesajelor
eterogene
2. utilizarea unui mesaj de dimensiuni mici
Acţiuni asociate cutiilor poştale

Principalele acţiuni asociate cutiilor poştale


sunt:
z crearea
z eliminarea cutiei poştale
z trimiterea de mesaje
z recepţionarea mesajelor
z obţinerea de informaţii legate de cutia
poştală
Crearea cutiilor poştale

z Cutiile poştale sunt structuri globale, nu


aparţin unui anumit proces
z Apelurile pentru crearea acestora este
specifică fiecărui tip de RTOS
z Diferenţe posibile:
– valorile de iniţializare
z mărimea mesajului
z modul de transmitere a mesajului
– modul de preluare a mesajelor de către procesele
în aşteptare (bazat pe prioritate, FIFO etc)
Eliminarea cutiilor poştale

z Constă în a şterge unei anumite cutii poştale din lista


celor disponibile sistemului de operare
z Stergerea poate să fie temporară sau definitivă
z Ştergerea unei cutii poştale poate să aibă efecte
negative având în vedere faptul că mesajul existent
în cutia poştală este şters
z La eliminarea unui cutii poştale, lista de procese
asociate (aflate în starea de aşteptare) este
desfiinţată (toate procesele aflate în listă sunt
deblocate)
Transmiterea mesajelor

z când cutia poştală conţine un mesaj


procesul care vrea să trimită mesajul
– nu se blochează (apelul întoarce un cod
de eroare)
– se blochează pe o durată limitată
– se blochează pe o durată nedefinită
Aşteptare pentru transmiterea
mesajelor. Model FIFO
Aşteptare pentru transmiterea
mesajelor. Model LIFO
Deblocarea proceselor din lista de
aşteptare la transmisie

z blocare pe o durată limitată – procesul


se deblochează când
– cutia poştală devine goală
– expiră timpul de aşteptare
z blocare pe o durată nedefinită
– cutia poştală devine goală
Recepţionarea mesajelor

z se face în funcţie de modelul de


aşteptare
– LIFO
– FIFO
– prioritate
Recepţionarea mesajelor. Model FIFO
Recepţionarea mesajelor. Model FIFO
Recepţionarea mesajelor

z când cutia poştală este goală procesul


– nu se blochează (apelul întoarce un cod
de eroare)
– se blochează pe o durată limitată
– se blochează pe o durată nedefinită
Deblocarea proceselor din lista de
aşteptare la recepţie

z blocare pe o durată limitată – procesul


se deblochează când
– apare un mesaj în cutia poştală
– expiră timpul de aşteptare
z blocare pe o durată nedefinită
– apare un mesaj în cutia poştală
Citirea mesajelor din cutia poştală

z Citirea se poate realiza în două moduri:


– distructiv – mesajul citit din cutia poştală este
şters
– nedistructiv – mesajul citit rămâne în cutia poştală
Obţinerea de informaţii de la cutia
poştală

z Operaţia permite obţinerea de informaţii


referitoare la următoarele elemente ale unei
cutii poştale:
– informaţii legate de elementele de identificare:
nume, identificator unic;
– informaţii legate dimensiunea mesajului;
– informaţii legate de procesele aflate în lista de
aşteptare
Utilizări tipice ale cutiilor poştale

z comunicare unidirecţională,
z comunicare unidirecţională cu confirmarea
mesajului,
z comunicare bidirecţională cu blocare
z utilizarea cutiei poştale ca semafor binar
Comunicare unidirecţională
Comunicare unidirecţională

ProcEmitator () {
:
Trimite mesaj în cutia poştală
:
}
ProcDestinatar () {
:
Citeşte mesajul din cutia poştală
:
}
Comunicare unidirecţională cu
confirmarea primirii mesajului
Comunicare unidirecţională cu
confirmarea primirii mesajului

ProcEmitator () {
:
Trimite mesaj în cutia poştală
Ia în posesie semafor
:
}
ProcDestinatar () {
:
Citeşte mesajul din cutia poştală
Eliberează semafor
:
}
Comunicare bidirecţională
Comunicare bidirecţională

z Se utilizează două cutii poştale


z Procesul Proc1 trimite un mesaj prin cutia poştală CP1
z Procesul Proc2 răspunde procesului Proc1 prin intermediul
cutiei poştale CP2
z Se pot realiza aplicaţii de tip client server dacă informaţiile
transmise se pot încadra într-un mesaj
z Se pot realiza aplicaţii cu mai mulţi clienţi şi un server.
– o CP comună
– fiecare client va fi servit prin intermediul unei cutii poştale separate
Observaţii
z Prin cele două cutii poştale se pot transmite mesaje de tipuri şi
dimensiuni diferite
Comunicare bidirecţională
Proc1 () {
:
Trimite mesaj în cutia poştală CP1
Aşteaptă mesaj în cutia poştală CP2
:
}
Proc2 () {
:
Aşteaptă mesaj din cutia poştală CP1
Trimite mesaj în cutia poştală CP2
:
}
Utilizarea cutiei poştale ca semafor
binar

z Iniţializarea în starea disponibil: iniţializare


cutie poştală cu mesaj
z Iniţializare în starea indisponibil: iniţializare
cutie poştală fără mesaj
Utilizarea cutiei poştale ca semafor
binar

ProcAstept ( ){ ProcAstept ( ){
: :
Aşteaptă mesaj în cutia poştală Ia în posesie semafor binar
: :
} }

ProcSemnal ( ){ ProcSemnal ( ){
: :
Trimite mesaj în cutia poştală Eliberează semafor binar
: :
} }

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