Și mijloace pentru sincronizarea proceselor de interacțiune - studopediya

Situația Problemă: imaginați-vă doi elevi care au nevoie să lucreze cu aceleași cărți disponibile în bibliotecă într-un singur exemplar. Amândoi au venit la bibliotecă, dar unul dintre ei sa dus mai întâi la sala de lectură, și, luând singurul loc liber, m-am dus la magazin de carte, iar celălalt - dimpotrivă, a început prin a spune că a primit cartea, și apoi a mers la sala de lectură pentru a găsi un loc. Ca urmare, nici unul dintre ei poate face treaba, pentru a face acest lucru ei nu au resursele necesare. Putem presupune că, în acest caz, a existat un impas, sau cu alte cuvinte, clinch? Răspuns: Nu, în acest caz, nu avem de-a face cu un clinci, și coada. Într-adevăr, un student de așteptare în sala de lectură poate fi „deblocat“, prin eliberarea de orice alt loc în sala de lectură, iar apoi a fost desfășurarea activității sale și care trece cartea „deschide“ un alt student de așteptare la un magazin de carte. Pentru situația ar putea fi numit un clinci, ar trebui să fie completate cu sarcina unei alte condiții, în sala de lectură există doar un singur loc de muncă.

Procesul se numește în paralel, dacă acestea există simultan. procese paralele pot fi împărțite în următoarele două grupuri:

· Independent (care nu trebuie să interacționeze unii cu alții) procese;

· Asincronă (care interacționează și care necesită periodic sin cronizarea) procese.

sincronizarea proceselor - utilizarea atomice opera-țiilor speciale pentru comunicarea inter-proces.

Procesele de multe ori trebuie să comunice unul cu celălalt, de exemplu, un proces poate transmite date la un alt proces sau mai multe procese pot prelucra date dintr-un fișier general. In toate aceste cazuri, există o problemă de sincronizare a proceselor, care pot fi rezolvate prin procesele de suspendare și de activare, de așteptare, blocarea și eliberarea de resurse.

Neglijarea de sincronizare a proceselor care rulează în modul multiprogramming, poate duce la funcționarea defectuoasă sau chiar un accident de sistem. Luați în considerare, de exemplu, (Figura 1), apăsați fișierele de program (server de imprimare). Acest program imprimă unul câte unul toate fișierele ale căror nume secvențial, în ordinea primirii este înregistrată într-un fișier public special „ordinele“ alte programe. variabilă specială NEXT, de asemenea, accesibile tuturor proceselor de client, conține numărul primului liber pentru a scrie poziția de fișier numele de fișier al „ordine“. Procesele client citește această variabilă este înregistrată în „Comanda“ poziția de fișier corespunzător numelui său de fișier și pentru creșterea valorii NEXT pe unitate. Să presupunem că la un moment dat în procesul de R a decis pentru a imprima un fișier, pentru a citi valoarea NEXT, valoarea care pentru definiteness presupune a 4. Procesul de amintesc această valoare, dar a pus numele fișierului nu a avut timp, deoarece punerea sa în aplicare a fost întreruptă (de exemplu, ca urmare a epuizării unui foton). Procedeul următor este S, care vrea să imprime un fișier, citiți aceeași ca valoarea NEXT, plasat în poziția a patra numele fișierului și de a construi valoarea unei variabile de unul. Primite în timpul iterație anterioare, scrie numele fișierului în poziția 4, în partea de sus a numelui de fișier proces S. atunci când, din nou, controlul procesului este returnat la R, atunci ea continuă executarea sa, în deplină concordanță cu valoarea curentă a poziției libere

Astfel, procesul de S nu se vedea tipăritura fișierul. Complexitatea problemei de sincronizare este iregularitatea situații: în exemplul anterior pot fi reprezentate și alte evoluții: fișierele s-au pierdut mai multe procese sau, dimpotrivă, nu a pierdut nici un fișier. În acest caz, toate procesele definite vitezele reciproce și momente de întrerupere. De aceea depanarea proceselor care interactioneaza este o provocare.

Situații precum cea în care două sau mai multe procese tratate datele partajate, iar rezultatul final depinde de raportul vitezei de proces sunt denumite curse.

resursă critică - o resursă care poate deservi doar un singur proces la un moment dat. Dacă mai multe procese doresc să utilizeze critic-agenție modul de partajare a resurselor, acestea ar trebui să sincronizeze activitățile lor la o resursă a fost întotdeauna în posesia nu mai mult de ode-TION dintre ele.

