Sun RPC/XDR. Dariusz Wawrzyniak 1

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

external Data Representation

external Data Representation

Tworzenie aplikacji rozproszonej w Sun RPC

76.Struktura oprogramowania rozproszonego.

Tunelowanie, kapsułkowanie, XDR. 1. Transmisja tunelowa i kapsułkowanie serwery proxy. 2. Zewnętrzna reprezentacja danych XDR.

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

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

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

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

Sieciowa komunikacja procesów - XDR i RPC

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

Programowanie z użyciem RPC

Wywoływanie procedur zdalnych

Wywoływanie procedur zdalnych

Zdalne wywoływanie procedur RPC. Dariusz Wawrzyniak 1

Język ludzki kod maszynowy

Wywoływanie procedur zdalnych

Zdalne wywoływanie procedur RPC

Zdalne wywoływanie procedur RPC

Podstawy programowania. Wykład 6 Wskaźniki. Krzysztof Banaś Podstawy programowania 1

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

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

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

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

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

Co to jest sterta? Sterta (ang. heap) to obszar pamięci udostępniany przez system operacyjny wszystkim działającym programom (procesom).

Wprowadzenie do szablonów klas

Projektowanie klas c.d. Projektowanie klas przykład

Podstawy programowania w języku C++

Języki i metodyka programowania. Typy, operatory, wyrażenia. Wejście i wyjście.

Podstawy programowania komputerów

Funkcje zawarte w bibliotece < io.h >

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

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

Zadanie 04 Ktory z ponizszych typow danych w jezyku ANSI C jest typem zmiennoprzecinkowym pojedynczej precyzji?

Funkcje zawarte w bibliotece < io.h >

Programowanie współbieżne i rozproszone

Programowanie obiektowe

Programowanie proceduralne INP001210WL rok akademicki 2018/19 semestr letni. Wykład 6. Karol Tarnowski A-1 p.

Wprowadzenie do programowania rozproszonego

Java. język programowania obiektowego. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

۰ Elementem jednostkowym takiego pliku jest bajt. ۰ Format pliku binarnego: [bajty pliku][eof]

Temat: Dynamiczne przydzielanie i zwalnianie pamięci. Struktura listy operacje wstawiania, wyszukiwania oraz usuwania danych.

Część 4 życie programu

Podstawy programowania. Wykład Co jeszcze... Przypomnienia, uzupełnienia. Krzysztof Banaś Podstawy programowania 1

Szablony funkcji i szablony klas

Wykład II. Programowanie II - semestr II Kierunek Informatyka. dr inż. Janusz Słupik. Wydział Matematyki Stosowanej Politechniki Śląskiej

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

Podstawowe części projektu w Javie

Podstawy programowania. Wykład Funkcje. Krzysztof Banaś Podstawy programowania 1

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

utworz tworzącą w pamięci dynamicznej tablicę dwuwymiarową liczb rzeczywistych, a następnie zerującą jej wszystkie elementy,

Systemy rozproszone. Cezary Sobaniec Marek Libuda. Skrypt do ćwiczeń laboratoryjnych. v1.1 07/09/2006

Inżynieria Wytwarzania Systemów Wbudowanych

Wstęp do programowania 1

MATERIAŁY DO ZAJĘĆ II

Strona główna. Strona tytułowa. Programowanie. Spis treści. Sobera Jolanta Strona 1 z 26. Powrót. Full Screen. Zamknij.

Grzegorz Cygan. Wstęp do programowania mikrosterowników w języku C

20. Pascal i łączenie podprogramów Pascala z programem napisanym w C

PROGRAMOWANIE w C prolog

Lab 9 Podstawy Programowania

Podstawy programowania. Wykład 7 Tablice wielowymiarowe, SOA, AOS, itp. Krzysztof Banaś Podstawy programowania 1

Rodzina protokołów TCP/IP. Aplikacja: ipconfig.

Wykład 1

Wskaźniki i dynamiczna alokacja pamięci. Spotkanie 4. Wskaźniki. Dynamiczna alokacja pamięci. Przykłady

Wywoływanie metod zdalnych

Podstawy Programowania

