Comunicarea Intre Proceseprin Semafoare UNIX

18
 Comunicarea intre procese prin semafoare UNIX Marinescu Ionela-Anisoara

Transcript of Comunicarea Intre Proceseprin Semafoare UNIX

8/18/2019 Comunicarea Intre Proceseprin Semafoare UNIX

http://slidepdf.com/reader/full/comunicarea-intre-proceseprin-semafoare-unix 1/18

 

Comunicarea intre procese

prin semafoare UNIX

Marinescu Ionela-Anisoara

8/18/2019 Comunicarea Intre Proceseprin Semafoare UNIX

http://slidepdf.com/reader/full/comunicarea-intre-proceseprin-semafoare-unix 2/18

 

 Noţiunea de semafor a fost introdusă de Dijkstra şi Scholten. Implementărileunor primitive de sincronizare a proceselor, cum ar fi waitsi!nal, au fost făcute de"rinch #ansen, altele, de tipul $%, de Dijkstra, $atil, Saal, &idle etc.

Semafoarele sunt resurse I$' folosite pentru sincronizarea intre procese (e.!. pentru controlul accesului la resurse). *peratiile asupra unui semafor pot fi desetare sau verificare a valorii (care poate fi mai mare sau e!ala cu +) sau de test

and set . n semafor poate fi privit ca un contor ce poate fi incrementat sidecrementat, dar a carui valoare nu poate scadea su- +.

n identificator id permite accesul la o multime de nsops semafoare un apel semget  ofera accesul nu la un sin!ur semafor, ci la un set/multime de semafoare(eventual continand un sin!ur semafor).

*peratiile de citire, incrementare sau decrementare a semafoarelor dintro multimesunt e0ecutate printrun apel semop(), care proceseaza nsops operatii la un

moment dat, operatii aplicate numai in cazul in care toate se termina cu succes1fiecare operatie e specificata printro structura sembuf . *peratiile asuprasemafoarelor pot avea un fla! S23ND*, care comanda ca la terminarea procesului rezultatul operatiei sa fie undone.

8/18/2019 Comunicarea Intre Proceseprin Semafoare UNIX

http://slidepdf.com/reader/full/comunicarea-intre-proceseprin-semafoare-unix 3/18

 

