|
COMUNICAREA INTRE PROCESE COOPERANTE
Intre doua sau mai multe procese pot exista doua tipuri de comunicare:
a) prin memorie partajata;
b) prin sistem de mesaje.
a) In sistemele cu memorie partajata exista o memorie comuna pentru toti utilizatorii iar procesele pot comunica intre ele prin intermediul variabilelor partajate din memoria comuna. Mecanismul de comunicare este simplu: un proces actualizeaza o variabila partajata iar alt proces va citi aceasta variabila. Aceasta metoda este tipica pentru sistemele multicalculatoare, cu memorie partajata. Sistemul de operare nu este responsabil pentru acest tip de comunicare. Intreaga raspundere revine programatorului de aplicatie. De aceea un sistem de operare pentru multicalculatoare nu difera foarte mult de un sistem de operare pentru un monoprocesor.
b)In acest caz, al comunicarii prin mesaje, procesele pot comunica intre ele doar prin doua operatii:
-send (mesaj);
-receive (mesaj)
Deci, prin aceste doua primitive de transmisie, un proces poate comunica cu altul doar transmitand sau receptionand un mesaj.
Acest tip de comunicatie este specific multicalculatoarelor. Intreaga responsabilitate a comunicarii prin mesaje ii revine sistemului de operare. De aceea, aceste sisteme de operare sunt mult mai complicate si greu de proiectat si realizat. Ele mai poarta numele de sisteme de operare distribuite.
In acest capitol vom analiza modul de transmisie prin mesaje, acest lucru fiind indiferent daca folosim mono sau multiprocesoare.
Pentru a exista o comunicare intre procese trebuie sa existe o linie de comunicatie. Problemele legate de implementarea acestei linii sunt:
-modul in care se stabilesc liniile de comunicatieintre procese;
-numarul de procese asociate unei linii de comunicatie;
-numarul de legaturi care pot exista intre o pereche de procese;
-capacitatea unei linii de comunicatie;
-tipul liniei de comunicatie, adica daca linia este unidirectionala sau bidirectionala;
-dimensiunea mesajelor care poate fi fixa sau variabila.
Modalitatile folosite pentru implementarea logica a liniei de comunicatie si a operatiilor send si receive sunt:
-comunicatie directa sau indirecta;
-comunicatie simetrica sau asimetrica;
-buffering implicit sau explicit ( prin buffering se intelege stocarea mesajului intr-o zona tampon de unde este preluat ulterior de catre destinatar);
-trimiterea mesajului prin copie sau referinta.
1. Comunicatie directa si indirecta
1.1. Comunicatie directa
In comunicatia directa, procesele care trimit sau receptioneaza mesaje trebuie sa mentioneze numele procesului care trimite, respectiv care receptioneaza mesajul.
Primitivele send si receive au urmatoarea forma simetrica:
send(proces1,mesaj)
(se trimite un mesaj catre procesul 1)
receive(proces2,mesaj)
(se receptioneaza un mesaj de la procesul 2)
Pot avea si o forma asimetrica. In acest caz cele doua primitive se definesc astfel:
send(proces,mesaj)
(se trimite un mesaj catre proces)
receive(identificator,mesaj)
( se receptioneaza un mesaj de la un proces)
Linia de comunicatie are urmatoarele caracteristici:
linia de comunicatie intre doua mesaje este
bidirectionala;
intre procesul care, fie vrea sa transmita fie vrea sa receptioneze un mesaj, si celalalt proces partener se stabileste o singura legatura de comunicatie.
4.3.1.2. Comunicatie indirecta
In acest mod de comunicatie mesajele sunt trimise si receptionate prin intermediul cutiilor postale (mail boxes) care se mai numesc si porturi.
Primitivele de comunicare au urmatoarea forma:
send(port1,mesaj)
(se transmite un mesaj portului 1)
receive(port2,mesaj)
(se receptioneaza un mesaj de la portul 2)
Cutia postala sau portul poate avea doi proprietari:
a) procesul;
b) sistemul de operare.
a) La un moment dat, o cutie postala are un singur proprietar si astfel se cunoaste precis care este numele procesului ce va primi mesajele trimise.
Pentru ca un proces sa devina proprietarul unei cutii postale, se poate utiliza una din urmatoarele doua metode :
-procesul poate declara o variabila de tip cutie postala;
-se defineste mai intai o cutie postala si apoi se declara cine este procesul care o are in proprietate.
Cand procesul proprietar al cutiei postale isi incheie executia, trebuie sa execute doua lucruri: distrugerea cutiei postale si anuntarea celorlalte procese despre distrugerea cutiei postale.
b) In cazul in care sistemul de operare este proprietarul cutiei postale, atunci aceasta are o existenta de sine statatoare si nu depinde de proces. Mecanismul creat de sistemul de operare cuprinde urmatoarele operatii:
-crearea unei cutii postale noi;
-trimiterea si receptionarea mesajelor prin cutia postala;
-distrugerea cutiei postale.
4.3.2. Linii de comunicatii si tipuri de mesaje
2.1. Linii de comunicatii
Cea mai importanta proprietate a liniei de comunicatie este capacitatea care arata daca si in ce fel pot fi stocate mesajele. Exista capacitate zero, capacitate limitata si capacitate nelimitata.
-Capacitate zero. In acest caz nu exista modalitate de stocare a mesajului.
Procesul emitent va ramane in asteptare pana cand destinatarul va primi mesajul transmis. Trebuie sa existe o sincronizare a proceselor care se mai numeste si rendezvous.
-Capacitate limitata. In acest tip de transmisie exista un buffer care poate stoca n mesaje.
-Capacitate nelimitata. In acest tip de transmisie exista un buffer de capacitate infinita, teoretic, care nu duce niciodata la situatia ca procesul emitor sa astepte.
La fel ca in transmisia de date este necesar si aici, in unele cazuri, ca procesul emitent sa stie daca mesajul emis a ajuns la destinatie.
Daca in transmisia de date exista un pachet de tip ACK, aici exista ceva asemanator, un mesaj "confirmare".
De exemplu, cand procesul P1 transmite un mesaj procesului P2 , atunci urmatoarea secventa de mesaje face ca P1 sa stie ca mesajul sau a fost transmis:
send(p2, mesaj) procesul P1
receive(p1,mesaj)procesul P2
send(p1,confirmare) procesul P2
receive(p2,mesaj)procesul P1
4.3.2.2. Tipuri de mesaje
Din punct de vedere al dimensiunii, mesajele pot fi:
-cu dimensiuni fixe;
-cu dimensiuni variabile;
-mesaje tip.
Mesajele cu dimensiune fixa necesita o implementare simpla dar o programare mai dificila.
Mesajele cu dimensiune variabila necesita o implementare fizica dificila dar o programare mai simpla.
Mesajele tip se folosesc numai in comunicatia indirecta.
4.3.3. Exceptii in comunicarea interprocese
Daca in sistemele cu memorie partajata aparitia unei erori duce la intreruperea functionarii sistemului , in sistemele cu transmisie de mesaje aparitia unei erori nu este asa de grava. Erorile posibile trebuiesc cunoscute pentru a le putea trata corespunzator. Cele mai frecvente erori sunt: terminarea unui proces inainte de primirea mesajelor, pierderea mesajelor, alterarea mesajelor si amestecarea lor.
a)Terminarea unui proces inainte de primirea mesajelor. In unele cazuri, un proces, emitent sau destinatar, isi poate incheia executia inainte ca mesajul sa fi fost prelucrat. Astfel, pot aparea situatii in care mesaje nu vor ajunge niciodata la destinatie sau situatii in care un proces va astepta un mesaj ce nu va mai ajunge niciodata.
Daca un proces P1, destinatar, asteapta un mesaj de la un proces emitent P2 , care si-a terminat executia, atunci P1 va ramane in starea blocat. Pentru ca P1 sa nu se blocheze exista doua posibilitati:
-sistemul de operare termina fortat procesul P1 ;
-sistemul de operare comunica procesului P1 ca procesul P2 s-a incheiat.
Daca un proces P1 este emitent trimitand un mesaj unui proces P2 care si-a incheiat executia, exista urmatoarele posibilitati:
-daca linia de comunicatie este limitata sau nelimitata, nu se intampla nimic; procesul P1 isi continua executia;
-daca linia de comunicatie este de capacitate zero, atunci P1 se blocheaza; pentru ca P1 sa nu se blocheze se procedeaza ca in cazul anterior.
b)Pierderea mesajelor. Pierderea unui mesaj se poate produce atunci cand este o defectiune in linia de comunicatie. Pentru remedierea acestui lucru se pot folosi urmatoarele metode:
-detectarea evenimentului si retransmiterea mesajului de catre sistemul de operare;
-detectarea evenimentului si retransmiterea mesajului de catre procesul emitent;
-detectarea evenimentului de catre sistemul de operare care comunica procesului emitent pierderea mesajului; procesul emitent decide daca retransmite sau nu mesajul.
c)Alterarea si amestecarea (scrambling) mesajelor. Este situatia in care un mesaj ajunge alterat la receptor, in sensul unei alterari a informatiei din continutul sau. Pentru rezolvarea acestei situatii se folosesc metode clasice, din teoria transmiterii informatiei, de detectare si corectare a erorilor:
-folosirea polinomului de detectie si eventual de corectie a erorilor (asa numitele CRC-uri sau LRC-uri, folosite ,de exemplu, la hard disc);
-folosirea chechsums-urilor, care sunt sume ale bitilor mesajelor; exista doua chechsums-uri, unul calculat cand se transmite mesajul si altul care se calculeaza din bitii mesajului receptionat; La neegalitatea celor doua chechsums-uri, se considera eroare;
-folosirea paritatii in transmiterea si receptionarea mesajului.
4.3.4. Aplicatii ale IPC-urilor (Intercomunicare Intre Procese)
In sistemul de operare UNIX, ale carui aplicatii vor fi prezentate in capitolele urmatoare, exista urmatoarele aplicatii ale IPC-urilor:
-pipe-uri;
-cozi de mesaje (in SystemV);
-semafoare;
-zone de memorie partajata (in System V);
-semnale.
De asemenea, in subcapitolul urmator, de procese clasice, se prezinta procesul producator - consumator rezolvat si prin metoda sistemelor de mesaje (Message Passing).