zone critice - părți ale procesului în cazul în care există un apel la resursa Cree-matic. zonele critice ar trebui să se excludă reciproc, adică. E. La fiecare dată nu mai mult de un proces poate fi ocupat de executare critică cu privire la o resursă-lan ka. Furnizarea (mecanism de sprijin) excludere reciprocă - cheia pentru caravanei programării paralele.

Lock - Executie Prevenire cineva ceva. Procesul trebuie să seteze blocarea în fața secțiunii critice și să-l eliminați după eliberare. Desigur, în cazul în care site-ul este blocat, procesul de Dru-goy trebuie să aștepte deblocare.

Fig.1. EXEMPLU sincronizare necesară

Un exemplu tipic este o resursă partajată schimbări critice Nye rezumând anumită valoare (numesc contor). procese sectiuni critice pot conține apoi următorul cod:

Contor: = Counter + 1.

Racing - situație în care două sau mai multe procese mye-tratate separat datele și rezultatul final depinde de raportul viteza de execuție a acestora.

Un concept important al procesului de sincronizare este conceptul de „secțiune critică“ a programului (CS).

secțiunea critică - face parte dintr-un program care oferă acces la date partajate.

Pentru a exclude efectul rasei în legătură cu unele dintre resursele necesare pentru a se asigura că, la fiecare moment într-o secțiune critică, resursa asociată, a fost un maximum un proces. Această tehnică este menționată ca un mutex. Cel mai simplu mod de a asigura excludere reciprocă - să permită un proces care este într-o secțiune critică, dezactivează toate întreruperile. Cu toate acestea, această metodă nu este adecvată, la fel de periculoase pentru a avea încredere în gestionarea sistemului la procesul de utilizare; poate dura un procesor mult timp și cu prăbușirea procesului în regiunea critică prăbușirea întregului sistem va avea de suferit, pentru că întreruperea nu va fi rezolvată.

O altă modalitate este de a utiliza un bloc de variabile. Fiecare resursă partajată asociată variabilă binară care ia valoarea 1 dacă resursa este disponibilă (adică, nici un proces este în prezent într-o secțiune critică asociată acestui proces), iar valoarea 0 dacă resursa este ocupată. Figura 2 prezintă o porțiune a algoritmului de proces este utilizat pentru a implementa accesul excludere reciprocă la o resursă partajată D blocare variabilă F (D). controale de proces înainte de a intra în secțiunea critică, în cazul în care resursa este liber D. Dacă este ocupat, atunci verificarea se repetă ciclic dacă este disponibil, valoarea F (D) este setat la 0, iar procesul intră într-o secțiune critică. După etapele de proces pentru a efectua toate resursa partajată D, valoarea variabilei F (D) este setat la 1 din nou.

În cazul în care toate procesele sunt scrise cu acordurile de mai sus, excluderea reciprocă este garantată. Trebuie remarcat faptul că verificarea și setarea operației de blocare variabilă este de a fi indivizibilă. Să ne explicăm acest lucru. Să variabila procesul de scanare a stabilit că resursa este disponibilă, dar chiar după aceea, faptul că nu a stabilit variabila la 0, a fost întreruptă. În timpul procesului său de suspendare a luat o altă resursă, care a intrat secțiunea critică, dar, de asemenea, a fost întrerupt fără finalizarea lucrărilor cu resursa partajată.

Și mijloace pentru sincronizarea proceselor de interacțiune - studopediya
Atunci când controlul a fost returnat la primul proces, acesta este, presupunând că de resurse gratuite, stabilește un semn de muncă și a început să efectueze secțiunea lor critice. Astfel, a fost încălcat principiul excluderii reciproce, ceea ce ar putea duce la rezultate nedorite. Pentru a evita astfel de situații în sistemul de comandă al mașinii, este de dorit să aibă o comandă unificată „check-instalare“, sau pentru a pune în aplicare sistemul prin intermediul primitivele software adecvate, care să interzică întrerupere pe parcursul operațiunii, și testarea de instalare.

Punerea în aplicare a secțiunilor critice utilizând variabile bloc are un dezavantaj semnificativ: în perioada când un proces este într-o secțiune critică, un alt proces care necesită aceeași resursă va realiza acțiuni de rutină într-un sondaj al deșeurilor variabile de blocare de timp CPU.

Figura 3 prezintă o diagramă de timp de executare a unei comenzi „Verificați și instalați“.

articole similare