RPC. Zdalne wywoływanie procedur (ang. Remote Procedure Calls )

Podobne dokumenty
Tworzenie aplikacji rozproszonej w Sun RPC

Klient-Serwer Komunikacja przy pomocy gniazd

76.Struktura oprogramowania rozproszonego.

Sun RPC/XDR. Dariusz Wawrzyniak 1

Oprogramowanie systemów równoległych i rozproszonych. Wykład 6

Sun RPC/XDR 10. listopada Dariusz Wawrzyniak (IIPP) 1

external Data Representation

Zdalne wywołanie procedur. Krzysztof Banaś Systemy rozproszone 1

RPC Remote Procedural Call. Materiały do prezentacji można znaleźć na stronie:

Sieciowa komunikacja procesów - XDR i RPC

Zdalne wywoływanie procedur RPC. Dariusz Wawrzyniak 1

Zdalne wywołania procedur. Jarosław Kuchta Programowanie Współbieżne

Zdalne wywoływanie procedur RPC

Zdalne wywoływanie procedur RPC

Architektura typu klient - serwer. Oprogramowanie systemów równoległych i rozproszonych. Wykład 6. Cechy architektury klient - serwer

Zdalne wywoływanie procedur RPC 27. października Dariusz Wawrzyniak (IIPP) 1

Zdalne wywoływanie procedur RPC 27. października 2010

Wstęp do Programowania, laboratorium 02

Programowanie z użyciem RPC

Wywoływanie procedur zdalnych

Wywoływanie procedur zdalnych

Programowanie współbieżne i rozproszone

Aplikacja Sieciowa wątki po stronie klienta

Aplikacje RMI

Wywoływanie procedur zdalnych

METODY I JĘZYKI PROGRAMOWANIA PROGRAMOWANIE STRUKTURALNE. Wykład 02

Część XVII C++ Funkcje. Funkcja bezargumentowa Najprostszym przypadkiem funkcji jest jej wersja bezargumentowa. Spójrzmy na przykład.

external Data Representation

Wartości domyślne, przeciażenia funkcji

Instytut Teleinformatyki

Gniazda surowe. Bartłomiej Świercz. Łódź,9maja2006. Katedra Mikroelektroniki i Technik Informatycznych. Bartłomiej Świercz Gniazda surowe

Wywoływanie metod zdalnych

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Zdalne wywołanie procedur. Krzysztof Banaś Systemy rozproszone 1

Jak napisać program obliczający pola powierzchni różnych figur płaskich?

Metody Metody, parametry, zwracanie wartości

2 Przygotował: mgr inż. Maciej Lasota

Programowanie mikrokontrolerów AVR

Typy złożone. Struktury, pola bitowe i unie. Programowanie Proceduralne 1

Programowanie - wykład 4

Wywoływanie metod zdalnych

Implementacja aplikacji sieciowych z wykorzystaniem środowiska Qt

Język C zajęcia nr 11. Funkcje

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Podstawy języka C++ Maciej Trzebiński. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. Praktyki studenckie na LHC IVedycja,2016r.

Wartości domyślne, przeciażenia funkcji

Podstawowe elementy proceduralne w C++ Program i wyjście. Zmienne i arytmetyka. Wskaźniki i tablice. Testy i pętle. Funkcje.

Remote Quotation Protocol - opis

Wstęp do Informatyki i Programowania Laboratorium: Lista 0 Środowisko programowania

Podstawy programowania skrót z wykładów:

1 Podstawy c++ w pigułce.

Wprowadzenie do języka Java

PLAN WYNIKOWY PROGRAMOWANIE APLIKACJI INTERNETOWYCH. KL IV TI 6 godziny tygodniowo (6x15 tygodni =90 godzin ),

Komunikator internetowy w C#

1 Podstawy c++ w pigułce.

Programowanie współbieżne i rozproszone

Obiekty w plikach wykonywalnych, marshaling

Ćwiczenie nr 6. Poprawne deklaracje takich zmiennych tekstowych mogą wyglądać tak:

Wprowadzenie. Dariusz Wawrzyniak 1