Programowanie strukturalne język C - wprowadzenie

Wstęp do programowania INP001213Wcl rok akademicki 2017/18 semestr zimowy. Wykład 12. Karol Tarnowski A-1 p.

Wykład 6_1 Abstrakcyjne typy danych stos Realizacja tablicowa i za pomocą rekurencyjnych typów danych

Biblioteka standardowa - operacje wejścia/wyjścia

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

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

Ada95 przetwarzanie rozproszone

Ada95 przetwarzanie rozproszone

wykład III uzupełnienie notatek: dr Jerzy Białkowski Programowanie C/C++ Język C - zarządzanie pamięcią, struktury,

Wykład VII. Programowanie. dr inż. Janusz Słupik. Gliwice, Wydział Matematyki Stosowanej Politechniki Śląskiej. c Copyright 2014 Janusz Słupik

Programowanie obiektowe - Przykładowe zadania egzaminacyjne (2005/2006)

Podstawy programowania w języku C++

Stałe, znaki, łańcuchy znaków, wejście i wyjście sformatowane

Tablice, funkcje - wprowadzenie

Programowanie w C++ Wykład 8. Katarzyna Grzelak. 15 kwietnia K.Grzelak (Wykład 8) Programowanie w C++ 1 / 33

Współbieżność, tunelowanie i kapsułkowanie, XDR i RPC

Programowanie w języku C++

// Liczy srednie w wierszach i kolumnach tablicy "dwuwymiarowej" // Elementy tablicy są generowane losowo #include <stdio.h> #include <stdlib.

