curs 4-sisteme de operare

15
1.Caracterizati notiunea de concurenta intre doua procese. Concurenţa reprezinta situaţia în care mai multe procese citesc sau scriu pe un set de date partajate şi rezultatul final depinde de care proces ruleaza si când anume. Procesele concurente numiteşi procese paralele, presupun că la un moment dat, mai multe programe pot fi urmărite între punctul de începereşi terminare a execuţiei; în acest caz procesele interacţionează în două moduri: - indirect, prin concurarea la aceiaşi resursă a sistemului; - direct, prin utilizarea simultană a aceloraşi resurse. Se constată situaţia în care procesele îşi afectează reciproc, într- un mod nedorit, execuţia activitaţilor critice ( să presupunem ca două procese încearcă în acelaşi timp să aloce ultimul 1MB de memorie). Dificultatea apare pentru că un proces B începe sa folosească una din variabilele partajate înainte ca un proces A să se termine. Acestă situaţie poate fi evitată dacă se interzice citirea si scrierea de către mai multe procese simultan a datelor partajate. Pentru a fi evitată concurenţa şi a avea o soluţie buna trebuiesc îndeplinite patru condiţii: i. Oricare două procese nu se afla simultan în regiunile lor critice. ii. Nici un fel de presupunere nu se poate face asupra vitezelor sau numarului de UCP-uri. iii. Nici un proces care rulează în afara regiunii lui critice nu poate bloca alte procese. iv. Nici un proces nu trebuie să aştepte la infinit pentru a intra în regiunea lui critică. (Tanembaum, 2001) Concurență/competiție acces exclusiv (secțiuni critice) rezultate predictibile accesul concurent poate produce inconsistențe serializarea accesului Exemplu: Un proces (P1) folosește resursa R Un alt proces (P2) solicită resursa R prelucrată de P1 P2 trebuie să aștepte (acces exclusiv) eliberarea resursei R 2.Caracterizati notiunea de sincronizare intre doua procese. Sincronizarea proceselor include mecanisme prin care anumite procese vor fi oprite la un moment dat, până ce apar anumite evenimente ce se află sub controlul altei activităţi. Problema sincronizării apare

Upload: cineva

Post on 15-Jan-2016

28 views

Category:

Documents


2 download

DESCRIPTION

Intrebari

TRANSCRIPT

Page 1: curs 4-Sisteme de operare

1.Caracterizati notiunea de concurenta intre doua procese.Concurenţa reprezinta situaţia în care mai multe procese citesc sau scriu pe un set de date partajate şi rezultatul final depinde de care proces ruleaza si când anume. Procesele concurente numiteşi procese paralele, presupun că la un moment dat, mai multe programe pot fi urmărite între punctul de începereşi terminare a execuţiei; în acest caz procesele interacţionează în două moduri: - indirect, prin concurarea la aceiaşi resursă a sistemului; - direct, prin utilizarea simultană a aceloraşi resurse. Se constată situaţia în care procesele îşi afectează reciproc, într-un mod nedorit, execuţia activitaţilor critice ( să presupunem ca două procese încearcă în acelaşi timp să aloce ultimul 1MB de memorie). Dificultatea apare pentru că un proces B începe sa folosească una din variabilele partajate înainte ca un proces A să se termine. Acestă situaţie poate fi evitată dacă se interzice citirea si scrierea de către mai multe procese simultan a datelor partajate.Pentru a fi evitată concurenţa şi a avea o soluţie buna trebuiesc îndeplinite patru condiţii: i. Oricare două procese nu se afla simultan în regiunile lor critice. ii. Nici un fel de presupunere nu se poate face asupra vitezelor sau numarului de UCP-uri. iii. Nici un proces care rulează în afara regiunii lui critice nu poate bloca alte procese. iv. Nici un proces nu trebuie să aştepte la infinit pentru a intra în regiunea lui critică. (Tanembaum, 2001)

• Concurență/competiție– acces exclusiv (secțiuni critice)

• rezultate predictibile• accesul concurent poate produce inconsistențe• serializarea accesului