Temat 1: Podstawowe pojęcia: program, kompilacja, kod

Mechanizmy pracy równoległej. Jarosław Kuchta

Język ludzki kod maszynowy

IPC: Kolejki komunikatów

Microsoft Visual C : praktyczne przykłady / Mariusz Owczarek. Gliwice, cop Spis treści

5 Przygotował: mgr inż. Maciej Lasota

Krótkie wprowadzenie do korzystania z OpenSSL

Programowanie obiektowe

1. Wartość, jaką odczytuje się z obszaru przydzielonego obiektowi to: a) I - wartość b) definicja obiektu c) typ oboektu d) p - wartość

Ćwiczenie 1. Przygotowanie środowiska JAVA

PROE wykład 3 klasa string, przeciążanie funkcji, operatory. dr inż. Jacek Naruniec

Elementy języka C. ACprogramislikeafastdanceonanewlywaxeddancefloorbypeople carrying razors.

Funkcje. Spotkanie 5. Tworzenie i używanie funkcji. Przekazywanie argumentów do funkcji. Domyślne wartości argumentów

Pytania sprawdzające wiedzę z programowania C++

Laboratorium 03: Podstawowe konstrukcje w języku Java [2h]

Komunikacja i wymiana danych

Szablony klas, zastosowanie szablonów w programach

Część 4 życie programu

Języki i metodyka programowania. Wprowadzenie do języka C

Zofia Kruczkiewicz, Programowanie obiektowe - java, wykład 2 1

Zdalne wywołanie metod - koncepcja. Oprogramowanie systemów równoległych i rozproszonych Wykład 7. Rodzaje obiektów. Odniesienie do obiektu

Pliki. Informacje ogólne. Obsługa plików w języku C

Programowanie komputerowe. Zajęcia 1

RPC ZDALNE WYWOŁYWANIE PROCEDUR (ang. Remote Procedure Calls)

I - Microsoft Visual Studio C++

Oprogramowanie systemów równoległych i rozproszonych Wykład 7

Złośliwe oprogramowanie Sandrorat (podszywające się pod oprogramowanie Kaspersky) na platformę Android WYNIKI ANALIZY

Platformy Programistyczne Zagadnienia sieciowe i wątki

Wykład 4 Delegat (delegate), właściwości indeksowane, zdarzenie (event) Zofia Kruczkiewicz

Michał Jankowski. Remoting w.net 2.0

Wstęp do programowania INP003203L rok akademicki 2018/19 semestr zimowy. Laboratorium 2. Karol Tarnowski A-1 p.

Zmienne, stałe i operatory

Tablice, funkcje - wprowadzenie

znajdowały się różne instrukcje) to tak naprawdę definicja funkcji main.

NFS jest protokołem zdalnego wywoływania procedur (RPC)

Wybrane działy Informatyki Stosowanej

Podstawy języka C++ Maciej Trzebiński. Praktyki studenckie na LHC IFJ PAN. Instytut Fizyki Jądrowej Polskiej Akademii Nauk. M. Trzebiński C++ 1/16

1 P roste e t ypy p d a d n a ych c - c ąg ą g d a d l a szy 2 T y T py p z ł z o ł żo ż ne e d a d n a ych c : T BLICE

Język C, tablice i funkcje (laboratorium, EE1-DI)

Funkcja (podprogram) void

Transkrypt:

III RPC Zdalne wywoływanie procedur (ang. Remote Procedure Calls ) 1. Koncepcja Aplikacja wywołanie procedury parametry wyniki wykonanie procedury wynik komputer klienta komputer serwera Zaletą takiego rozwiązania jest : a) przeźroczystość rozproszenia (ukrycie faktu komunikacji) b) podniesienie przeźroczystości dostępu (niezależność od sposobu reprezentacji danych w systemu operacyjnym)

