Rezumat: Pentru a îmbunătăți performanța sistemelor de calcul și a facilita sarcina programatorilor, există mecanisme speciale de sincronizare. Descrierea unora dintre ele - semafoare Dijkstra, monitoare Horus, cozi de mesaje - este prezentată în această prelegere.
Algoritmii considerați la sfârșitul lecției anterioare, deși sunt corecți, sunt destul de greoaie și nu au eleganță. Mai mult decât atât, de intrare procedura de așteptare în secțiunea critică implică un proces destul de lung de rotație într-un ciclu gol, că este o pierdere de timp prețios procesorului. Există și alte neajunsuri serioase ale algoritmilor construiți folosind limbi de programare convenționale. Să presupunem că două procese interacționează în sistemul informatic, unul dintre ei - H - cu o mare prioritate, cealaltă - L - prioritate scăzută. Să programatorul este proiectat astfel încât procesul cu prioritate ridicată dislocă un proces de prioritate redusă ori de câte ori este gata de execuție, și ia procesorul pentru durata de spargere sale CPU (în cazul în care procesul este chiar mai mult nu apare o prioritate). Apoi, în cazul în care procesul L este în secțiunea sa critică, procesul procesorului este obținut de procesor. sa apropiat de intrarea în zona critică, avem o situație de blocaj. Procesul H nu poate intra în zona critică în timp ce este în buclă, iar procesul L nu primește controlul pentru a părăsi secțiunea critică.
Pentru a evita apariția unor astfel de probleme, s-au dezvoltat diferite mecanisme de sincronizare de nivel superior. O descriere a unui număr dintre acestea este semaphorele. monitoare și mesaje - și această conferință este dedicată.
Unul dintre primele mecanisme. Semaphorele sunt folosite pentru a sincroniza comportamentul proceselor. conceptul căruia a fost descris de Dijkstra în 1965.
Semaphore concept
Un semafor este o variabilă întreg care ia valoarea nenegativ, accesul la orice proces care, cu excepția momentul inițializării se poate efectua doar două operații atomice: P (din proberen verbale daneze - verificare) și V (de la verhogen - creștere). Definiția clasică a acestor operațiuni este după cum urmează:
Această intrare înseamnă următoarele: când efectuați o operațiune P pe semaforul S, verificați mai întâi valoarea sa. Dacă este mai mare decât 0. apoi scade din S 1. Dacă este mai mic sau egal cu 0, procesul este blocat până la până la S este mai mare decât 0. apoi scade din S 1. în etapa S V semafoarelor la valoarea sa doar se adaugă 1. La momentul creării, semaforul poate fi inițializat cu orice valoare ne-negativă.
Rezolvarea problemei producător-consumator cu semafoare
Una dintre sarcinile tipice care necesită organizarea proceselor de interacțiune este sarcina producătorului-consumator (producător-consumator). Fie ca două procese să schimbe informații printr-un tampon de dimensiune limitată. Producătorul pune informațiile în tampon, iar consumatorul îl extrage de acolo. La acest nivel, activitățile consumatorului și ale producătorului pot fi descrise după cum urmează.
Dacă tamponul este plin, atunci producătorul trebuie să aștepte până când există un loc în el pentru a pune o nouă informație acolo. Dacă tamponul este gol, atunci consumatorul trebuie să aștepte un mesaj nou. Cum este posibilă implementarea acestor condiții folosind semafoare. Luați trei semafoare. gol. plin și mutex. Semaforul complet va fi utilizat pentru a se asigura că consumatorul așteaptă până când informațiile apar în tampon. Semafor goale vor fi folosite pentru a organiza producătorul de așteptare cu un tampon și semaphore completă mutex - pentru organizarea de excludere reciprocă în domenii critice, care sunt acțiunile put_item și get_item (operațiune „pentru a pune informații“ și „să ia informația“ nu poate fi traversat, la fel ca în acest caz, există pericol de denaturare a informațiilor). Apoi, soluția problemei în limba asemănătoare C arată astfel:
Este ușor de văzut că aceasta este într-adevăr o soluție corectă la problema pusă. Menționăm în treacăt că semafoarelor folosit aici pentru a atinge două obiective: organizarea de excludere reciprocă într-o secțiune critică și viteza vzaimosinhronizatsii a procesului.