– Exemplu:• Un proces (P1) folosește resursa R• Un alt proces (P2) solicită resursa R prelucrată de P1• P2 trebuie să aștepte (acces exclusiv) eliberarea resursei R

2.Caracterizati notiunea de sincronizare intre doua procese.Sincronizarea proceselor include mecanisme prin care anumite procese vor fi oprite la un moment dat, până ce apar anumite evenimente ce se află sub controlul altei activităţi. Problema sincronizării apare datorită partajării resurselor în legătură cu alocarea proceselor pentru execuţia şi comunicaţia între procese . Sincronizarea este necesară la uniprocesoare, multiprocesoare şi in reţelele de calculatoare. Un program paralel constă din mai multe procese independente ce cooperează pentru a rezolva o problemă. Cooperarea se poate realiza prin intermediul unei memorii partajate.Sistemul de operare trebuie să ofere cel putin un mecanism de bază care să permită comunicarea şi sincronizarea în cadrul unui set de procese. În sistemele multiprogramate, aceste operaţii de comunicaţie se pot realiza prin intermediul fişierelor.Un proces poate oferi unui proces informaţii scriind date într-un fişier astfel încât celălalt proces să poată deschide fişierul şi să poată citi informaţiile respective. În general,comunicarea şi sincronizarea prin intermediul fişierelor partajate este greoaie, iar procesele trebuie să fie capabile să se sincronizeze pe baza unui mecanism mai simplu decât acela de a partaja accesul la un fişier. Sistemele de tip timesharing stimulează nevoia unei metode mai facile de comunicare şi sincronizare între procese. În astfel de sisteme, un singur utilizator poate să creeeze două procese, rezultatul primului proces putând fi rutat spre intrarea celui de-al doilea proces. Conductele (pipe) UNIX implementează o astfel de facilitate. Programele bazate pe conlucrare trebuie să fie construite astfel încât procesele să poată accesa informaţiile comune, totuşi fară a interfera unul cu altul pe parcursul unor porţiuni critice ale execuţiei lor. Această condiţie introduce o problemă de sincronizare numită problema secţiunii critice. O a doua problemă este existenţa unui punct de blocare ( deadlock) în cadrul proceselor cooperante. Acest lucru înseamna că două sau mai multe procese pot fi în situţia în care fiecare deţine resursele necesare celuilalt proces şi nici unul nu poate continua executia fără ca să îi cedeze celuilalt resursele. (Dodescu, 2003)

Page 2: curs 4-Sisteme de operare

• Coordonare– ordonarea acțiunilor unui proces în funcție de acțiunile altui proces

• P1 folosește R1 și produce R2• P2 solicită R2• P2 trebuie să aștepte ca P1 să producă R2 (sincronizare)

3.Dati un exemplu de situatie in care doua procese se gasesc în conditii de competitie. Considerăm existenta a doua procese A şi B a căror scop este tipărirea unui fişier la imprimantă. Când un proces vrea să tiparească un fişier, introduce numele fişierului într-un catalog de tipărire special (spooler directory). Alt proces, care se ocupă de tipărirea documentelor (printer daemon), verifică periodic dacă există fişiere de tipărit şi, dacă există, le tipareşte şi apoi şterge numele lor din catalog. Acest catalog de tipărire are un număr foarte mare de locaţii, identificate prin 0,1,2... fiecare fiind capabilă să memoreze numele unui fişier în fiecare lot. De asemenea există două variabile partajate, out, care indică următorul fişier care trebuie tiparit şi in, care indică următorul loc liber în catalog.Aceste doua variabile pot fi păstrate foarte bine într-un fişier de doua cuvinte, disponibil tuturor proceselor.

În figură se constată că loturile de la 0 pana la 3 sunt libere (fişierele au fost deja tipărite) şi loturile de la 4 pâna la 6 sunt încarcate (cu numele fişierelor care aşteaptă să fie tipărite). Situaţia care o discutăm este următoarea: mai mult sau mai puţin simultan, procesele A şi B solicită să înscrie un fişier pentru tipărire. Poate apărea situaţia în care procesul A citeşte variabila in şi salvează valoarea 7, într-o variabilă locală numită următorul_loc_liber. Chiar atunci apare o întrerupere de ceas şi UCP decide că procesul A s-a executat suficient, aşa că va comuta la procesul B. Procesul B citeşte şi el in şi primeşte tot un 7. Şi el o va salva în variabila sa locală următorul_loc_liber. În acest moment ambele procese consideră că următorul loc disponibil este 7. Procesul B continuă sa se execute. Salvează numele fişierului lui în locul cu numărul 7 şi actualizează in la valoarea 8.Apoi, se execută mai departe. La un moment dat, procesul A îşi va relua execuţia.

