vs7.4

Werbung
7.4 Verteilungsabstraktion in heterogener Umgebung
Szenario: reiner Maschinencode (native code) bei
 unterschiedlichen Rechnerarchitekturen,
 unterschiedlichen Betriebssystemen,
 unterschiedlichen Übersetzern,
 aber nach wie einheitlicher Programmiersprache
erfordert
- Übersetzung von Code-Fragmenten auf jedem System
- nur Daten-, keine Code-Übertragung
- Umcodierung, z.B. mit kanonischer Darstellung im Netz
7.4.1 Höhere Programmiersprachen
Fernaufrufsysteme wurden für viele Sprachen entwickelt,
. . . Modula, . . . , Ada, . . . , Smalltalk, . . . , Eiffel, . . . ,
mit mehr oder weniger guter Verteilungsabstraktion.
Beispiel: Eiffel (Projekt HERON, FU Berlin, Löhr/Wolff/... 1990-96)
 externe Datenrepräsentation: reguläres Ein/Ausgabeformat
 Ortsabstraktion durch separate Konfigurationssprache
 Konfigurator steuert gemäß Konfigurationsbeschreibung
automatisch Übersetzung, Vertretererzeugung und Binden
7.4.2 SUN Remote Procedure Call
= modulorientierte Fernaufrufe für C-Programme bzw. Maschinencode
! C-Programmodule haben zwar Schnittstellen,
aber C kennt kein Sprachkonzept „Schnittstelle“
 Schnittstellenbeschreibung („protocol description“)
mit „RPC language“ XDR (external data representation)
Terminologie:
Service =
Bündel von „Programmen“,
bestehend aus jeweils mehreren „Prozeduren“,
eventuell in jeweils mehreren Versionen
Server
Prozeß, der als Träger eines Service fungiert
=
7.4.2.1 Generierung von Stub Code
Beispiel für Schnittstellenbeschreibung:
/* file rusers.x
/* protocol description for
/* remote users program
*/
*/
*/
/* interface of version 1
*/
program RUSERSPROG {
version RUSERSVERSOLD {
/* void NULL() = 0;
/* automatically generated
int RNUSERS() = 1;
/* number of users
string RUSERS() = 2;
/* info about users
} = 1;
} = 100002;
*/
*/
*/
*/
Vertreter-Erzeuger rpcgen generiert daraus neben den Stubs
/* file rusers.h */
#define RUSERSPROG
((u_long) 100002)
#define RUSERSVERSOLD ((u_long) 1)
#define RNUSERS
((u_long) 1)
extern int *rnusers_1();
#define RUSERS
((u_long) 2)
extern char **rusers_1();
Prozedur und Vertreter tragen den gleichen Namen, haben aber
unterschiedliche Signaturen (s.u. 7.4.2.2).
! Parameter/Ergebnisse müssen grundsätzlich Verweise sein !
7.4.2.2 RPC-Programmierung
So sieht der Anbieter aus:
/* file rusers.c
/* remote users server
#include "rusers.h"
int *rnusers_1() {
static int result;
.....
return(&result);
}
char **rusers_1() {
.....
.....
}
*/
*/
... und so sieht der Klient aus:
#include <rpc/rpc.h>
#include "rusers.h"
int rnusers(host) char *host;
int *result; CLIENT *s;
s = clnt_create(host,
RUSERSPROG,
RUSERSVERSOLD,
"tcp");
if (s!=NULL) {
result = rnusers_1(s);
if (result!=NULL)
return(*result);
else .....
} else .....
}
/* "client handle"
/* remote linking
*/
*/
/* remote call
*/
/*
*/
... failed
/* server not found */
7.4.2.3 Fernbinden und Anbieter-Installation
clnt_create(host,...) realisiert Fernbinden,
d.h. stellt Verbindung mit einem Anbieter her:
1. Auf host existiert (hoffentlich) ein Namensdienst:
Portmapper, stets über Port 111 ansprechbar.
2. Fernaufruf (!) an Portmapper übermittelt den „Namen“
(program, version, protocol) und liefert als Antwort die
Portnummer des entsprechenden Anbieters.
3. Internetadresse von host sowie gelieferte Portnummer
werden im Client Handle eingetragen (und dieses wird
beim Fernaufruf als zusätzliches Argument (!) dem Vertreter
übergeben)
Installation des Anbieters:
Wenn ein Anbieter hochgefahren wird, beinhaltet die
vom Server Stub (!) vorgenommene Initialisierung die
Erzeugung geeigneter Ports sowie deren Registrierung
beim lokalen Portmapper (durch „lokalen Fernaufruf“).
Alternative: Ad-hoc-Installation eines Anbieters (on demand):
Initialisierung des Internet Daemon (3.2.1) beinhaltet
Erzeugung und Registrierung der Ports
(gemäß Konfigurationsdatei).
Anfrage bei einem Port bewirkt Installation des Anbieters.
Eventuell Deaktivierung nach Timeout – mit Rettung und
späterer Wiederherstellung des Zustands (sofern vorhanden).
7.4.2.4 RPC-Protokoll
 verwendet entweder TCP oder UDP, je nach Dienst
 Fehlersemantik:
at-most-once für TCP,
at-least-once für UDP
 Externe Datendarstellung: Codierung der XDR-Typen
 Zugriffsschutz: entweder keiner oder ... (Varianten)
(Information über Standarddienste: ypcat rpc.bynumber)
Herunterladen