Comunicarea intraprocesuala

În informatică , comunicarea inter-proces ( comunicare inter-proces , IPC, în engleză) reunește un set de mecanisme care permit proceselor concomitente să comunice. Aceste mecanisme pot fi clasificate în trei categorii:

Schimb de date

De Fișierele pot fi folosite pentru a face schimb de date între mai multe procese concurente. Procesele care doresc să trimită date scriu într-unul (sau mai multe) fișiere în anumite poziții; procesele care doresc să primească aceste date se poziționează în aceste poziții din fișier (e) și le citesc. Acest tip de schimb este posibil între procesele concurente locale care utilizează sistemul de fișiere local sau procesele simultane la distanță care utilizează un sistem de fișiere distribuit, cum ar fi NFS .

Memoria principală a unui computer poate fi de asemenea folosit pentru a face schimb de date între mai multe procese concurente. În funcție de tipul procesului, mecanismele utilizate nu sunt aceleași:

În ambele cazuri, schimburile se efectuează prin plasarea datelor în memorie în variabile partajate de procese.

Indiferent de metoda utilizată pentru schimbul de date (fișiere sau memorie principală), acest tip de comunicare pune problema secțiunilor critice: atunci când procesele accesează datele partajate. Într-adevăr, dacă două procese accesează date comune în același timp, pot apărea rezultate diferite:

Când folosim fișiere, întâlnim de obicei al doilea sau al treilea caz. Dacă este prevăzut, procesul poate aștepta (10 milisecunde, 1 secundă etc.) și ulterior poate relua accesul la date. Cu toate acestea, această soluție nu este întotdeauna posibilă într-o rețea, deoarece fișierele nu sunt întotdeauna eliberate corect.

Folosind memoria principală, mai degrabă cădem pe primul caz. Dacă este prevăzut, procesul poate efectua sincronizări exclusive de citire / scriere. În toate cazurile, partajarea datelor în memorie este posibilă numai pe același computer.

Sincronizare

Mecanismele de sincronizare sunt utilizate pentru a rezolva problemele secțiunilor critice și mai general pentru a bloca și debloca procesele în anumite condiții.

Cele mai blochează pot bloca toate sau o parte a unui fișier. Aceste blocări pot fi efectuate fie pentru operații de citire sau scriere, fie pentru ambele.

Semaforul este un mecanism general, acestea nu sunt asociate cu un anumit tip de resurse și poate limita accesul concurent la o secțiune critică la o serie de procese. Pentru a face acest lucru, semaforele folosesc două funcții: P și V și un contor. Funcția P scade contorul, dacă contorul este zero procesul este blocat. Funcția V mărește contorul și deblochează unul dintre procesele blocate.

Cele Semnalele sunt destinate inițial pentru a ucide (termina) un proces în anumite condiții, de exemplu semnalul SIGSEGV ucide un proces care accesează o zonă de memorie care nu a alocat. Cu toate acestea, semnalele pot fi redirecționate către alte funcții. Blocarea unui proces se face apoi cerând să așteptați sosirea unui semnal, iar deblocarea constă în trimiterea unui mesaj procesului.

Problema cu mecanismele de sincronizare este că procesele sunt blocate numai dacă le utilizează. În plus, utilizarea lor este dificilă și provoacă probleme de blocare (toate procesele sunt blocate).

Există situații obișnuite de sincronizare în timpul cooperării între procese:

Schimb și sincronizare de date

Aceste mecanisme combină posibilitățile celor două categorii anterioare și sunt mai ușor de utilizat.

Ideea acestui tip de mecanism este de a comunica folosind principiul cozilor, procesele care doresc să trimită informații le plasează în coadă; cei care vor să-i primească îi iau în aceeași linie. Operațiile de scriere și citire din coadă se blochează și, prin urmare, permit sincronizarea.

Acest principiu este utilizat de cozile de mesaje ( mesaj coadă în engleză) pe Unix, de socket-urile Unix sau Internet, de tuburi , desemnate sau nu, și de transmiterea mesajelor ( Message Passing English).