Page 3: curs 4-Sisteme de operare

Verifică următorul_loc_liber, găseşte valoarea 7 acolo şi scrie numele fişierului lui în locul cu numărul 7, ştergând numele pe care procesul B tocmai îl scrisese acolo.Apoi calculeaza urmatotul_loc_liber +1, adica 8 şi setează in la valoarea 8. Catalogul de tipărire are acum o stare internă consistentă, aşa că procesul care se ocupă de imprimare nu va observa nimic în neregulă, dar procesul B nu va primi niciodata un rezultat. Utilizatorul B va aştepta lânga imprimantă ani de zile, tânjind după rezultatul care nu va veni niciodata. Situaţii ca acestea, în care două sau mai multe procese citesc sau scriu date partajate şi rezultatul final depinde de care proces rulează şi când anume sunt numite condiţii de cursa (race conditions). (Tanembaum, 2001)

4.Doua procese sunt mutual exclusive.Explicati.Pentru a preveni efectele generate de condiţiile de competiţie este necesar ca procesele să fie mutual exclusive.Dacă un proces rulează şi partajează resurse cu alt proces, acesta din urmă nu se poate lansa în execuţie până la finalizarea execuţiei primului.Zona în care două procese accesează memoria partajată de ambele se numeşte secţiune critică. Dacă reuşim ca două procese să nu se afle în secţiunea critică simultan putem evita competiţiaîn sine. Condiţiile obţinerii exclusivităţii mutuale sunt: i. Două procese nu se pot afla simultan în zona critică. ii. Nu ne raportăm la numărul şi viteza de prelucrare a procesoarelor. iii. Niciun proces, care rulează în afara secţiunii sale critice nu poate bloca un alt proces. iv. Un proces nu poate fi blocat la infinit la intrarea sa în secţiunea critică. Exemplu: Situaţia pe care o discutăm este următoarea: Două procese A şi B doresc simultan tipărirea unui fişier.Procesul A citeşte variabila In şi o stocheza 7.Procesorul blochează execuţia Procesului A şi redă controlul Procesului B. Procesul B se execută şi plasează numele fişierului de tipărit în 7 şi seteaza In=8. Procesotul blochează Procesul B şi transferă controlul Procesului A. Procesul A citeşte In=7 şi plasează numele fişerului său de tipărit în lot 7 şi seteayă In=8. În această situţie putem spune că peocesele A şi B se exclud mutual. Situaţiile în care mai multe procese citesc sau scriu pe un set de date partajate şi rezultatul final depinde de care proces rulează şi când anume, se numesc condiţii de cursa .

Excluziunea mutuală depinde de:1. Două procese nu se pot afla simultan în secțiunea critică2. Nu se fac presupuneri referitoare la numărul și viteza UCP3. Nici un proces care rulează înafara propriei sale secțiuni critice nu poate bloca un alt

proces4. Nu se poate bloca la infinit, intrarea unui proces în secțiunea sa critică

Soluțiile existente sunt:• Excluziune mutuală utilizând așteptarea ocupată (busy waiting)• activarea și dezactivarea proceselor (Sleep and wakeup)• Semafoare• Mutex-uri• Monitoare• Comunicarea prin mesaje

Page 4: curs 4-Sisteme de operare

• Bariere

Excluziune mutuală utilizând busy waiting se poate realiza prin:• Dezactivarea întreruperilor • Utilizarea unor biți de atenție• Alternarea strictă a execuției proceselor• Soluția lui Peterson• Utilizarea instrucțiunii TSL.

5.Ce reprezinta o sectiune critica?