Daca se incearca o operatie de decrementare si aceasta nuse poate produce (valoarea semaforului nu poate scadea su-+), procesul va fi pus in asteptare intro coada pana laincrementarea valorii semaforului  semval  (daca nu a fost

specificat I$'N*45I6). * operatie de citire poate duce, lafel, la punerea procesului in asteptare intro coada, pana cand semval  devine +.

  Sunt prezentate 7n continuare cele mai cunoscute primitivede sincronizare $ şi %.

 P(v){

e(v) = e(v) - 1;

if ( e(v) < 0) {

 stare_proces = blocat; procesul este trecut n coada f(v);

 !  ! 

8/18/2019 Comunicarea Intre Proceseprin Semafoare UNIX

http://slidepdf.com/reader/full/comunicarea-intre-proceseprin-semafoare-unix 4/18

 

V(v) 

{  

e(v) = e(v) " 1; 

if ( e(v) <= 0) {  

 selectea#a un proces din coada f(v);  stare_proces_selectat = activ; 

 ! 

 ! 

%aloarea curentă a semaforului este8e(v) 9 e+(v) : n%(v) n$(v)

  unde n%(v) reprezintă numărul de primitive % e0ecutate asupra semaforului v, iarn$(v) reprezintă numărul de primitive $ e0ecutate asupra semaforului v.

$entru realizarea unei re!iuni (secţiuni) critice se va proceda astfel8 valoarea iniţialăa semaforului este ;, iar re!iunea critică este delimitată de primitiva $ şi % astfel8

$(v)1

re!iune critică1

%(v)1

rest proces1

8/18/2019 Comunicarea Intre Proceseprin Semafoare UNIX

http://slidepdf.com/reader/full/comunicarea-intre-proceseprin-semafoare-unix 5/18

 

Se su-liniază faptul că primitivele $ şi %, şi 7n !eneral toate primitivele de sincronizare, sunt indivizi-ile (atomice).

<n NI= S>stem %, noţiunea de semafor a fost !eneralizată.5stfel, asupra unui semafor pot fi date mai multe operaţii simultan

(primitivele $ şi % erau apelate la momente de timp diferite 7ntrun proces), iar valoarea de decrementare sau incrementare nu tre-uiesă fie neapărat ;. 6oate operaţiile e0ecutate de funcţiile de sistemaferente sunt indivizi-ile. Dacă nucleul nu poate e0ecuta toateoperaţiile cerute 7ntrun proces, nu se e0ecuta nici una, procesulfiind trecut 7n stare de aşteptare p?nă c?nd vor putea fi e0ecutatetoate operaţiile.

n proces poate crea un ansam-lu de semafoare. 5nsam-lul areo intrare 7n ta-ela semafoarelor, care constituie antetul setului.

 Nucleul asociază procesului o ta-elă cu at?tea elemente, c?tesemafoare sunt 7n set. @iecare element păstrează valoarea asociatăsemaforului corespondent.

Aestionarea semafoarelor este asemănătoare cu !estionareamemoriei comune şi a cozilor de mesaje. 5stfel, un proces poateavea acces la structurile le!ate de semafoare numai dacă cunoaştecheia asociată. Intern setul de semafoare este identificat printrunnumăr 7ntre!, numit identificatorul setului.

8/18/2019 Comunicarea Intre Proceseprin Semafoare UNIX

http://slidepdf.com/reader/full/comunicarea-intre-proceseprin-semafoare-unix 6/18

 

$rin intermediul identificatorului setului, un proces poate opera asupra unuianumit semafor.

n set de semafoare are asociate8 un identificator, care este un număr 7ntre! pozitiv, similar cu descriptorul de fişier şi o structură de date de tipul semidds.

 struct semid_ds {   struct ipc_perm sem_perm;  struct sem $sem_base; int sem_nsens; time_t sem_otime; 

time_t sem_ctime; 

 !; '?mpurile structurii au următoarele semnificaţii8

B semperm este o structură de tipul ipcperm prezentată deja.B Sem-ase este un pointer la primul semafor din set. Nu este util unui proces

utilizator, deoarece referă o adresă 7n nucleuB .Semnsens indică numărul semafoarelor din set. @iecare semafor din ansam-lu

are un număr de identificare 7ntre + şi numărul semafoarelor minus ;, numitsemnum1

8/18/2019 Comunicarea Intre Proceseprin Semafoare UNIX

http://slidepdf.com/reader/full/comunicarea-intre-proceseprin-semafoare-unix 7/18

 

B Semotimeindică timpul la care a avut loc ultima operaţie asupraansam-lului de semafoare prin operaţia semop1

B Semctimeindică timpul la care a avut loc ultima modificare a structurii dedate.

n proces poate avea acces la un set de semafoare dacă 7ndeplineşte una dincondiţiile următoare8

B $rocesul este al superuserului1

B ID utilizatorului, uid, coincide cu semperm.cuid sau cu semperm.uid

  şi este prevăzut 7n semperm.mode dreptul de acces dorit1

B utilizatorul are ID de !rup, !id, identic cu semperm.c!id sau cusemperm.!id şi este prevăzut 7n semperm.mode dreptul de acces dorit1

B utilizatorul face parte din cate!oria Calţi utilizatoriC şi este prevăzut 7n

semperm.mode dreptul de acces dorit.

8/18/2019 Comunicarea Intre Proceseprin Semafoare UNIX

http://slidepdf.com/reader/full/comunicarea-intre-proceseprin-semafoare-unix 8/18

 

Structura de date asociată unui semafor este8struct sem ushort semval1 pidt sempid1ushort semncnt1us%ort semzcnt ;

 !;

unde&

B semval este valoarea semaforului, o valoare 7ntrea!ă mai mare sau e!ală cuzero1B sempid reprezintă ID ultimului proces care a operat asupra semaforului1B semncnt este numărul proceselor care aşteaptă ca valoarea semaforului

semval să devină mai mare dec?t valoarea sa actuală1

B  semzcnt este numărul proceselor care aşteaptă ca valoarea semaforuluisemval să devin' #ero

8/18/2019 Comunicarea Intre Proceseprin Semafoare UNIX

http://slidepdf.com/reader/full/comunicarea-intre-proceseprin-semafoare-unix 9/18

 

@unctia de sistem semget 

* multime de semafoare e alocata printrun apel de sistem semget() 8int semid 9 sem!et(ke>t ke>, int nsems, int semfl!)1$arametri 8B ke> un intre! o-tinut de o-icei prin ftok() sau I$'$&I%562B nsems numarul de semafoare in multime (+ E9 nsems E9 S233SF1 +

inseamna donGt care) semfl!B I$''&256 creeaza o resursa daca ea nu e0ista deja

B I$''&256 H I$'2='F daca resursa e0ista deja, apelul esueazaB rw0rw0rw0 permisiuni de acces specificate ca in cazul fisierelorB @uncţia de sistem sem!et permite o-ţinerea ID unui set de semafoare. Dacă

setul de semafoare nu e0istă anterior, acesta este creat. Indiferent dacă setule0istă sau nu, procesul tre-uie să cunoască cheia asociată semaforului.

Interfaţa funcţiei sem!et este8include Es>s/t>pes.hJinclude Es>s/ipc.hJinclude Es>s/sem.hJint sem!et( ke>t cheie, int nrsem, int ind)1

8/18/2019 Comunicarea Intre Proceseprin Semafoare UNIX

http://slidepdf.com/reader/full/comunicarea-intre-proceseprin-semafoare-unix 10/18

 

&eturnează ID semaforului 7n caz de succes, (;) 7n caz de eroare.

unde,

B cheie reprezintă cheia ataşată setului de semafoare1

B nrsem este numărul semafoarelor din set. Dacă un nou set este creat (de

re!ula 7n server), tre-uie precizată valoarea nrsem. Dacă se refera un set caree0ista, valoarea nrsem este +.

B ind indică acţiunea de creare şi drepturile de acces la setul de semafoare.

$entru a crea un set de semafoare, tre-uie precizate toate cele treiar!umente, iar indicatorul I$''&256 tre-uie poziţionat. 2ste recomandatăşi poziţionarea indicatorului I$'2='F cu rolul de a semnala e0istentă unuiset de semafoare av?nd ataşată aceeaşi cheie. 5r!umentul ind este specificatsu- forma8

drepturi_de_acces | IPC_CREAT | IPC_EXCL 

Dacă nu este setat indicatorul I$'2='F, atunci 7n cazul e0istentei setuluicreat anterior asociat la cheia indicată, nu se semnalează eroare, ci sereturnează ID setului.

8/18/2019 Comunicarea Intre Proceseprin Semafoare UNIX

http://slidepdf.com/reader/full/comunicarea-intre-proceseprin-semafoare-unix 11/18

 

n e0emplu de creare a unui set de semafoare8define K2L ;MMsemid9sem!et( (ke>t) K2L, , +OOO H I$''&256)1

Dacă se doreşte numai o-ţinerea ID unui set de semafoare, apelul funcţieisem!et se face preciz?nd valoarea cheii şi zero pentru ceilalţi parametri.

Fa crearea unui set de semafoare, structura de date asociată este completată cuurmătoarele informaţii8B semperm.cuid, semperm.uid conţin ID utilizatorului ataşat procesului care a

lansat apelul sem!et1B semperm.c!id, semperm.uid conţin ID !rupului de utilizatori ataşat

 procesului care a lansat apelul sem!et1B semperm.mode conţine drepturile de acces prevăzute 7n apelul funcţiei

sem!et de ar!umentul ind1

B semnsems conţine numărul de semafoare indicat 7n apelul funcţiei sem!et1B semctime este completat cu valoarea curentă a timpului.B semotime are valoarea +.

8/18/2019 Comunicarea Intre Proceseprin Semafoare UNIX

http://slidepdf.com/reader/full/comunicarea-intre-proceseprin-semafoare-unix 12/18

 

n set de semafoare poate să nu ai-ă cheie de acces ataşată. <n acest caz, lacreare setului, apelul funcţiei sem!et se face preciz?nd drept valoare pentrucheie constantă sim-olică I$'$&I%562.

@uncţia de sistem semctl 

@uncţia de sistem semctl are rolul de a efectua o serie de operaţii asupra

structurii asociate unui set de semafoare8 citirea şi modificarea informaţiilordin structura de date asociată setului de semafoare sau din cea asociată unuisemafor sau şter!erea setului.

vector (+ E nsops E S23*$3)

Interfaţă funcţiei semctl este8

include Es>s/t>pes.hJ

include Es>s/ipc.hJ

include Es>s/sem.hJ

int semctl( int semid, int nrsem, int cmd, union semun ar!)1

8/18/2019 Comunicarea Intre Proceseprin Semafoare UNIX

http://slidepdf.com/reader/full/comunicarea-intre-proceseprin-semafoare-unix 13/18

 

&eturnează valorile aferente pentru toate comenzile A26, e0cepţie făc?ndcomanda A265FF. <n rest +.

unde,

B semid reprezintă ID setului de semafoare o-ţinut prin apelul funcţiei

sem!et1B nrsem este numărul semaforului din set asupra căruia se e0ecuta comanda

cmd indicată 7n funcţia semctl (numerotarea 7ncepe cu +)1

B cmd este operaţia dorită, av?nd următoarele valori8

;. A26%5F@uncţia returnează valoarea semval a semaforului cu numărulnrsem1

P. S26%5F5ctualizează valoarea semval a semaforului cu numărul nrsemla valoarea specificată de c?mpul ar!.val.

Q. A26$ID@uncţia returnează valoarea sempid pentru semaforul nrsem1R. A26N'N6@uncţia returnează valoarea semncnt pentru semaforul nrsem1

. A26'N6@uncţia returnează valoarea semzcnt pentru semaforul nrsem1

O. A265FF%alorile semval ale tuturor semafoarelor din set sunt memorate 7nta-loul referit de ar!.arra>1

8/18/2019 Comunicarea Intre Proceseprin Semafoare UNIX

http://slidepdf.com/reader/full/comunicarea-intre-proceseprin-semafoare-unix 14/18

 

T. S265FF%alorile semval ale tuturor semafoarelor din set sunt actualizate lavalorile corespondente din ta-loul ar!.arra>.

U. I$'S6562lementele structurii semidds sunt salvate 7n structura referita dear!.-uf1

M. I$'S26 %alorile pentru c?mpurile semperm.uid, semperm.!id şisemperm.mode sunt actualizate conform valorilor din ar!.-uf. 3odificarea poate fi facută de un proces superuser sau de catre un proces al carui IDutilizator efectiv este e!al cu semperm.uid sau semperm.cuid.

;+. I$'&3IDVter!erea setului de semafoare. Vter!erea este imediată, astfel7nc?t orice alt proces ce foloseşte semaforul va recepţiona o eroare la operaţii

asupra semaforului ( 2ID&3). 'omanda poate fi e0ecutată numai de un proces superuser sau de un proces al cărui ID utilizator efectiv e!al cusemperm.uid sau semperm.cuid.

ar! este un tip varia-il pentru specificarea ar!umentelor operaţiei cmd8union semun 

int al1 /W pentru S26%5F W/struct semidds Wbuf 1 /W pentru I$'S656 şi I$'S26 W/ushort Warra!1 /W pentru A265FF şi S265FF W/X1

8/18/2019 Comunicarea Intre Proceseprin Semafoare UNIX

http://slidepdf.com/reader/full/comunicarea-intre-proceseprin-semafoare-unix 15/18

 

@uncţia de sistem semop 

*peratiile pe semafoare sunt e0ecutate de apeluri semop() 8

int semop(int semid, struct sem-uf Wsops, unsi!ned nsops)1

$arametri 8B semid IDul o-tinut printrun apel sem!et

B sops vectorul de operatii pe semafoare

B nsops numarul de operatii in vector (+ E nsops E S23*$3)

Intoarce semval pentru ultima operatie efectuata, sau ; in caz de eroare.

@uncţia de sistem semop are rolul de a efectua operaţii de adunare şi scădereasupra unor semafoare din set.

Interfaţa funcţiei este8

include Es>s/t>pes.hJ

include Es>s/ipc.hJinclude Es>s/sem.hJ

int semop( int semid, struct sem-uf operYZ, sizet nroper)1

8/18/2019 Comunicarea Intre Proceseprin Semafoare UNIX

http://slidepdf.com/reader/full/comunicarea-intre-proceseprin-semafoare-unix 16/18

 

&eturnează + 7n caz de succes, (;) 7n caz de eroare.

unde,

B semid reprezintă ID setului de semafoare o-tinut prin apelul functiei sem!et1

B oper este un pointer la un set de nroper structuri de tipul sem-uf.

Structura sem-uf este definită astfel8struct sembuf  

ushort sem_num1

short sem_op1

short sem_flg1 /W I$'N*45I6, S23ND* W/X1

unde,

B semnum indică numărul semaforului din set identificat prin semid.

B semop indică operaţia de efectuat după convenţiile date de valoarea lui semfl!.

B *peraţia pe fiecare mem-ru al setului este specificată de valoarea aferentasemop.

8/18/2019 Comunicarea Intre Proceseprin Semafoare UNIX

http://slidepdf.com/reader/full/comunicarea-intre-proceseprin-semafoare-unix 17/18

 

Dacă8semop E +

a) Dacă semval J9 HsemopH, atunci semval 9 semval HsemopH. 5cest lucruasi!ură că valoarea rezultată pentru semafor este J9 +. Dacă indicatorul

S23ND* este poziţionat, atunci HsemopH este adunat la semadjcorespondent semaforului 7n ta-ela asociată 7n proces pentru setul desemafoare1

 -) Dacă (semval E HsemopH) [ (semfl! [ I$'N*45I6) 9 true, funcţiareturnează un cod de eroare1

c) Dacă (semval E Hsemop) şi indicatorul I$'N*45I6 nu este specificat,

 procesul este -locat p?nă c?nd se 7ndeplineşte una dintre condiţiile8

semval J9 HsemopH (alt proces a eli-erat vreo resursa)1semaforul este şters din sistem. @uncţia returnează 7n acest caz (;) şierrno92&3ID.

dacă un semnal este tratat de proces şi se revine din rutina de tratare. <n acest cazvaloarea semncnt pentru acest semafor este decrementată şi funcţia returnează (;)cu errno92IN6&.semop J + atunci semval9semval : semop. Dacă indicatorul S23ND* este pozitionat, atunci 7n ta-ela asociată 7n proces pentru setul de semafoare

semadj 9 semadj semop pentru semaforul asupra căruia se e0ecută operaţia.

8/18/2019 Comunicarea Intre Proceseprin Semafoare UNIX

http://slidepdf.com/reader/full/comunicarea-intre-proceseprin-semafoare-unix 18/18

 

semop 99 +a) Dacă semval 99 +, atunci funcţia se termină imediat1 -) Dacă (semval EJ +) şi indicatorul I$'N*45I6 este poziţionat, funcţia

returnează (;) şi errno925A5IN1c) Dacă (semval EJ +) şi indicatorul I$'N*45I6 nu este poziţionat, procesul

este -locat p?nă c?nd semval devine zero, sau setul de semafoare este distrussau procesul primeşte un semnal.Indicatorul undo pentru un semafor este de fapt indicatorul corespunzător -itului S23ND* din semfl!.

"i-lio!rafie 8

  Y;Z.http8//users.utcluj.ro/\somodi/soP/la-;Q;R.htmlYPZ.http8//www.cs.pu-.ro/\so/inde0.php]section9Fa-oratoare[file9+.^P+I$'^P+(;)Semafoare