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

Podobne dokumenty
Sun RPC/XDR. Dariusz Wawrzyniak 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

Wywoływanie procedur zdalnych

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

Wywoływanie procedur zdalnych

Programowanie z użyciem RPC

Język ludzki kod maszynowy

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

Zdalne wywoływanie procedur RPC. Dariusz Wawrzyniak 1

Wywoływanie procedur zdalnych

Zdalne wywoływanie procedur RPC

Zdalne wywoływanie procedur RPC

Wprowadzenie do szablonów klas

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

Projektowanie klas c.d. Projektowanie klas przykład

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

Szablony funkcji i szablony klas

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?

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

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

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.

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

MATERIAŁY DO ZAJĘĆ II

PROGRAMOWANIE w C prolog

Wprowadzenie do programowania rozproszonego

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

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

Część 4 życie programu

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

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

Podstawowe części projektu w Javie

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

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

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

Inżynieria Wytwarzania Systemów Wbudowanych

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

Wstęp do programowania 1

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

Programowanie strukturalne język C - wprowadzenie

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

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

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

Lab 9 Podstawy Programowania

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

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

Wywoływanie metod zdalnych

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

Wykład 1

Microsoft IT Academy kurs programowania

Podstawy Programowania

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

Programowanie w języku C++

Algorytmy i struktury danych. wykład 1

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

Ada95 przetwarzanie rozproszone

Ada95 przetwarzanie rozproszone

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

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

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

Ćwiczenie 7 z Podstaw programowania. Język C++, programy pisane w nieobiektowym stylu programowania. Zofia Kruczkiewicz

Podstawy programowania w języku C++

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

Podstawy programowania w języku C++

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

Wstęp do wiadomości teoretycznych (nie, nie jest to masło maślane ani wstęp, wstępów proszę cierpliwie czytać)

Tablice, funkcje - wprowadzenie

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

// 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

ROZDZIAŁ 2. Operatory

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

I - Microsoft Visual Studio C++

Języki programowania - podstawy

Stałe, tablice dynamiczne i wielowymiarowe

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 Dariusz Wawrzyniak (IIPP) 1

uzupełnienie lub dokonanie niezbędnych modyfikacji w zawartości wygenerowanych y 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 program NAZWA_PROGRAMU { version NAZWA_WERSJI1 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) 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 Dariusz Wawrzyniak (IIPP) 2

program REMOTE_KILL { version DEFAULT_SIGNUM { int rkill(int) = 1; } = 1; } = 0x20000001; struct rkill_params{ int pid; int signum; program REMOTE_KILL { version SPECIFIED_SIGNUM { int rkill(rkill_params) = 1; } = 2; } = 0x20000001; 9 10 program REMOTE_KILL { version SPECIFIED_SIGNUM { int rkill(int, int) = 1; } = 2; } = 0x20000001; 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 (IIPP) 3

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 Dariusz Wawrzyniak (IIPP) 4

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 t 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 xdr_array(xdrs, arrp, sizep, maxsize, elsize, elproc) XDR *xdrs; 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) XDR *xdrs; 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 Dariusz Wawrzyniak (IIPP) 5

xdr_reference(xdrs, pp, size, proc) XDR *xdrs; char **pp; u_int size; xdrproc_t proc; xdr_pointer(xdrs, objpp, objsize, xdrobj) XDR *xdrs; 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 pustego wskaźnika typu char** przy konwersji dekodującej j 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 (IIPP) 6

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 XDR (rpcgen) stałe const MAX = 512; typy wyliczeniowe enum COLOR { red = 1, green = 2, blue = 4 język C #define MAX 512 enum COLOR { red = 1, green = 2, blue = 4 typedef enum COLOR COLOR; XDR (rpcgen) stuktury struct ST { int a; int b; język C struct ST { int a; int b; typedef struct ST ST; 27 28 Dariusz Wawrzyniak (IIPP) 7

XDR (rpcgen) unie union UN switch (int d) { case 1: int a; case 2: char b; default: short c; język C struct UN { int d; union { int a; char b; short c; } UN_u; typedef struct UN UN; XDR (rpcgen) 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<>; język C 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 (IIPP) 8