Secţiunea crtitică reprezintă zona în care două procese accesează memoria partajată de ambele procese. Problema evitării condiţiilor de cursă poate fi de asemenea formulată într-o manieră abstractă. O parte din timp un proces este ocpuat cu execuţia calculelor interne şi a altor lucruri care nu conduc la condiţii de cursă. Totuşi, un proces trebuie uneori să eceseze memoria sau fişierele partajate, sau să execute alte activităţi critice care pot conduce la curse. Partea de program în care memoria partajată este accesată se numeşte regiune critică (critical region) sau secţiune critică (critical section). Daca s-ar putea aranja lucrurile astfel încât oricare din două procese să nu fie niciodată în acelaşi timp în regiunile lor critice, am putea evita cursele. (Tanembaum, 2001)

6.Doua procese obtin exclusivitate mutuala prin metoda de dezactivare a intreruperilor. Prezentati dezavantajele metodei.Exclusivitatea mutuală utilizând busz waiting-ul are ca primă soluţie dezactivarea întreruperilor. Această abordare prezintă următoarele dezavantaje: a) Dacă două procese pot dezactiva întreruperile există posibilitatea ca acestea să blocheze activarea ulterioară a întreruperilor.

b) Dacă lucrăm pe un sistem multiprocesor există posibilitatea ca un proces să dezactiveze întreruperile doar pentru unu din procesoare , metoda devenind astfel ineficientă. c) Deoarece sistemul de operare pentru buna sa operare realizează periodic apeluri de sistem, dezactivarea întreruperilor la un moment inoportun poate afecta funcţionalitatea sistemului de operare.

Concluzia este : O astfel de metodă poate fi folosită cu succes doar de procese care opereaza la nivel Kernel.

7.Ce reprezinta un bit de atentie? Un mecanism de sincronizare pentru coordonarea şi comunicarea între procese este :biul de atenţie. Prin această modalitate, orice resursă partajată de "n" procese va dispune de un bit de atenţie "lock-bit" folosindu-se convenţia: lock-bit = 0 - resursa este disponibilă; lock-bit =1 - resursa este în folosinţă.

Înainte ca un proces să aibă acces la un procesor, acesta va verifica starea lock-b it-ului: dacă lock-bit = 0 atunci este permis acestui proces să aibă acces la procesor, iar la terminarea execuţiei va trece lock-bit-ul în starea iniţială 0; dacă pe parcursul execuţiei un alt proces va solicita procesorul, acesta va găsi lock-bit-ul în starea 1, el fiind trecut în starea de aşteptare până când lock-bit-ul devine 0.

Page 5: curs 4-Sisteme de operare

8.Prezentati metoda de alternare stricta a executiei proceselor si dezavantajele ei. Presupunem două procese A şi B. Această soluţie este o soluţie care impune celor două procese Aşi B să alterneze accesul in regiunile lor critice, de exemplu in inregistrarea fişierelor pentru tipărire. Nici unul dintre procese nu va avea voie să zicem să inregistreze consecutiv două fişiere. Astfel spus un proces care nu se află in zona critică poate să blocheze un alt proces. Ştiind de cele patru condiţii de cooperare ne dăm seama că această soluţie incalcă condiţia de eficienţă care spune că nici un proces care rulează in afara zonei critice să nu blocheze alte procese. Deşi acest algoritm evită cursele nu este eficient. În secvenţa de mai jos, variabila de tip întreg turn, inițial cu valoarea 0, determină al cui rând este să intre în regiunea critică și să verifice sau să actualizeze memoria partajată.Inițial, procesul 0 verifică turn, observă că are valoarea 0 și intră in regiunea critică.Procesul 1 gasește tot valoarea 0 și de aceea ciclează într-o bucla mică, verificând mereu turn până devine 1.Verificarea în continuu a unei variabile până când are o anumită valoare se numește așteptare opcupată (busy waiting).Aceasta trebuie evitata întotdeauna, deoarece irosește timp pe procesor. Așteptarea ocupată este folosită doar atunci când probabilitatea ca așteptarea să fie scurtă esterezonabilă.Un zăvor care folosește aşteptarea ocupată se numește spin lock

(a) Procesul 0 (b) Procesul 1

