Zdalne wywoływanie procedur Zagadnienia projektowe Zagadnienia realizacyjne main(int argc, char* argv[]){ int id, status; id = atoi(argv[1]); status = zabij_proc(id); exit(status)... int zabij_proces (int pid){ int stat; stat = kill(pid, 9); return stat; 2 żądanie a a 3 Dariusz Wawrzyniak 1
Zdalne wywoływanie procedur main(int argc,char** argv){ int id, status; id = atoi(argv[1]); status = zabij_proc(id); exit(status); int zabij_proces (int pid){ int stat; wyślij_żądanie(pid); // oczekiwanie na odp. odbierz_odp (&stat); return stat; komunikacja int zabij_proces (int pid){ int stat; stat = kill(pid, 9); return stat; programista system main (){ int p, stat; odbierz_żądanie (&p); stat = zabij_proc(p); wyślij_odp (stat); sieciowa 4 przeźroczystość dostępu ukrycie komunikacji sieciowej przed aplikacją przez odpowiednie opakowanie funkcji komunikacyjnych namiastką a oraz a. gwarancja wykonania ukrywanie błędów komunikacyjnych specyfikacja interfejsu sposób opisu sygnatur procedur zdalnych (nazwy, typy parametrów) obsługa sytuacji wyjątkowych 5 namiastka a (ang. client stub) udostępnienie aplikacji klienckiej lokalnej odpowiedzialnej za przesłanie danych do a oraz odebranie wyników namiastka a (ang. server stub) udostępnienie aplikacji po stronie a lokalnej odpowiedzialnej za odebranie identyfikatora zdalnej do wywołania, parametrów, a odesłanie wyników lub zgłoszenie wyjątków 6 Dariusz Wawrzyniak 2
Zdalne wywoływanie procedur (zdalna proc.) namiastka a namiastka a SELECT CHAN BLAST protokół SELECT CHAN BLAST prot. warstwy sieciowej sieć prot. warstwy sieciowej 7 wywołanie zdalnej żądanie wraz z argumentami oczekiwanie z wynikiem powrót z wywołania zdalnej lokalne wykonanie 8 przekazywanie przez wartość (ang. call-by-value) problem różnic w reprezentacji danych, np. w kodowaniu znaków, uporządkowaniu bajtów, w formatach liczb zmiennopozycyjnych itp. przekazywanie przez referencje (ang. call-byreference) problem zinterpretowania wartości wskaźnika w innej przestrzeni adresowej przekazywanie przez kopiowanie i odtwarzanie problem przetaczania (kwestia opisu struktur danych w celu prawidłowego zidentyfikowania wszystkich składowych) 9 Dariusz Wawrzyniak 3
Zdalne wywoływanie procedur format kanoniczny 10 11 12 Dariusz Wawrzyniak 4
Zdalne wywoływanie procedur Semantyka co najmniej raz po uzyskaniu odpowiedzi (wyniku) od a ma pewność, że wywoływana procedura wykonała się co najmniej raz. Semantyka co najwyżej raz po uzyskaniu odpowiedzi (wyniku) od a wie, że wywoływana procedura wykonała się dokładnie raz. Jak należy zinterpretować przypadek wystąpienia błędu (wyjątku) w wywołaniu zdalnej? Semantyka dokładnie raz niemożliwa do uzyskania, jeśli system narażony jest na awarie (np. a lub łączy). Semantyka ewentualnie brak gwarancji, procedura mogła się wykonać lub mogła się nie wykonać. 13 Przetwarzanie interfejsu Wiązanie a z em Obsługa komunikacji - Realizacja semantyki błędu Problem osieroconych obliczeń 14 Generowanie namiastki a Generowanie namiastki a Generowanie przykładowego programu a (client sample) Generowanie wzorca do implementacji procedur zdalnych (template) Generowanie plików do zarządzania kompilacją 15 Dariusz Wawrzyniak 5
Zdalne wywoływanie procedur Wiązanie statyczne ma wprowadzony na stałe identyfikator komunikacyjny a (np. para: adres IP, nr portu). Wiązanie dynamiczne uzyskuje adres a za pośrednictwem łącznika (np. portmap lub rpcbind w Sun ). 16 wywołanie przekazanie identyfikatora komunikacyjnego zapytanie o identyfikator komunikacyjny rejestracja a 17 BLAST realizuje przesyłanie dużych komunikatów poprzez podział na mniejsze części, transmisję poszczególnych części i ponowne złożenie w jeden komunikat po stronie odbiorczej, CHAN synchronizuje wymianę komunikatów z żądaniami wywołania procedur oraz odpowiedziami, SELECT rozdziela i przekazuje komunikaty z żądaniami do odpowiednich procesów. 18 Dariusz Wawrzyniak 6
Zdalne wywoływanie procedur odbiorca fragment 1 fragment 2 fragment 3 fragment 4 fragment 5 fragment 6 (ost.) SRR fragment 3 fragment 5 SRR nadawca 19 żądanie ACK ACK 20 żądanie żądanie ACK 21 Dariusz Wawrzyniak 7
Zdalne wywoływanie procedur żądanie ping pong ping pong ACK 22 żądanie jeszcze żyję jeszcze żyję ACK 23 nie można zlokalizować a zgłoszenie wyjątku zaginione żądanie retransmisja żądania po upłynięciu ustalonego czasu oczekiwania zaginiona retransmisja żądania stosowanie procedur idempotentnych numerowanie żądań i retransmisja odpowiedzi awaria a przed podjęciem realizacji retransmisja żądania po wykonaniu zgłoszenie wyjątku awaria a osierocenie obliczeń 24 Dariusz Wawrzyniak 8
Zdalne wywoływanie procedur Eksterminacja rejestrowanie działań podejmowanych przez a na nośniku niewrażliwym na awarie i usuwanie na tej podstawie osieroconych obliczeń po restarcie a. Reinkarnacja każdy restart a rozpoczyna nową epokę (identyfikowaną przez numer kolejny), po której usuwane są wszystkie obliczenia związane z poprzednią epoką. 25 Łagodna reinkarnacja reinkarnacja, w której usuwa się tylko te obliczenia rozpoczęte w starej epoce, dla których nie ma właściciela. Wygaśnięcie przydział określonego czasu T owi na wykonanie. Jeśli wykonanie nie zakończy się w czasie T, musi uzyskać kolejny przydział, pod warunkiem, że obliczenia nie zostały osierocone. Jeśli odczeka czas T przy restarcie, osierocone obliczenia same się zakończą. 26 po stronie a: odwzorowanie wywoływanej na jej identyfikator, przekazywany do a. po stronie a: zlokalizowanie wywoływanej na podstawie identyfikatora. 27 Dariusz Wawrzyniak 9
Zdalne wywoływanie procedur Wywołanie asynchroniczne nie czeka na wynik wykonania zdalnej (wykonywanie zdalnej odbywa się równolegle z przetwarzaniem po stronie a). Wywołanie zwrotne udostępnia procedurę zdalną po swojej stronie i przekazuje owi informacje umożliwiające jej wywołanie (zamiana ról pomiędzy em a em). 28 wywołanie zdalnej żądanie wraz z argumentami lokalne wykonanie 29 wywołanie zdalnej żądanie wraz z argumentami lokalne wykonanie 30 Dariusz Wawrzyniak 10
Zdalne wywoływanie procedur wywołanie zdalnej żądanie wraz z argumentami lokalne wykonanie wywołanie zwrotnej 31 Dariusz Wawrzyniak 11