Aritoni Ovidiu Sisteme de operare 1 Introducere


Probleme de proiecare pentru sistemele de transmitere a mesajelor



Yüklə 486,94 Kb.
səhifə13/27
tarix12.01.2019
ölçüsü486,94 Kb.
#96236
1   ...   9   10   11   12   13   14   15   16   ...   27

Probleme de proiecare pentru sistemele de transmitere a mesajelor

Sistemele de transmitere a mesajelor au multe probleme care nu apar in cazul monitoarelor si barierelor mai ales daca procesele care comunica se afla pe masini diferite conectate prin retea. De exemplu mesajele pot fi pierdute de catre retea. Pentru a evita pierderea mesajelor, expeditorul si receptorul pot sa cada de acord ca imediat ce un mesaj a fost primit, receptorul va trimite inapoi un mesaj de confirmare. Daca expeditorul nu a primit acest mesaj intr-un anumit interval de timp, retransmite mesajul.

Acum sa vedem ce se intampla daca mesajul propriu-zis este primit, dar confirmarea se pierde. Expeditorul va retransmite mesajul astfel incat receptorul sa-l primeasca de doua ori. Este foarte important ca receptorul sa faca deosebirea intre retransmiterea unui mesaj si un mesaj nou. De obicei aceasta problema este rezolvata prin punerea unor numere de secventa consecutive in fiecare mesaj original. Daca receptorul primeste un mesaj avand acelasi numar de secventa ca mesajul anterior, va sti ca mesajul este un duplicat si ca poate fi ignorat.

Sistemele de mesaj trebuie sa rezolve si chestiunea modului in care sunt denumite procesele, astfel incat sa fie clar ce proces este specificat intr-un apel SEND sau RECEIVE. Autentificarea este o alta problema a sistemelor de mesaj: cum poate clientul sa-si dea seama daca cel cu care comunica este adevaratul server de fisier si nu un impostor?

La celalalt capat al spectrumului exista de asemenea probleme importante cand expeditorul si receptorul sunt conectati la aceeasi masina. Una dintre ele este performanta. Copierea mesajelor de la un proces la altul se face tot timpul mai incet decat o operatie de bariera sau intrarea intr-un monitor. S-a lucrat mult la eficientizarea transmitarea mesajelor. Cheriton (1984) de exemplu, a sugerat limitarea marimii mesajului astfel incat acesta sa incapa in registrii masinii si apoi mesajul sa se transmita cu ajutorul registriolor.

Problema producator-consumator cu transmiterea mesajelor

Acum sa vedem modul in care problema producator-consumator poate fi rezolvata prin transmitere de mesaje si nu prin memorie comuna. O solutie este data in fig. 2-15. Presupunem ca toate mesajele sunt de aceeasi marime si ca mesajele trimise , dar neprimite inca sunt amortizate automat de catre sistemul de operare. In acest caz, este utilizat un total de N mesaje, analog numarului N de slot-uri dintr-un buffer al memoriei comune. Consumatorul incepe prin trimiterea de N mesaje goale producatorului. De fiecare data cand producatorul are de furnizat o informatie consumatorului, ia un mesaj gol si il trimite inapoi plin. Astfel, numarul total de mesaje din sistem ramane constant in timp, astfel incat ele pot fi stocate intr-o anumita cantitate de memorie, stiuta dinainte.

Daca producatorul lucreaza mai repede decat consumatorul, toate mesajele vor sfarsi prin a fi pline asteptand consumatorul; producatorul va fi blocat asteptand ca un mesaj gol sa se intoarca. In cazul in care consumatorul lucreaza mai repede, situatia se va inversa: toate mesajele vor fi goale asteptand ca producatorul sa le umple; consumatorul va fi blocat asteptand un mesaj plin.

#define N 100


void producer()

{

int item ;



message m;

while (true)

{

produce_item(&item);



receive(consumer,&m);

build_message(&m,item);

send(consumer,&m);

}

}



void consumer ()

{

int item,I;



message m;

for(I=o;I

while(true)

{

receive(producer,&m);



extract_item(&m,&item);

send(producer,&m);

consume_item(item);

}

}


Fig 2-15. problema producator-consumator cu N mesaje.
Exista multe variante posibile in cazul transmiterii mesajului. Pentru inceput sa vedem modul in care sunt adresate mesajele. Un mod este de a atribui fiecarui proces o adresa unica si de a programa mesajele de-a se adresa proceselor. Un alt mod este sa inventam o noua structura de date numita cutie postala. O cutie postala este un loc in care se amortizeaza un anumit numar de mesaje, numar care de obicei se specifica atunci cand aceasta este creata. Atunci cand sunt utilizate cutiile postale parametrii de adresa din apelurile SEND si RECEIVE sunt cutiile postale si nu procesele. Cand un proces incearca sa trimita ceva unei cutii postale deja pline este suspendat pana cand un mesaj este scos din cutia postala respectiva facand loc pentru unul nou.

Pentru problema producator-consumator atat producatorul cat si consumatorul vor creea cutii postale destul de mari incat sa incapa N mesaje. Producatorul va trimite mesaje continand date catre cutia postala a consumatorului iar consumatorul va trimite mesaje goale catre cutia postala a producatorului. Atunci cand sunt folosite cutii postale mecanismul de amortizare este clar: cutia postala destinatara retine mesajele care au fost trimise procesului destinatar dar care n-au fost acceptate inca.

Extrema opusa cutiilor postale este eliminarea oricarei amortizari. Atunci cand acest tip de abordare este urmat, daca operatia SEND este executata inaintea operatiei RECEIVE procesul expeditor este blocat pana la incheierea operatie de primire, moment in care mesajul poate fi copiat direct din expeditor in receptor fara nici un fel de amortizare intermediara. In acelasi mod, daca operatia RECEIVE este executata mai intai receptorul este blocat pana la efectuarea operatiei de primire. Aceasta strategie este cunoscuta sub numele de rendezvous. Este mai usor de implementat decat o schema de mesaj amortizat dar este mai putin flexibila de vreme ce receptorul si expeditorul sunt obligati sa ruleze in pas de blocaj.

Comunicarea interprocesorala dintre procesele utilizatoare din MINIX (si UNIX) se face prin pipes, care sunt de fapt cutii postale. Singura diferenta reala dintre un sistem de mesaj cu cutii postale si mecanism pipe este acela ca cel de-al doilea nu pastreaza limitele mesajelor. Cu alte cuvinte daca un proces scrie 10 mesaje de cate 100 bytes pentru un pipe si alt proces citeste 1000 bytes de pe acelasi pipe, cititorul va primi toate cele 10 mesaje dintr-o data. In cazul unui adevarat sistem de mesaj fiecare READ ar trebui sa returneze un singur mesaj. Bineinteles daca procesele cad de acord ca tot timpul sa citeasca si sa scrie pe pipe mesaje cu marime fixa sau sa incheie fiscare mesaj cu un caracter special, nu vor exista nici un fel de probleme. Procesele care alcatuiesc sistemul de operare MINIX utilizeaza pentru comunicarea intre ele o schema de mesaj cu mesaje de marime fixa.




Yüklə 486,94 Kb.

Dostları ilə paylaş:
1   ...   9   10   11   12   13   14   15   16   ...   27




Verilənlər bazası müəlliflik hüququ ilə müdafiə olunur ©muhaz.org 2024
rəhbərliyinə müraciət

gir | qeydiyyatdan keç
    Ana səhifə


yükləyin