Când procesul 0 părăsește regiunea critică, va seta turn pe 1, pentru a permiteprocesului 1 să intre în regiunea lui critică.Să presupunem că procesul 1 termină execuția regiunii lui critice repede, astfel că ambele procese sunt în afara regiunii lor critice, cu turn având valoarea 0.Acum, procesul 0 execută rapid intreaga buclă, ieșind din regiunea lui critică și modificănd turn la valoarea 1.În acest moment turn are valoarea 1 și ambele procese se execută în afara regiunilor lor critice. Brusc, procesul 0 termină și execuția regiunii sale necritice și reia bucla.Din păcate, acum nu îi este permis să intre în regiunea critică, deoarece turn are valoarea 1, iar procesul 1 este ocupat cu execuția regiunii sale necritice.Procesul 0 va rămâne agățat în bucla while până când procesul 1 va seta turn pe 0.Cu alte cuvinte, alternarea nu este o idée bună atunci când unul dintre procese este mult mai lent decât celălalt. Această situație nu respectă condiția 3 stabilită mai sus: procesul 0 este blocat de un proces care nu se află în regiunea sa critică.Întorcându-ne la catalogul de tipariredespre care am vorbit mai sus, procesul 0 nu ar putea tipări alt fisier pentru că procesul 1 execută altceva. De fapt, acestă soluție impune celor 2 procese să alterneze stict in regiunile lor critice, de exemplu în înregistrarea fisierelor pentru tipărire.Niciunuia dintre procese nu i se va permite să înregistreze consecutive 2 fisiere.Deși acest algoritm evită cursele, nu este candidat serios pentru o soluție deoarece nu respect condiția 3. {pentru a avea o soluție bună trebuie îndeplinite 4 conditii: 1.oricare 2 procese nu se pot afla simultan în regiunile lor critice 2.niciun fel de presupunere nu se poate face asupra vitezelor sau numărului de UCP-uri 3.niciun proces care rulează în afară regiunii lui critice nu poate bloca alte procese 4.niciun proces nu trebuie să aștepte la infinit pentru a intra în regiunea lui critică.}

9.Descrieti solutia lui Peterson.Prin combinarea ideii de alternare cu ideea variabilelor zăvor si a variabilelor de avertizare, un matematician olandez T.Dekker. a fost primul care a nascocit o solutie de tipul sistemelor de programe pentru problema excluderii mutuale, care nu impunea alternarea stricta.

Page 6: curs 4-Sisteme de operare

In 1981, G.L. Peterson a descoperit un mod mai simplu de obtinere a excluderii mutuale umbrind Solutia lui Dekker. Algoritmul lui Peterson este prezentat in figura 2-201. Acest algoritm este format din 2 proceduri scrise ANSI C, ceea ce inseamă că trebuie menţionate prototipurile tuturor funcţiilor.

Pe ecran este afișat algoritmul lui Peterson pentru obținerea exclusivității mutuale între procese. Acest algoritm se bazează pe ideea că înainte de accesarea secțiunii critice fiecare proces realizează un apel enter_region având ca parametru propriul său număr de proces. Acest apel va conduce la generarea unei întărzieri la accesarea secțiunii critice dacă situația se impune. Pentru părăsirea zonei critice se realizează un apel leave_region.Analizați algoritmul [1/pag106]

1. În cazul în care ambele procese se află înafara secțiunii critice și procesul 0 realizează apelul enter_region.

2. În cazul în care ambele procese se află înafara secțiunii critice și realizează apelul enter_region.

Solutia lui Peterson pentru obţinerea excluderii mutuale.Înainte de a folosi variabilele partajate (adica înainte de a intra in regiunea lui critica), fiecare proces apelează enter_region cu numărul său de ordine, 0 sau 1, drept parametru. Acest apel îl va face să aştepte dacă este cazul, până când este în regulă să intre. După ce a terminat de utilizat variabilele partajate, procesul apelează leave_region pentru a indica faptul că a terminat pentru a permite altui proces să intre, dacă doreste. Să vedem cum functionează aceasta soluţie.Iniţial, niciun proces nu se află în regiunea lui critică.În acest moment procesul 0 apeleaza enter_region. Îsi arată interesul prin setarea elementului din vector corespunzător lui şi setează turn pe 0. Din moment ce procesul 1 nu este interesat, enter_region se termină de executat imediat. Dacă procesul 1 apelează acum enter_region, va rămâne agăţat acolo până când interested[0] devine FALSE, eveniment care se întâmplă doar când procesul 0 apelează leave_region pentru a părasi regiunea sa critică. Să considerăm acum cazul în care ambele procese apelează enter_region aproape simultan.Ambele vor salva numărul propriu de ordine turn. Salvarea care se face ultima va conta: prima va fi suprascrisa şi pierdută. (Tanembaum, 2001)