2. Realizacja procedura procedury serwera stopka klienta parametry wyniki stopka serwera sieć funkcje sieciowe kontekst jądra funkcje sieciowe kontekst jądra proces klienta proces serwera proces klienta wywołuje procedurę stopka procedury koduje nazwę procedury i jej parametry do uniwersalnego formatu (XDR), tworzy komunikat sieciowy i wysyła go do serwera za pomocą funkcji systemowych proces serwera odbiera komunikat za pomocą funkcji systemowych i przekazuje go do stopki serwera stopka serwera rozkodowuje komunikat a następnie wywołuje odpowiednią procedurę serwera przekazując jej parametry procedura jest wykonywana przez proces serwera, która przy zakończeniu zwraca wartość do stopki serwera stopka serwera koduje do formatu XDR otrzymaną wartość, a następnie tworzy komunikat, który jest wysyłany do procesu klienta stopka klienta odbiera komunikat, dekoduje go i otrzymany wynik przekazuje w procesie klienta jako wynik wykonania procedury

3. Komunikacja między klientem i serwerem rpcbind (portmap) rejestracja serwera lokalizacja program 1 proces klienta komunikacja RPC program 2 serwer komputer klienta komputer serwera zdalne procedury RPC są zgrupowane w programy i wersje, gdzie adresowanie odbywa się za pomocą IP komputera, numeru programu, numeru wersji, numeru procedury kiedy serwer startuje rejestruje swoje programy u serwera portmap kiedy klient chce wywołać zdalną procedurę przez RPC kontaktuje się z serwerem portmap ( port 111 ), który przekazuje mu numer portu dla odpowiedniej procedury (procedury należące do tej samej wersji mają przydzielony ten sam numer portu) Komunikacja między klientem i serwerem odbywa się za pomocą protokołów TCP lub UDP

4. Interfejs RPCGEN RPCGEN jest językiem i prekompilatorem, który pozwala tworzyć pliki w języku C: stopka klienta stopka serwera plik do konwersji danych w standardzie xdr plik nagłówkowy Typy danych akceptowane przez RPCGEN void pusty char znakowy short int, int long int, usigned całkowity float, double zmiennoprzecinkowy typ nazwa[zakres] tablica o stałej długości typ nazwa<zakres> tablica o zmiennej długości string łańcuch znaków struktura typ złożony typedef nazwa_typu definicja_typu uwaga: w przypadku korzystania z typów złożonych ( podwójne wskaxniki) należy użyć wcześniej deklaracji typedef 5. Tworzenie aplikacji przykład: definiuje interfejs zdalny /* ser.x */ struct arg { double x,y; }; program FUNKCJE { version VER1 { double suma( arg )=1; double iloczyn (arg )=2; // numer procedury } =1; // numer wersji } 0x20000001; // numer programu uwaga: funkcje mogą przekazywać tylko jeden argument

generowanie stopki klienta i stopki serwera $ rpcgen ser.x wynik: ser.h ser_svc.c ser_clnt.c ser_xdr.c plik nagłówkowy plik stopki serwera plik stopki klienta plik konwersji danych tworzenie serwera a) edycja pliku serwer.c #include <rpc/rpc.h> #include ser.h double* suma_1_svc ( arg *a, struct svc_req * r) { static double wynik; wynik=a->x+a->y; return &wynik; } double* iloczyn_2_svc ( arg *a, struct svc_req * r) { static double wynik; wynik=a->x*a->y; return &wynik; } b) kompilacja: $ gcc serwer.c ser_svc.c ser_xdr.c -o serwer

tworzenie programu klienta a) edycja pliku klient.c #include <rpc/rpc.h> #include ser.h int main() { char host[100]; CLIENT *kl; double *wynik; arg a; printf("nazwa serwera: "); scanf("%s",host); kl=clnt_create(host,funkcje,ver1,"tcp"); if (kl==null ) {perror("blad servera"); exit(0);} printf("podaj dwie liczby: "); scanf("%d%d",&a.a,&a.b); wynik=suma_1(&a,kl); if (wynik!=null) printf("suma=%d\n",*wynik); wynik=iloczyn_1(&a,kl); if (wynik!=null) printf("iloczyn=%d\n",*wynik); return 0; } b) kompilacja: $ gcc klient.c ser_clnt.c ser_xdr.c -o klient

