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 a 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; programista system a 3 int zabij_proces (int pid){ int stat; wyślij_(pid); // oczekiwanie na odp. odbierz_odp (&stat); return stat; komunikacja main (){ int p, stat; odbierz_ (&p); stat = zabij_proc(p); wyślij_odp (stat); sieciowa 4 Dariusz Wawrzyniak 1
Zdalne wywoływanie procedur 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 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 do wywołania, parametrów, a odesłanie wyników lub zgłoszenie wyjątków 5 6 namiastka a (zdalna proc.) namiastka a oczekiwanie powrót z wywołania SELECT CHAN protokół SELECT CHAN wraz z argumentami z wynikiem BLAST prot. warstwy sieciowej sieć BLAST prot. warstwy sieciowej 7 lokalne wykonanie 8 Dariusz Wawrzyniak 2
Zdalne wywoływanie procedur 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) format kanoniczny 9 10 11 12 Dariusz Wawrzyniak 3
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? 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ć. Przetwarzanie interfejsu Wiązanie a z em Obsługa komunikacji - Realizacja semantyki błędu Problem osieroconych obliczeń 13 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ą 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 ). 15 16 Dariusz Wawrzyniak 4
Zdalne wywoływanie procedur przekazanie identyfikatora komunikacyjnego zapytanie o identyfikator komunikacyjny rejestracja a 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. 17 18 odbiorca fragment 1 fragment 2 fragment 3 fragment 4 fragment 5 fragment 6 (ost.) SRR fragment 3 fragment 5 SRR nadawca 19 20 Dariusz Wawrzyniak 5
Zdalne wywoływanie procedur ping pong ping pong 21 22 jeszcze żyję jeszcze żyję nie można zlokalizować a zgłoszenie wyjątku zaginione 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ń 23 24 Dariusz Wawrzyniak 6
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ą. Ł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ą. 25 26 po stronie a: odwzorowanie wywoływanej na jej identyfikator, przekazywany do a. po stronie a: zlokalizowanie wywoływanej na podstawie identyfikatora. Wywołanie asynchroniczne nie czeka na wynik wykonania (wykonywanie 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 (zamiana ról pomiędzy em a em). 27 28 Dariusz Wawrzyniak 7
Zdalne wywoływanie procedur wraz z argumentami wraz z argumentami lokalne wykonanie lokalne wykonanie 29 30 wraz z argumentami lokalne wykonanie zwrotnej 31 Dariusz Wawrzyniak 8