Documente Academic
Documente Profesional
Documente Cultură
tampon.preluare(mesaj_recepţionat); tampon.depozitare(mesaj_emis);
consumator(mesaj_recepţionat);
Monitorul tampon poate fi elaborat, transcriind în mod direct autorizările de depăşire:
tampon : monitor;
var n : 0..N;
non_plin, non_vid : condiţie;
<declaraţii ale procedurilor depozitare şi preluare>
procedura depozitare(m:mesaj);
begin
if n=N then
non_plin.aşteptare
endif;
n:=n+1;
introducere(m);
non_vid.semnalizare
end
procedura preluare(var m:mesaj);
begin
if n=0 then
non_vid.aşteptare
endif;
preluare(m)
; n:=n-1;
non_plin.semnalizare
end;
begin -- iniţializare
n:=0;
end
end tampon
Procedurile introducere(m) şi preluare(m) definesc politica de gestionare a tamponului şi
reprezentarea internă a mesajelor. Un caz frecvent este acela în care mesajele sunt reprezentate de
elementele succesive ale unui tablou, administrat în mod circular. În acest caz mesajele sunt preluate
în ordinea depozitării. Procedurile de gestionare a tamponului se vor scrie astfel:
type mesaj : <descrierea formatului
mesajelor> ptr : 0..N-1;
var fa : array[ptr] of
mesaj; top, coadă: ptr;
procedura intrare(m:mesaj);
begin
fa[coadă]:=m;
coadă:=coadă+1 mod
N end;
procedura ieşire(var m:mesaj);
begin
m:= fa[top];
top:=top+1 mod
N end;
<iniţializarea se va completa cu top:=0; coadă:=0;>
Această schemă poate fi extinsă pentru mai mulţi producători şi consumatori. Drept efect, procedurile monitorului
asigură accesarea exclusivă la mesaje între producători şi consumători. Totuşi, în cazul a mai mulţi consumatori schema
nu permite direcţionarea unui mesaj către un consumator anumit: putem doar garanta, că un mesaj va fi preluat de un
consumator (şi numai de unul singur) fără a specifica concret de care.
[poartă_client.recepţionarere(rezultat)]
Secvenţele din parantezele pătrate sunt facultative.
Procesul server este asociat unei porţi, unde clienţii îşi depun cererile, trimiţând cereri; el este blocat
atâta timp cât nu există cereri de servicii în aşteptare.
Serviciul cerut poate conţine trimiterea la client a rezultatului. În acest caz clientul trebuie să trimită
serverului în cererea sa numărul unei porţi la care el se va bloca în aşteptarea rezultatului.
Fără a modifica schema de mai sus putem introduce mai multe procese server echivalente, oricare
dintre ele fiind în stare să satisfacă o cerere a unui serviciu. Aceste servere în recepţie vor fi asociate la
una şi aceeaşi cutie poştală.
Modelul din 3.4.2.1 (alocarea resurselor banalizate) şi modelul client-server de mai sus sunt
reprezentative pentru două scheme de obţinere a unui serviciu cu ajutorul proceselor într-un sistem de
operare: apelarea de procedură într-un monitor sau activarea uni proces server ciclic prin emiterea
mesajelor. Alegerea între aceste două scheme este dictată de considerente de eficacitate (schema
serverului este preferată, atunci când există paralelism real între client şi server) sau de uniformitate a
structurii.