ang. file) Pojęcie pliku (ang( Typy plików Atrybuty pliku Fragmentacja wewnętrzna w systemie plików Struktura pliku

Podstawy informatyki. Informatyka stosowana - studia niestacjonarne. Grzegorz Smyk. Wydział Inżynierii Metali i Informatyki Przemysłowej

Różności w C++ Marek Pudełko

I - Microsoft Visual Studio C++

Microsoft IT Academy kurs programowania

Języki programowania - podstawy

Podstawy programowania w języku C++

Stałe, tablice dynamiczne i wielowymiarowe

Informatyka I. Typy danych. Operacje arytmetyczne. Konwersje typów. Zmienne. Wczytywanie danych z klawiatury. dr hab. inż. Andrzej Czerepicki

Programowanie strukturalne i obiektowe

Algorytmy i struktury danych. wykład 1

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++

Struktury. Przykład W8_1

Transkrypt:

Remote Procedure Call external Data Representation trójwymiarowa identyfikacja procedur (nr programu, nr wersji, nr procedury) protokół RPC oparty na protokołach warstwy transportowej stosu TCP/IP (TCP lub UDP) wiązanie dynamiczne (portmap lub rpcbind) kanoniczny format reprezentacji danych (XDR) opis interfejsu w języku C-podobnym i przetwarzanie przez narzędzie rpcgen 2 przygotowanie pliku z opisem interfejsu w języku RPC (języku narzędzia rpcgen), zawierającego: definicją struktur danych dla przekazywanych parametrów, specyfikację procedur zdalnych, obejmującą: numer programu, numer wersji i numer procedury, typy argumentów typ zwracanej wartości. wygenerowanie przez rpcgen plików do kompilacji w języku C: pliku nagłówkowego z definicjami stałych, plików z namiastką klienta i namiastką serwera, plików zawierających szkielet procedur zdalnych (fragment programu serwera) i szkielet programu klienta dla potrzeb przetestowania procedur zdalnych, plik do zarządzania kompilacją (Makefile), plik z funkcjami XDR do konwersji zdefiniowanych typów danych. 3 4 uzupełnienie lub dokonanie niezbędnych modyfikacji w zawartości wygenerowanych plików uzupełnienie plików zawierających szkielety procedur zdalnych, uzupełnienie/modyfikacja programu klienta, uzupełnienie/modyfikacja pliku Makefile. kompilacja programów, testowanie działania procedur zdalnych, ewentualne przygotowanie aplikacji w wersji zwartej (nie rozproszonej) w celu przetestowania działania samych procedur, przygotowanie programu klienta korzystającego z procedur zdalnych w sposób wynikający z potrzeb aplikacji. 5 6 Dariusz Wawrzyniak 1

program NAZWA_PROGRAMU { version NAZWA_WERSJI1 { typ nazwa_proc1(typ_arg)=nr_proc; typ nazwa_proc2(typ_arg)=nr_proc; }=numer_wersji; version NAZWA_WERSJI2 { typ nazwa_proc1(typ_arg)=nr_proc; typ nazwa_proc2(typ_arg)=nr_proc; }=numer_wersji; }=numer_programu; 0 0x1FFFFFFF numery standardowe, zdefiniowane (przydzielane) przez firmę Sun, 0x20000000 0x3FFFFFFF przydzielone przez użytkownika, 0x40000000 0x5FFFFFFF zarezerwowane dla aplikacji, które generują numery programów dynamicznie, 0x60000000 0xFFFFFFFF zarezerwowane. 7 8 version DEFAULT_SIGNUM { int rkill(int) = 1; } = 1; struct rkill_params{ int pid; int signum; version SPECIFIED_SIGNUM { int rkill(rkill_params) = 1; } = 2; 9 10 version SPECIFIED_SIGNUM { int rkill(int, int) = 1; } = 2; Opis standardu RFC 1014 Kanoniczna reprezentacja danych oparta na formacie IEEE Deklaratywny język opisu struktur danych (zbliżony do języka C) Koncepcja konwersji oparta na potokach miejscach przechowywania danych w formacie XDR filtrach procedurach konwersji pomiędzy własnym formatem maszyny a formatem kanonicznym (w obu kierunkach) 11 12 Dariusz Wawrzyniak 2

Potok jest miejscem składowania danych XDR, a dokładniej środkiem dostępu do nich w celu: zapisu potok kodujący odczytu potok dekodujący Rodzaje potoków: potok na standardowym wejściu-wyjściu na otwartym pliku potok w pamięci w obszarze pamięci opisanym przez adres i rozmiar w bajtach potok komunikatów (rekordów) na strumieniu danych, zdefiniowanym wraz z procedurami obsługi tego strumienia (zapis, odczyt) Filtr jest procedurą konwersji, służącą do realizacji dostępu do danych w potoku w celu zapisu (kodującą) lub odczytu (dekodującą) zależnie od kierunku działania potoku. Rodzaje filtrów filtr prosty służy do konwersji typów prostych filtr złożony służy do konwersji typów złożonych (np. tablicowych, wskaźnikowych) filtr pochodny połączenie innych filtrów w ramach jednej procedury filtrującej 13 14 filtry Filtr dla: typów prostych: bool_t, char, short, int, long, (również bez znaku) float, double typu wyliczeniowego (enum) typu void potok kodujący potok dekodujący Ogólna postać procedury filtrującej (na przykładzie typu unsigned int): bool_t xdr_u_int(xdr* xdrs, unsigned int *ptr); 15 16 Filtr do konwersji tablic bajtów o ustalonej lub zmiennej wielkości xdr_opaque, xdr_bytes tablic elementów określonego typu o ustalonej lub zmiennej wielkości xdr_vector, xdr_array łańcuchów znaków xdr_string, xdr_wrapstring typów wskaźnikowych xdr_reference, xdr_pointer unii xdr_union (w praktyce dla statycznie zdefiniowanych typów unijnych stosowany jest filtr pochodny) Ogólna postać filtru złożonego: xdr_typ(xdr* xdrs, ptr,..., [xdrproc_t elproc]); W przypadku typu statycznego (ustalona zajętość pamięci) wskaźnik ptr, ma postać char *ptr, w przypadku typu o zmiennej wielkości (konieczność dynamicznej alokacji pamięci) char **ptr. Jeśli typ podstawowy (w przypadku tablic, wskaźników) nie jest z góry określony, konieczne jest wskazanie filtru XDR do konwersji elementu typu podstawowego. 17 18 Dariusz Wawrzyniak 3

xdr_array(xdrs, arrp, sizep, maxsize, elsize, elproc) char **arrp; u_int *sizep, maxsize, elsize; xdrproc_t elproc; xdr_vector(xdrs, arrp, size, elsize, elproc) char *arrp; u_int size, elsize; // pozostałe parametry j.w. xdr_bytes(xdrs, sp, sizep, maxsize) char **sp; // pozostałe parametry j.w. xdr_opaque(xdrs, cp, cnt) char *cp; u_int cnt; xdr_string(xdrs, sp, maxsize) char **sp; u_int maxsize; xdr_wrapstring(xdrs, sp) xdr_string(xdrs, sp, MAXUN.UNSIGNED ); xdr_wrapstring nie wymaga podania rozmiaru (liczby znaków łańcucha) 19 20 xdr_reference(xdrs, pp, size, proc) char **pp; u_int size; xdrproc_t proc; xdr_pointer(xdrs, objpp, objsize, xdrobj) char **objpp; u_int objsize; xdrproc_t xdrobj; xdr_pointer w przeciwieństwie do xdr_reference interpretuje wskaźnik pusty, co umożliwia obsługę rekurencyjnych struktur danych Definicja struktury struct struktura { int x; long y; char c; short s; Filtr XDR bool_t xdr_struktura (XDR *xdrs, struktura *objp) { if (!xdr_int (xdrs, &objp->x)) return FALSE; if (!xdr_long (xdrs, &objp->y)) return FALSE; if (!xdr_char (xdrs, &objp->c)) return FALSE; if (!xdr_short (xdrs, &objp->s)) return FALSE; return TRUE; } 21 22 Przekazanie adresu pustego wskaźnika (typu char**) przy konwersji dekodującej spowoduje dynamiczną alokację pamięci przez filtr XDR. Zwolnienie obszaru dynamicznie zaalokowanej pamięci przez filtr XDR musi nastąpić w programie aplikacyjnym. Ogólna postać funkcji zwalniania pamięci: xdr_free(xdrproc_t proc, char* objp); Potok na standardowym wejściu-wyjściu: void xdrstdio_create(xdr *xdrs, FILE *file, enum xdr_op op); Potok w pamięci: void xdrmem_create(xdr *xdrs, char *addr, u_int size, enum xdr_op op); Potok komunikatów: void xdrrec_create(xdr *xdrs, u_int sendsize, u_int recvsize, char *handle, int (*readit)(char*,char*,int), int (*writeit)(char*,char*,int)); 23 24 Dariusz Wawrzyniak 4

Ustalenie kierunku potoku musi nastąpić po jego utworzeniu (np. xdrs -> x_op = XDR_ENCODE) Rozmiary buforów (parametry sendsize i recvsize) mogą mieć wartość 0, co oznacza przyjęcie wartości domyślnych. Gdy konieczne jest opróżnienie bufora wyjściowego (wysłanie danych) lub zapełnienie bufora wejściowego, wywoływana jest odpowiednia funkcja (writeit, readit) z trzema parametrami: uchwytem handle adresem bufora liczbą bajtów do zapisu/odczytu Oznaczenie końca rekordu (przy zapisie) xdrrec_endofrecord(xdr *xdrs, int sendnow); Pominięcie reszty rekordu (przy odczycie) xdrrec_skiprecord(xdr *xdrs); Sprawdzenie zakończenia strumienia (przy odczycie) xdrrec_eof(xdr *xdrs); 25 26 stałe const MAX = 512; typy wyliczeniowe enum COLOR { red = 1, green = 2, blue = 4 #define MAX 512 enum COLOR { red = 1, green = 2, blue = 4 typedef enum COLOR COLOR; stuktury struct ST { int b; struct ST { int b; typedef struct ST ST; 27 28 unie union UN switch (int d) { case 1: case 2: char b; default: short c; struct UN { int d; union { char b; short c; } UN_u; typedef struct UN UN; tablice typedef int tabf[10]; typedef int tabv<10>; podobnie tablice bajtów typedef opaque btf[10]; typedef opaque btv<10>; łańcuchy znaków typedef string s10<10>; typedef string sbo<>; typedef int tabf[10]; typedef struct { u_int tabv_len; int *tabv_val; } tabv; typem bazowym w jest wówczas char 29 30 Dariusz Wawrzyniak 5