5.6. Interacțiunea și sincronizarea proceselor și firelor
În multiprogramming sisteme uniprocesor procese alternative, asigurând punerea în aplicare efectivă a programelor. În sistemele multiprocesor nu pot numai striping. dar se suprapun procese. Ambele aceste tehnologii, care pot fi considerate ca exemple de calcul paralel, generează aceeași problemă. Efectuarea într-un mediu multiprogramming, procese și fire are întotdeauna o asincron în natură - este imposibil de prezis performanța relativă a proceselor. Moment întrerupere a debitului, în timp ce acestea sunt în cozile de la o resursă partajată, ordinea de selecție a firelor de execuție - toate aceste evenimente sunt rezultatul unei confluente de mai mulți factori și sunt aleatoare, acest lucru este valabil atât în ceea ce privește fluxul unui proces de realizare a unui cod comun, și în ceea ce privește pentru fluxuri de procese diferite, fiecare dintre acestea poartă un program propriu.
procese Metode de interacțiune (filete) pot fi clasificate în funcție de gradul de conștientizare a existenței unui alt proces [10].
- Procese care nu cunosc prezența reciproc (de exemplu, diferite procese sau sarcini ale diverșilor utilizatori). Acestea sunt procese independente, care nu sunt proiectate să lucreze împreună. Cu toate că aceste procese nu sunt de lucru împreună, sistemul de operare are nevoie pentru a aborda problemele de utilizare competitivă a resurselor. De exemplu, două aplicații independente pot solicita acces la același disc sau imprimantă. OS ar trebui să reglementeze un astfel de tratament.
- Procese indirect conștient de prezența reciproc (de exemplu, procese de o sarcină). Aceste procese nu trebuie să fie conștienți de prezența reciproc până la ID-ul de proces, dar au în comun accesul la un obiect, de exemplu, tampon de intrare-ieșire, un fișier sau bază de date. O astfel de cooperare procese exponat în separarea obiectului partajat.
- Procese direct conștient de prezența reciproc (de exemplu, procesele care rulează în mod succesiv sau alternativ în același loc de muncă). Astfel de procese sunt în măsură să comunice unul cu altul, utilizând ID-urile de proces și inițial concepute pentru a lucra împreună. Aceste procese prezintă, de asemenea, cooperarea în funcțiune.
Astfel, problemele potențiale asociate cu interacțiunea și sincronizarea proceselor și firelor, pot fi reprezentate prin următorul tabel.
atunci execuție P și Q este determinată.
Dacă aceste condiții nu sunt îndeplinite, este posibil ca execuția paralelă a P și Q sunt determinate, dar poate să nu fie. Cazul a două procese într-un mod natural să fie generalizat la un număr mai mare de ele.
Termenii Bernstein informativ, dar prea rigid. De fapt, acestea necesită procese aproape non-Interactiunea. Cu toate acestea, aș dori să se stabilească procese deterministe formate, partajarea și schimbul de informații. Pentru a face acest lucru, avem nevoie pentru a limita numărul de posibile alternări de operații atomice, excluzând unele intercalare prin executarea unor mecanisme de sincronizare software-ului și, prin urmare, asigurarea accesului ordonat“la anumite date.
Despre set nedeterministice de programe se spune că are o condiție cursă (starea condiției Race.). In exemplul de mai sus procese concurează pentru valorile variabilelor x și y de calcul.
Sarcina de acces ordonat la datele partajate (condiție cursa de eliminare), în cazul în care nu ne pasă de următorul său, puteți decide dacă fiecare proces pentru a asigura accesul exclusiv la date. Orice proces care acceseaza resursele partajate, exclude toate celelalte procese, capacitatea de a comunica simultan cu ei cu aceste resurse, în cazul în care aceasta poate duce la un comportament non-deterministă a unui set de procese. Aceasta se numește un mutex (excludere reciprocă). În cazul în care prioritatea de acces la resurse partajate este importantă pentru a obține rezultate corecte, atunci unul de excludere reciprocă nu este suficient.
În cooperare cu diferitele procese de comunicare sunt implicate în funcționarea de ansamblu, care le unește. Comunicarea permite sincronizarea sau coordonarea diferitelor procese de acțiune. De obicei, se poate presupune că conexiunea constă dintr-un mesaj de un fel. Primitive pentru trimiterea și primirea de mesaje pot fi furnizate la limbajul de programare sau sistem de operare kernel-ul.
Deoarece procesul de comunicare nu are loc nici o împărțire a resurselor, excludere reciprocă nu este necesară, deși problema blocajului și înfometare rămân relevante. Ca un exemplu, un impas poate duce la o situație în care fiecare dintre cele două procese este blocată așteaptă un mesaj de la un alt proces. Postul poate fi ilustrat după cum urmează. Să presupunem că există trei procese P1. P2. P3. și cei care, la rândul său. încercarea de a contacta procesul P1. S-ar putea fi o situație în care P1 și P2 sunt în mod constant comunică unul cu celălalt, iar P3 este blocat, de așteptare pentru conectarea cu procesul P1.