10.Ce reprezinta TSL?Multe calculatoare, mai ales cele proiectate ţinând cont de un număr mai mare de procesoare, au o instrucţiune (TSL RX, LOCK) (Teste and Set Lock) care funcţionează după cum urmează. Citeşte conţinutul lui Lock în registrul RX şi apoi salveaya o valoare diferită de zero la adresa de memorie a lui Lock. Operaţiile de citire a cuvântului şi salvării în el sunt garantat indivizibile – nici un alt proces

Page 7: curs 4-Sisteme de operare

nu poate accesa cuvântul de memorie până când instrucţiunile nu s-au terminat. Procesorul care execută instrucţiunea TSL blochează magistrala memeoriei pentru a interzice altor procesoare să acceseze memoria până ce nu a terminat de executat instrucţiunea. Pentru a utiliza TSL, se va folosi o variabilă partajată, Lock, pentru a coordona accesul la memoria partajată. Când Lock are valoarea 0, orice proces o poate seta la 1 folosind instrucţiunea TSL şi apoi să citească sau să scrie în memoria partajată. După ce termină, procesulresetează Lock înapoi la 0 folosind instrucţiunea Move. Pentru a împiedica două procese să intre în acelaşi timp în regiunile lor critice, soluţia este prezentată mai jos:

Ceea ce este prezentat mai sus este o subrutină de patru instrucţiuni, într-un limbaj de asamblare fictiv (dar tipic). Prima instrucţiune copiază vechea valoare a lui Lock în registru şi seteaya apoi Lock la 1. Apoi, vechea valoare este comparată cu 0. Dacă nu este 0, înseamnă că LOCK esra deja setat, astfel că programul reia codul de la început şi testează din nou condiţia. Mai devreme sau mai târziu va deveni 0 (atunci când procesorul se afla în regiunea lui critică va termina cu aceasta), iar subrutina se va termina, cu LOCK setat. Eliberarea lui LOCK este simplă. Programul salvează pur şi simplu un 0 în lock. Nu sunt necesare instrucţiuni speciale.O soluţie la problema regiunii critiice este clară. Înainte de a intra în regiune critică proprie, un proces apelează enter_region, care execută aşteptare ocupată până când LOCK este liber: apoi, preia LOCKulşi se intoarce din apelul enter?region. După regiunea critică, procesul apelează leave_region, care salvează un 0 în zăvor. La fel ca în cazul tuturor soluţiilor bazate pe regiuni critice, procesele trebuie să apeleze enter_region şi leave_region la momentele de timp corecte pentru ca mecanismul să funcţioneze. Dacă un proces trişează, excluderea mutuală va eşua. (Tanembaum, 2001)

11.De ce avem nevoie de metoda sleep/wakeup?

Page 8: curs 4-Sisteme de operare

Datorită faptului că soluţia lui Peterson nu poate gestiona problema inversării priorităţii s-a propus metoda Sleep and Wakeup.Să presupunem că două procese partajează un buffer de dimensiune fixă. Un proces adaugă date, celălalt extrage date.Această problemă se mai numeşte problema producător-consumator, unde p. care adaugă date în buffer este producător, iar cel care extrage date este consumator.Dacă se întâmplă ca procesorul să întrerupă execuţia procesului consumatorului şi din punct de vedere logic consumatorul se află încă în starea wakeup, producătorul va genera un semnal de wakeup, care se va pierde datorită faptului ca nu există o structură care să reţină câte apeluri wakeup au fost realizate.