5. Korzystanie z pliku makefile $ rpcgen -a ser,x wynik: Makefile.ser ser.h ser_svc.c ser_clnt.c ser_xdr.c plik makefile plik nagłówkowy plik stopki serwera plik stopki klienta plik konwersji danych ser_server.c plik programu serwera ( do edycji ) ser_client.c plik programu klienta ( do edycji ) Pliki ser_server.c, ser_client.c edytuje się dla własnej aplikacji kompilacja programu: $ make -f Makefile.ser wynik: ser_server ser_client wykonywalny plik serwera wykonywalny plik clienta

Ćwiczenia Pliki: RPC/ MAKEFILE/ start.x ECHO/ ser.x klient.c serwer.c CALC/ ser.x NIEBLOKUJACE/ Makefile.ser ser.x klient.c serwer.c NIEBLOKUJACE2/ Makefile.ser ser.x klient.c serwer.c BAZA/ Makefile.ser ser.x czytelnik.c pisarz.c serwer.c Ćwiczenia: 1) program echo : wejść do katalogu ECHO $ rpcgen ser.x skompilować serwer: $ gcc serwer.c ser_svc.c -o serwer skompilować klient: $ gcc klient.c ser_clnt.c -o klient uruchomić serwera i klienta w oddzielnych konsolach 2) program obliczający sumę i iloczyn dwóch liczb wejść do katalogu CALC $ rpcgen -Ss ser.x -o serwer.c zdefiniować program serwera ( edycja pliku: serwer.c ) zdefiniować program klienta (plik: klient.c ) skompilować serwer: $ gcc serwer.c ser_svc.c ser_xdr.c -o serwer skompilować klient: $ gcc klient.c ser_svc.c ser_xdr.c -o klient sprawdzić działanie aplikacji 3) korzystanie z pliku makefile usunąć pliki: $ make clean -f Makefile.ser skompilować pliki: $ make -f Makefile.ser sprawdzić działanie aplikacji Zadania: 1) Aplikacja w której działają dwa procesy oraz serwer RPC. Jeden proces wykonuje zapis (struktura) do bazy umieszczonej na serwerze RPC. Drugi proces wykonuje odczyt lub sprawdzenie czy szukany obiekt (struktura) znajduje się w bazie. 2) Rozproszona baza danych. Aplikacja w której działają dwa procesy oraz kilka serwerów RPC. Jeden proces wykonuje zapis do bazy umieszczonej na którymkolwiek serwerze serwerze RPC. Operacja zapisu do bazy musi być powielona na pozostałych serwerach RPC. Drugi proces wykonuje odczyt lub sprawdzenie czy szukany obiekt jest w bazie na dowolnym serwerze RPC. Uwaga: bazą danych jest tablica struktur 3) Rozproszona baza danych dostęp większościowy. Aplikacja taka jak w punkcie (2) z tą różnicą że operacja zapisu jest powielona tylko na 50% +1 serwerów RPC a odczyt jest dokonywany z 50% serwerów i wybierana jest wartość z największą datą. Uwaga: zapis do bazy powinien być zliczany liczbą typu long, która jednocześnie oznacza datę zapisu.

4) Synchronizacja zegarów: Jest ustalona liczba procesów np. 3. Procesy działające w różnych systemach operacyjnych mają synchronizować własne zegary. Każdy proces ma swój lokalny serwer RPC na tym samym komputerze. Proces wykonuje pętlę nieskończoną w której sumuje wartości 1.0. Co jakiś czas proces chce synchronizować wartość sumy z wartościami które obliczają pozostałe procesy. W tym celu wywołuje procedurę RPC pobierz_czas na swoim komputerze, a następnie porównuje pobraną wartość z aktualnie wyliczoną sumą. Jeżeli wartość ta jest większa to aktualizuje sumę tą wartością +1. Następnie wykonuje procedurę RPC zapisz_czas na losowo wybranym zdalnym serwerze. Komunikacja jest przedstawiona na schemacie. P1 P2 P3 RPC-1 RPC-2 RPC-3 5) Komunikator. Korzystając z systemu RPC napisać komunikator dla dwóch klientów którzy interakcyjnie mogą wymieniać informacje w postaci tekstu na dwóch zdalnych komputerach.