250 likes | 539 Views
Semaforet dhe Deadlock-s. Sisteme shfrytezimi Leksion 6. Semaforet. Jane nje mjet sinkronizimi per zgjidhjen e seksionit kritik Konkretisht Semafori S eshte nje variabel I tipit integer Ky variable, pervec aksesimit mund te modifikohet nga 2 metoda S : wait() dhe signal()
E N D
SemaforetdheDeadlock-s Sistemeshfrytezimi Leksion6 Iralda Mitro
Semaforet • Jane njemjetsinkronizimi per zgjidhjen e seksionitkritik • KonkretishtSemaforiSeshtenjevariabel I tipit integer • Ky variable, pervecaksesimitmundtemodifikohetnga 2 metoda • S: wait()dhesignal() • KetometodajanetevetmetqemundtemodifikojneSemaforin S • Duketpraqekjomenyreeshteshume me pak e komplikuarngaatocfarekemistudiuarderitani. Iralda Mitro
Metodat e Semaforit • Veprimet Wait dhe Signal ekzekutohen ne menyreatomike • Nesendonjeproceseshte duke modifikuarvleren e semaforit, atehereasnjeprocestjeternuk e modifikon ate ne tenjejtenkohe. • wait (S) { while S <= 0 ; // asnjeveprim S--; } • signal (S) { S++; }
Perdorimiisemaforitsimjetsinkronizimi • Counting semaphore (Semaforinumerues) – njevlerenumerikeqevarionderi ne numra pa limit • Binary semaphore (Semaforibinar) – njevlerenumerikeqevarionvetem midis vlerave 0 dhe 1; mundtejete me ilehte per t’uimplementuar • Njesemafornumeruesmundteimplementohetsinjesemaforbinar Iralda Mitro
Zgjidhja e problemitteseksionitkritik ne rastin me n-procese • Mundesonperjashtiminreciprok Semaphore S = 1; wait (S); // seksionkritik signal (S); • Te gjithe n proceset do teperdorinnjesemaforteperbashketteinicializuar me 1 • Shpjegimi: • Tek wait() vlera e S behet 0 • Procesitjeterqevjenmbetetaty, sepsenukplotesohetkushti S<=0 • Kur I pari e ndryshon s=0, e ben s=1 tek signal(), ateheremundtefutetprocesi I dyte
Implementimiisemaforeve • Duhetgarantuarqedyprocesemosteekzekutojnewait ()dhesignal()mbitenjejtinsemafor ne tenjejtenkohe • Per ketearsye, implementimiityrebehetnje problem iseksionitkritik, kukodi I wait() dhe signal() vendosen ne seksioninkritik • Mundtendodhepritjaaktive (busy waiting) ne seksioninkritik, praprocesimundteciklohetvazhdimisht ne pjesen e koditteseksionithyres • Vini re! Aplikacionetmundteshpenzojneshumekohe ne seksionetkritike, ndajkjonukeshtenjezgjidhje e mire. Iralda Mitro
Implementimiisemaforit pa pritjenaktive • Cdosemafor ka njerradhepritjejetelidhur me te. • Cdo element irradhesmban 2 vlera: • value (integer) • pointer tekelementiirradhes ne liste • Dyveprime: • block – vendosprocesinqetherretveprimin ne rradhen e duhurtepritjes • wakeup – hiqnjengaprocesetngarradha e pritjesdhevendose ne rradhen ready
Implementimiisemaforit pa pritjenaktive type semaphore = record value : integer l: liste_procesesh end; Semaphore S; wait (S){ value--; if (value < 0) { //vendosprocesin ne s.l block(); } } signal (S){ value++; if (value <= 0) { // hiqprocesin P ngas.lwakeup(P); } } Iralda Mitro
Implementimiisemaforit pa pritjenaktive • Kurnjeprocesduhettetherrase wait(), vlera e semaforitdekrementohet • Nesekjovlererezultonpozitive, atehereprocesi do teprese. • Ne vend tepritjesaktiveprocesimundtebllokojeveten. Kybllokim do tebejeqeprocesitekaloje ne gjendjepritjeje, dheprocesikalon ne rradhen e pritjes per semaforin. • Kontrolliikalonperzgjedhesitafatshkurter, icili I kalonnjeprocesitjeter ne ekzekutim. • Aktivizimiiketijprocesi do tebehetkurprocesitjetertetherrase signal() Iralda Mitro
Implementimiisemaforit pa pritjenaktive • Kyllojimplementimitregon se vlera e semaforitmundtebehetedhe negative. • Disavantazhikesajzgjidhjeje: Bllokimireciprok • Mundtekemidisaproceseteciletjane ne pritjeqetendodhenjengjarje - signal(), dhekjongjarjemundteshkaktohetvetemnganjeprejketyreproceseveqejane ne pritje.
Deadlock (bllokimireciprok) • Deadlock – dyose me shumeprocesekuseciliprejtyrepretqetendodhenjengjarjeqeshkaktohetvetemnganjengaketaproceseprites Iralda Mitro
Deadlock (bllokimireciprok) • Le tejene S dhe Q, dysemafore = 1 Procesi P0ProcesiP1 wait (S); wait (Q); wait (Q); wait (S); . . . . . . signal (S); signal (Q); signal (Q); signal (S); • Starvation – pritja e pafundme per semaforin. Njeprocesmundtemoshiqetkurrengarradha e semaforit ne tecilineshtepezulluar.
Problemeklasiketesinkronizimit • ProblemiProdhues-Konsumator • ProblemiLexues-shkrues • ProblemiiFilozofeve Iralda Mitro
ProblemiProdhues-Konsumator • N-buffer, kusecilimundtembajenje element • Semaforimutex= 1 • (per perjashtiminreciprok) • Semaforifull = 0 • (percaktonnese buffer eshte plot) • Semaforiempty = N • (per sinjalizimin e vendeve bosh) Iralda Mitro
ProblemiProdhues-Konsumator • ProcesiProdhues do { // prodho element wait (empty); wait (mutex); // SEKSION KRITIK // shto element ne buffer signal (mutex); signal (full); } while (true); • ProcesiKonsumator do { wait (full); wait (mutex); // SEKSION KRITIK // hiq element nga buffer signal (mutex); signal (empty); //konsumoelementin e hequr } while (true); Iralda Mitro
ProblemiLexues-shkrues • Kemidisatedhenaqendahenmesnjenumerproceseshkonkurues • Readers – vetemlexotedhenat, pa kryerasnjendryshim • Writers – mundtelexojnedheshkruajne • Problemi – Lejimiidisareaders telexojne ne tenjejtenkohe. Vetemnjewriter ivetemmundteaksesojetedhenat e perbashketa ne nje moment tecaktuar. • Te dhenat e perbashketa • Te dhenatqe do lexohen • Semaforimutex = 1 • Semaforiwrt = 1 • Integer readcount= 0 Iralda Mitro
ProblemiLexues-shkrues • Procesishkrues do { wait (wrt) ; // shkrimitektedhenat signal (wrt) ; } while (true) • Procesilexues do { wait (mutex) ; readcount ++ ; if (readercount == 1) wait (wrt) ; signal (mutex) // leximi I tedhenave wait (mutex) ; readcount -- ; if (readcount == 0) signal (wrt); signal (mutex) ; } while (true) Iralda Mitro
ProblemiiFilozofeve • Filozofimundteushqehetvetemnesedyshkopinjte ne krahtetijjanete lire. • Filozofimundtejete ne njengaketogjendje: • Menduar • Uritur • Duke ngrene • Te dhenat e perbashketa • Njetas me oriz (data set) • Semaforichopstik = 1 Iralda Mitro
ProblemiiFilozofeve • Filozofii Do { wait ( chopstick[i] ); wait ( chopStick[ (i + 1) % 5] ); // eat signal ( chopstick[i] ); signal ( chopstick[ (i + 1) % 5] ); // think } while (true) ; Iralda Mitro
Monitoret • Njemjettjetersinkronizimi • Monitoriperbehetnga 1 bashkesiveprimeshtepercaktuarangaperdoruesi • Ne trupin e monitoritpercaktohendisavariablateperbashketadheimplementimet e disametodave • Nje procedure e caktuarbrendanjemonitorimundteaksesojevetemvariablat e deklaruarlokalishttekmonitori. • Vetemnjeprocesmundtejeteaktivbrendamonitorit ne nje moment tecaktuar Iralda Mitro
Struktura e njemonitori monitor monitor-name { // shared variable declarations procedure P1 (…) { …. } … procedure Pn (…) {……} Initialization code ( ….) { … } … }
Pamjeskematike e monitorit Iralda Mitro
Variablatkonditetemonitorit • condition x, y; • Dyveprimeaplikohenmbiketavariabla: • x.wait () – bllokonprocesinqetherretketeinstruksion • x.signal () –riaktivizonnjengaproceset e bllokuar (nese ka) qekishtethirrurx.wait() Iralda Mitro
Monitor me variablakondite Iralda Mitro
Problemiifilozofeve me Monitore monitor DP { enum { THINKING; HUNGRY, EATING) state [5] ; condition self [5]; void pickup (inti) { state[i] = HUNGRY; test(i); if (state[i] != EATING) self [i].wait; } void putdown (inti) { state[i] = THINKING; // test left and right neighbors test((i + 4) % 5); test((i + 1) % 5); } void test (inti) { if ( (state[(i + 4) % 5] != EATING) && (state[i] == HUNGRY) && (state[(i + 1) % 5] != EATING) ) { state[i] = EATING ; self[i].signal () ; } } initialization_code() { for (inti = 0; i < 5; i++) state[i] = THINKING; } } Iralda Mitro