12.Tratati problema producator consumator utilizand metoda sleep/wakeup.Metoda cu apeluri sleep/wake-up este o metodă simplu de implementat unde folosim apelul de sistem sleep care are ca efect blocarea apelantului, adică suspendarea execuţiei acestuia şi apelul de sistem wake/up pentru a trezi un proces. Funcţionarea acestei metode este următoarea: Fiecare dintre procese va verifica dacă este cazul să îl trezească pe celălalt şi dacă da, îl va trezi. Condiţia de cursă apare pentru că accesul la condiţia Memoria tampon plină? este nerestricţionat. Poate apărea următoarea situaţie- zona tampon este goală şi consumatorul tocmai a verificat condiţia Memoria tampon goală? pentru a verifica dacă este DA. În acest moment planificatorul de procese decide să suspende execuţia consumatorului şi începe să execute producătorul. Producătorul introduce un element în memorie şi observă că acum condiţia Memoria tampon plină? este acum DA. Deoarece condiţia tocmai a fost NU şi deci consumatorul este suspendat, producătorul apelează wakeup pentru a trezi consumatorul. Consumatorul nu este şi logic suspendat şi semnalul de trezire se va pierde şi astfel data următoare când consumatorul se va executa acesta va verifica condiţia Memoria tampon goală? Citită anterior, va găsi DA şi îşi va suspenda execuţia. După câtva timp producătorul îşi va suspenda şi el execuţia. Ambele procese vor fi suspendate. (stst.elia.pub.ro)

13.Prezentati cazul in care metoda sleep/wakeup devine ineficienta pentru rezolvarea problemei producator consumator. Problema acestei metode este pierderea suspendării consumatorului. Din păcate, consumatorul nu este şi logic suspendat, astfel că semnalul de trezire este pierdut. Data următoare când se va executa consumatorul, acesta va verifica valoarea lui count citită anterior, va găsi 0 şi îţi va suspenda execuţia. După câtva timp, producătorul va umple zona tampon şi îşi va suspenda şi el execuţia. Ambele procese vor fi suspendate pentru totdeauna.

Page 9: curs 4-Sisteme de operare

Soluţie : memorarea bitului de trezire, dacă se trimite unui proces treaz. Ulterior, dacă acesta vrea să se autoblocheze, nu o va face, dar va şterge bitul de memorare a trezirii. Fiecare proces care poate trezi un proces încă treaz va trebui să îşi aibă bitul memorat, împreuna cu adresa procesului la care se referă.

14.Ce reprezintă un semafor? Exemplificați prin rezolvarea problemei producător consumator.

15.Ce reprezintă un mutex?

• Mutex-ul este o versiune simplificată a unui semafor

• Mutex-ul este o variabilă care poate avea două stări: blocat și deblocat (1/0)

• Dacă un thread dorește accesarea secțiunii critice apelează mutex_lock. Dacă mutex-ul este deblocat thread-ul accesează secțiunea critică, altfel acesta va fi blocat până când threadul din secțiunea critică apelează mutex_unlock.

• Sunt ușor de implementat cu ajutorul instucțiunii TSL.

16.Ce reprezintă un monitor?

Page 10: curs 4-Sisteme de operare

17.Cum se realizează comunicarea între procese utilizând mesaje?

Send(destinație, &mesaj) Receive(sursă, &mesaj)

Problema producător-consumator:

• Presupunem că toate mesajele au aceiași dimensiune și că toate mesajele transmise care nu au fost încă recepționate sunt colectate într-un buffer de către SO.Numărul N de mesaje utilizate este analog celor N sloturi de memorie ale bufferului.

• Cum funcționează?

– Procesul C transmite N mesaje goale procesului P.

– Procesul P preia un mesaj gol și transmite un mesaj complet procesului C.

• Dacă unul din procese este mai rapid se formează o coadă de mesaje; pentru ca adresarea mesajului să se realizeze mai ușor(nu prin intermediul procesului) s-a propus utilizarea unei noi structuri de date numită mailbox care acționează ca un buffer încărcat cu mesaje.Asfel parametrii de adresare pentru send și receive nu vor mai fi procesele P și C ci cutiile lor poștale.

18.Ce reprezintă o barieră?