Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
ΔημοσίευσεVara Traino Τροποποιήθηκε πριν 10 χρόνια
1
Επικοινωνία μεταξύ διεργασιών Απομακρυσμένες κλήσεις και αντικείμενα
Κώστας Διαμαντάρας Τμήμα Πληροφορικής ΤΕΙ Θεσσαλονίκης 2011
2
Επικοινωνία μεταξύ διεργασιών
Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
3
Επικοινωνία μεταξύ διεργασιών
Δύο βασικές λειτουργίες επικοινωνίας: Αποστολή μηνύματος (send). Η διεργασία Α (αποστολέας) στέλνει μήνυμα στη διεργασία Β (παραλήπτης). Το μήνυμα τοποθετείται στην ουρά του Β ώστε να διαβαστεί όταν ο επεξεργαστής θα είναι διαθέσιμος Παραλαβή μηνύματος (receive). Η διεργασία Β (παραλήπτης) αφαιρεί το πρώτο μήνυμα στην ουρά και το διαβάζει. Δύο βασικοί τρόποι επικοινωνίας Σύγχρονη επικοινωνία (synchronous) ή αλλιώς παρεμποδιστική (blocking) επικοινωνία. Ασύγχρονη επικοινωνία (asynchronous) ή αλλιώς μη-παρεμποδιστική (non-blocking) επικοινωνία. Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
4
Σύγχρονη και Ασύγχρονη επικοινωνία
Σύγχρονη επικοινωνία: όταν εκδίδεται ένα blocking send τότε η διεργασία αποστολέας σταματάει την εκτέλεσή της μέχρι να εκδοθεί εντολή receive (είτε blocking είτε non- blocking) για το μήνυμα αυτό. Αντίστοιχα, όταν εκδίδεται ένα blocking receive τότε η διεργασία που το εξέδωσε μπλοκάρει μέχρι να εκδοθεί το αντίστοιχο send (είτε blocking είτε non-blocking) για το μήνυμα αυτό. Ασύγχρονη επικοινωνία: η διεργασία που εκδίδει ένα non-blocking send συνεχίζει την εκτέλεσή της αμέσως μόλις το μήνυμα γραφτεί σε ένα τοπικό buffer. Η μετάδοση του μηνύματος γίνεται ταυτόχρονα με την υπόλοιπη εκτέλεση της διεργασίας. Η διεργασία που εκδίδει ένα non-blocking receive στην ουσία απλώς παρέχει έναν buffer για να γεμίζει με το αναμενόμενο μήνυμα (όταν έρθει) και συνεχίζει την εκτέλεσή της χωρίς να περιμένει τη λήψη του μηνύματος (αυτή θα γίνει στο background). Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
5
Σύγχρονη και ασύγχρονη επικοινωνία
Πλεονεκτήματα/μειονεκτήματα σύγχρονης επικοινωνίας: + Εύκολα κατανοητή συμπεριφορά, λιγότερο επιρρεπής σε σφάλματα − Δεν εκμεταλλεύεται πλήρως τον παραλληλισμό. Σε κάποιες περιπτώσεις η διεργασία θα μπορούσε να εκτελέσει χρήσιμες εντολές ενώ περιμένει την απομακρυσμένη διεργασία να ανταποκριθεί. Πλεονεκτήματα/μειονεκτήματα ασύγχρονης επικοινωνίας: + Μεγαλύτερη εκμετάλλευση του παραλληλισμού − Μεγαλύτερη πιθανότητα σφάλματος και δυσκολία προγραμματισμού. Ειδικά το non-blocking receive εισάγει ιδιαίτερη πολυπλοκότητα καθώς ο έλεγχος αν ήρθε το μήνυμα πρέπει να γίνεται έξω από την κλασσική ροή του προγράμματος. Πολλά μοντέρνα συστήματα δεν προσφέρουν non- blocking receive. Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
6
Προορισμοί μηνυμάτων Στο πρωτόκολλο internet τα μηνύματα στέλνονται στη διεύθυνση που περιγράφεται από το ζεύγος [IP διεύθυνση, Τοπική θύρα]. Η θύρα δικτύου ή απλώς θύρα είναι ένας ακέραιος αριθμός στον υπολογιστή που συνήθως συνδυάζεται και με διαφορετική υπηρεσία. Ένας υπολογιστής μπορεί να έχει πολλές θύρες ανοιχτές εφόσον εξυπηρετεί πολλές διαφορετικές υπηρεσίες. Αν ένα πρόγραμμα πελάτης χρησιμοποιεί τη σταθερή διεύθυνση IP ενός υπολογιστή S για να αποστέλλει μηνύματα σε μια υπηρεσία, τότε η υπηρεσία πρέπει να τρέχει πάντα στον S. Η δυσκολία αυτή μπορεί να αποφευχθεί αν ο πελάτης χρησιμοποιεί ένα όνομα για κάθε υπηρεσία Υ και να υπάρχει μια υπηρεσία ονοματοδοσίας (binding service) που θα δεσμεύει την Υ στο ζεύγος [IP διεύθυνση, θύρα] του εκάστοτε υπολογιστή που την υποστηρίζει. Αυτό επιτρέπει την υπηρεσία Υ να επανατοποθετείται σε άλλο server ανάλογα με τις ανάγκες ή τα προβλήματα που πιθανώς προκύπτουν. Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
7
Sockets και θύρες δικτύου (ports)
Τα sockets είναι αφηρημένα τερματικά σημεία της επικοινωνίας μεταξύ δύο διεργασιών. Η έννοια προέρχεται από το BSD Unix αλλά εφαρμόζεται σε όλα τα μοντέρνα λειτουργικά συστήματα. Για να πάρει μια διεργασία ένα μήνυμα πρέπει το socket της να προσδεθεί σε μια θύρα δικτύου του υπολογιστή. οποιαδήποτε θύρα προσυμφωνημένη θύρα socket socket μήνυμα πελάτης server θύρες Υπολογιστής IP διεύθυνση Υπολογιστής IP διεύθυνση Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
8
Sockets και ports Οι υπηρεσίες που τρέχουν σε έναν εξυπηρετητή (πχ. η υπηρεσία ftp) δεσμεύουν μια σγκεκριμένη θύρα δικτύου στον υπολογιστή αυτό (πχ. τη θύρα 21). Κάθε πελάτης που θέλει να καλέσει αυτή την υπηρεσία πρέπει να χρησιμοποιήσει την προσυμφωνημένη αυτή θύρα. Ωστόσο η θύρα από όπου εξέρχεται η αίτηση του πελάτη μπορεί να είναι οποιαδήποτε. Μια διεργασία μπορεί να χρησιμοποιεί πολλές θύρες για να λαμβάνει μηνύματα αλλά δεν μπορεί να γίνεται κοινή χρήση της ίδιας θύρας από δύο διαφορετικές διεργασίες στον ίδιο υπολογιστή. Υπάρχουν 216 = διαθέσιμες θύρες δικτύου για κάθε υπολογιστή Κάθε socket συνδέεται μέ ένα συγκεκριμένο πρωτόκολλο μεταφοράς (transport protocol) – είτε UDP είτε TCP. Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
9
Το πρωτόκολλο UDP (User Datagram Protocol)
Στο πρωτόκολλο αυτό το μήνυμα στέλνεται από τον αποστολέα στον παραλήπτη χωρίς επαλήθευση αν παρελήφθη και χωρίς επανάληψη της προσπάθειας. Αν υπάρξει αποτυχία στην διαδρομή του μηνύματος αυτό μπορεί να χαθεί και να μην παραληφθεί ποτέ. Χρήση Σε κάποιες εφαρμογές είναι αποδεκτό να υπάρχει πιθανότητα απώλειας πακέτων χωρίς επανάληψη της μετάδοσης. Τέτοιες υπηρεσίες είναι για παράδειγμα η υπηρεσία ονοματοδοσίας στο internet (Domain Name Service - DNS) η οποία αντιστοιχεί ονόματα (πχ. σε διευθύνσεις IP (πχ ) η υπηρεσία Voice Over IP (VOIP) η οποία μεταδίδει πακέτα ήχου (φωνής) πάνω από το πρωτόκολλο του internet κα Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
10
Το πρωτόκολλο UDP Η χρήση του πρωτοκόλλου UDP είναι ελκυστική για όποιες εφαρμογές δεν απαιτείται εγγυημένη παράδοση των μηνυμάτων διότι αποφεύγονται η ανάγκη αποθήκευσης της κατάστασης του μηνύματος στον αποστολέα και στον παραλήπτη οι καθυστερήσεις από την επαναμετάδοση μηνυμάτων σε περίπτωση αποτυχίας η καθυστέρηση του αποστολέα ο οποίος περιμένει επιβεβαίωση παραλαβής Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
11
Το πρωτόκολλο UDP Χαρακτηριστικά:
Μέγεθος μηνύματος: < 216 bytes (64 Kbytes) αλλά συνήθως < 8 Kbytes Blocking: συνήθως non-blocking send αλλά blocking receive Timeout: Λόγω blocking receive και πιθανότητας απώλειας του μηνύματος μπορεί ο server να περιμένει απ’ άπειρον την παραλαβή του μηνύματος. Για το λόγο αυτό εφαρμόζεται κάποιο όριο χρόνου στην αναμονή Μοντέλο αποτυχίας: Απώλεια μηνύματος: Μπορεί να συμβεί για δύο λόγους (α) υπάρχει checksum error (πχ κάποιο bit αλλοιώθηκε στην πορεία λόγω ηλεκτρικών παρεμβολών) (β) γέμισε ο buffer παραλαβής μηνυμάτων κάποιου κόμβου στη διαδρομή του μηνύματος Τα μηνύματα μπορούν να παραληφθούν με άλλη σειρά από αυτή που στάλθηκαν Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
12
Το πρωτόκολλο TCP Στο πρωτόκολλο TCP το socket SC ενός πελάτη και το socket SS ενός εξυπηρετητή συνδέονται με δύο ροές δεδομένων και προς τις δύο κατευθύνσεις. Μια διεργασία του πελάτη στέλνει πληροφορία σε μια άλλη στον εξυπηρετητή γράφοντας στη ροή εξόδου του socket της (το SC ) ενώ η άλλη διαβάζει τη ροή εισόδου στο δικό της socket (το SS ) Γίνεται προσπάθεια τα πακέτα να φθάσουν στον προορισμό τους και ο αποστολέας να ενημερωθεί ότι ελήφθησαν σωστά Σε περίπτωση αποτυχίας παραλαβής ενός πακέτου αυτό επαναμεταδίδεται Τα πακέτα παραλαμβάνονται με την σειρά που στάλθηκαν Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
13
Το πρωτόκολλο TCP Χρήση
Η υπηρεσία HTTP (HyperText Transfer Protocol) που χρησιμοποιείται για την επικοινωνία μεταξύ web browsers και web servers. Η υπηρεσία FTP (File Transfer Protocol) που χρησιμοποιείται για την μεταφορά αρχείων από τον εξυπηρετητή στον πελάτη Η υπηρεσία Telnet που προσφέρει πρόσβαση υπό μορφή κονσόλας τερματικού σε έναν απομακρυσμένο υπολογιστή Η υπηρεσία SMTP (Simple Mail Transfer Protocol) που χρησιμοποιείται για την αποστολή κα Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
14
Το πρωτόκολλο TCP Χαρακτηριστικά
Μέγεθος: Τα μηνύματα κόβονται σε πακέτα μήκους συνήθως < Bytes Χαμένα μηνύματα: Το TCP χρησιμοποιεί επιβεβαίωση ότι το μήνυμα που στάλθηκε παραλήφθηκε επιτυχώς. Αλλιώς γίνεται επαναμετάδοση Έλεγχος κυκλοφορίας: Το TCP προσπαθεί να ταιριάζει την ταχύτητα του αποστολέα με αυτή του παραλήπτη. Αν πχ, ο αποστολέας στέλνει πιο γρήγορα μηνύματα απ’ ότι ο παραλήπτης είναι σε θέση να διαβάσει τότε ο αποστολέας μπλοκάρεται μέχρι ο παραλήπτης να διαβάσει (να καταναλώσει) ικανοποιητικό αριθμό πακέτων. Διπλά πακέτα και ορισμός της σειράς των πακέτων: γίνεται αρίθμηση των πακέτων με τη σειρά που στάλθηκαν έτσι ώστε να σβήνονται τα διπλότυπα πακέτα και να μπορεί να τακτοποιηθούν στη σωστή σειρά στον παραλήπτη Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
15
Χαρακτηριστικά (συνέχεια)
Το πρωτόκολλο TCP Χαρακτηριστικά (συνέχεια) Timeout: Αν για κάποιο πακέτο δεν ληφθεί επιβεβαίωση εντός συγκεκριμένου χρονικού ορίου ότι παραλήφθηκε επιτυχώς τότε θεωρείται ότι υπάρχει αποτυχία αποστολής και ξαναστέλνεται. Η ακεραιότητα των πακέτων ελέγχεται με checksums. Επίσης τα πακέτα ενός μηνύματος αριθμούνται ώστε αν ένα πακέτο επαναμεταδοθεί ενώ κυκλοφορεί ήδη ένα αντίγραφό του τότε το ένα από τα δύο απορρίπτεται στο παραλήπτη. Μοντέλο αποτυχίας Σε περίπτωση σοβαρών καθυστερήσεων ή διακοπής της σύνδεσης ενημερώνεται η διεργασία που χρησιμοποιεί το πρωτόκολλο. Η διεργασία δεν μπορεί να διακρίνει αν φταίει το δίκτυο ή απλώς κατέρρευσε η άλλη διεργασία με την οποία επικοινωνεί Η διεργασία δεν ξέρει αν παραλήφθηκαν επιτυχώς τα πακέτα που στάλθηκαν πρόσφατα (πριν εκπνεύσει ο χρόνoς timeout) Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
16
Επικοινωνία διεργασιών στο UNIX
Sockets για UDP datagrams Client: Αποστολή μηνύματος Server: Παραλαβή μηνύματος struct sockaddr_in ClntAddr; struct sockaddr_in ServAddr; int s, MSGLEN=strlen(“message”); s = socket(AF_INET, SOCK_DGRAM, 0); ... bind(s, &ClntAddr, sizeof(ClntAddr); sendto(s, “message”, MSGLEN, 0, &ServAddr, sizeof(ServAddr)); struct sockaddr_in ClntAddr; struct sockaddr_in ServAddr; int s, len; int BUFLEN=100; char buf[BUFLEN]; s = socket(AF_INET, SOCK_DGRAM, 0); ... bind(s, &ServAddr, sizeof(ServAddr)); len = recvfrom(s, buf, BUFLEN, 0, &ClntAddr, sizeof(ClntAddr)); Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
17
Επικοινωνία διεργασιών στο UNIX
Sockets για streaming Client: Αίτηση σύνδεσης Server: Αποδοχή σύνδεσης char buffer[MAXLEN]; int len, s; struct sockaddr_in ServAddr; int AddrLen=sizeof(struct sockaddr_in); s = socket(AF_INET, SOCK_STREAM, 0); connect(s, &ServAddr, AddrLen); len = recv(s, buf, MAXLEN, 0); struct sockaddr_in ClntAddr; struct sockaddr_in ServAddr; int s, newsocket; char msg[] = "Hello World !\n"; int AddrLen=sizeof(struct sockaddr_in); s = socket(AF_INET, SOCK_STREAM, 0); bind(s, &ServAddr, sizeof(serv)); /* start listening, allowing a queue of * up to 5 pending connection */ listen(s, 5); newsocket = accept(s, &ClntAddr, &AddrLen); send(newsocket, msg, strlen(msg), 0); Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
18
Κατανεμημένη επεξεργασία
Απομακρυσμένες κλήσεις διαδικασιών (RPC) Αντικειμενοστραφής σχεδίαση (CORBA, Java RMI) Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
19
Κλήση απομακρυσμένων Διαδικασιών Remote Procedure Calls (RPC)
Ευρέως διαδεδομένη μέθοδος επικοινωνίας μεταξύ εφαρμογών σε ένα κατανεμημένο σύστημα Δύο προγράμματα PC , PS , σε διαφορετικούς κόμβους (client και server) αλληλεπιδρούν με το πρόγραμμα PC να καλεί διαδικασίες (ρουτίνες) από το πρόγραμμα PS σαν να έτρεχαν στην ίδια μηχανή. Δημοφιλής μέθοδος κατανεμημένης επεξεργασίας καθώς Η κλήση (call) μιας διαδικασίας (ρουτίνας) είναι γνωστή και κατανοητή έννοια σε όλους τους προγραμματιστές Ορίζονται συγκεκριμένες συναρτήσεις διεπαφής S1(), S2(), ..., SN() μεταξύ πελάτη και εξυπηρετητή, με σαφείς λειτουργίες και τύπους ορισμάτων. Η συνολική διεπαφή (σύνολο S1, S2, ..., SN) είναι σαφής οπότε, σε κάποιες περιπτώσεις, ο κώδικας επικοινωνίας μπορεί να γραφτεί αυτόματα. Μπορούν να γραφτούν μεγαλύτερες ενότητες λογισμικού (modules) που μπορούν να χρησιμοποιηθούν από άλλους κόμβους Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
20
Πρωτόκολλα ανταλλαγής RPC (RPC exchange protocols)
Πρωτόκολλο Αίτησης [Request (R)]: Στέλνεται μόνο ένα μήνυμα αίτησης από τον πελάτη στον εξυπηρετητή. Δεν επιστρέφεται καμία τιμή και ο πελάτης δεν ζητά επαλήθευση ότι η διαδικασία εκτελέστηκε. Χρήση πακέτων UDP με κίνδυνο απώλειας Πρωτόκολλο Αίτησης – Απόκρισης [Request – Reply (RR)]: Η πιο συνηθισμένη περίπτωση. Ο πελάτης στέλνει αίτηση, και ο εξυπηρετητής αποκρίνεται. Δεν απαιτείται επαλήθευση από τον πελάτη καθώς η απόκριση του εξυπηρετητή αποτελεί επαλήθευση ότι ελήφθη το αίτημα. Όταν γίνει επόμενο RPC από τον ίδιο πελάτη θεωρείται ότι επαληθεύεται το προηγούμενο RPC. Χρήση πακέτων TCP. Πρωτόκολλο Αίτησης – Απόκρισης – Επαλήθευσης [Request – Reply – Acknowledge (RRA)]: Ίδιο με το RR με επί πλέον επαλήθευση της λήψης της απόκρισης του εξυπηρετητή με ένα μήνυμα του πελάτη προς τον εξυπηρετητή Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
21
Πρωτόκολλα ανταλλαγής RPC
Όνομα Αποστολέας Μηνύματος Πελάτης Εξυπηρετητής R Αίτηση RR Απόκριση RRA Επιβεβαίωση Δομή μηνύματος request-reply messageType int (0=request, 1=reply) requestId int objectReference RemoteObjectRef methodId int ή Method arguments // array Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
22
Απομακρυσμένες κλήσεις διαδικασιών
Πελάτης Εξυπηρετητής Εφαρμογή Απομακρυσμένη Εφαρμογή Τοπική Απόκριση Τοπική Κλήση Απόκριση Τοπική Απόκριση Τοπική Τοπική Κλήση Κλήση Τοπική Τοπική ρουτίνα (εφαρμογή χρήστη ή συνάρτηση πυρήνα του ΛΣ) Απομακρυσμένη κλήση Client Stub Server Stub Μηχανισμός RPC Μηχανισμός RPC Απομακρυσμένη απόκριση Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
23
Μηχανισμός απομακρυσμένης κλήσης
Κλήση του πελάτη Η εφαρμογή του πελάτη καλεί το client stub (= ενδιάμεσο πρόγραμμα που αναλαμβάνει να διεκπεραιώσει το RPC). Η κλήση είναι τοπική με παραμέτρους που γίνονται push κανονικά στη σωρό (stack). Το client stub πακετάρει τις παραμέτρους σε ένα μήνυμα και εκτελεί μια κλήση συστήματος (system call) για να στείλει το μήνυμα. Το πακετάρισμα των παραμέτρων καλείται marshalling. Ο πυρήνας του ΛΣ του πελάτη στέλνει το μήνυμα στον εξυπηρετητή. Ο πυρήνας του ΛΣ του εξυπηρετητή περνάει τα εισερχόμενα πακέτα στο server stub (= αντίστοιχο του client stub αλλά από τη μεριά του server). Το server stub ξεπακετάρει τις παραμέτρους (unmarshalling) και καλεί την ρουτίνα στον εξυπηρετητή κάνοντας push τις παραμέτρους στη σωρό του εξυπηρετητή Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
24
Μηχανισμός απομακρυσμένης κλήσης
Απόκριση του εξυπηρετητή Αφού ολοκληρωθεί η ρουτίνα ο εξυπηρετητής καλεί το τοπικό server stub. Οι παράμετροι γίνονται pop κανονικά από την τοπική σωρό (stack). Το server stub πακετάρει τις παραμέτρους σε ένα μήνυμα και εκτελεί μια κλήση συστήματος (system call) για να στείλει το μήνυμα. Ο πυρήνας του ΛΣ του εξυπηρετητή στέλνει το μήνυμα στον πελάτη. Ο πυρήνας του ΛΣ του πελάτη περνάει τα εισερχόμενα πακέτα στο τοπικό client stub. Το client stub ξεπακετάρει τις παραμέτρους ενημερώνει τις παραμέτρους και τερματίζει την κλήση κάνοντας pop τις παραμέτρους από την τοπική σωρό. Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
25
Θέματα απομακρυσμένων κλήσεων
Πέρασμα παραμέτρων: γίνεται αποκλειστικά κλήση ως προς την τιμή (call by value). Το πέρασμα παραμέτρων με κλήση κατ’ αναφορά (call by reference), δηλαδή το πέρασμα παραμέτρων με χρήση pointer στη μεταβλητή, δεν είναι πρακτικά εφικτή καθώς δεν είναι γνωστή στον πελάτη η διεύθυνση της μεταβλητής στη μνήμη του εξυπηρετητή. Αναπαράσταση τύπων δεδομένων. Εφόσον ο πελάτης και ο εξυπηρετητής είναι μηχανές που αναπαριστούν τους τύπους δεδομένων με τον ίδιο τρόπο τότε δεν υπάρχει πρόβλημα στο πακετάρισμα και ξεπακετάρισμα των παραμέτρων. Πχ, αν ο τύπος int αναπαρίσταται με 4 bytes και στις δύο μηχανές βάζοντας το most significant byte πρώτο τότε το μήνυμα θα διαβαστεί σωστά πελάτης int a int b int a=ΟΚ int b=ΟΚ εξυπ/τής 00 fa c3 b1 01 3b d0 26 00 fa c3 b1 01 3b d0 26 πακετάρισμα ξεπακετάρισμα Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
26
Θέματα απομακρυσμένων κλήσεων
Αναπαράσταση τύπων δεδομένων (συνέχεια). Έστω όμως ότι οι αναπαραστάσεις των δεδομένων ανάμεσα στις δύο μηχανές διαφέρουν μεταξύ τους. Πχ, στον πελάτη ο τύπος int περιγράφεται με 4 bytes ενώ στον εξυπηρετητή περιγράφεται με 8 bytes. Τότε δημιουργείται πρόβλημα. Λύση: η χρήση ενδιάμεσης αναπαράστασης όλων των τύπων δεδομένων (ακεραίων, αριθμών κινητής υποδιαστολής, συμβολοσειρών, κλπ). Οι εγγενείς τύποι του μηχανήματος μετατρέπονται στην ενδιάμεση αναπαράσταση πριν το πακετάρισμα και από την ενδιάμεση αναπαράσταση μετά το ξεπακετάρισμα. πελάτης int a int b int a = λάθος int b=? εξυπ/τής 00 fa c3 b1 01 3b d0 26 00 fa c3 b101 3b d0 26 πακετάρισμα ξεπακετάρισμα Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
27
Θέματα απομακρυσμένων κλήσεων
Δέσμευση (binding). Τα προγράμματα του πελάτη δημιουργούν ένα «δεσμό» (bind) με τον εξυπηρετητή ώστε να εγκαταστήσουν μια συνεδρία επικοινωνίας (session). Ο δεσμός περιεχει όλη την πληροφορία που χρειάζεται η εφαρμογή του πελάτη ώστε να δημιουργήσει το session: πληροφορία σχετικά με τον εξυπηρετητή που θα χρησιμοποιηθεί: διεύθυνση (address) και πόρτα (port) στην οποία «ακούει» τις κλήσεις για τα προγράμματα που εξυπηρετεί. τους αριθμούς των προγραμμάτων που εξυπηρετούνται. Τα προγράμματα ταυτοποιούνται με κάποιο μοναδικό αριθμό ώστε να χρησιμοποιούνται από όλους τους πελάτες στο δίκτυο. Το session είναι απαραίτητο για να γίνει η απομακρυσμένη κλήση και το binding είναι απαραίτητο για να γίνει το session: Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
28
Θέματα απομακρυσμένων κλήσεων
Επιλογές Binding: Μη συνεχής δέσμευση (non-persistent binding): Ο δεσμός μεταξύ πελάτη και εξυπηρετητή δημιουργείται ακριβώς πριν από την κλήση της απομακρυσμένης διαδικασίας και τερματίζεται μόλις επιστραφούν οι τιμές, δηλαδή μόλις ολοκληρωθεί η κλήση. + Οικονομία στους πόρους του συστήματος − Μεγάλο χρονικό κόστος αν γίνονται πολλά RPC από τον ίδιο πελάτη Συνεχής δέσμευση (persistent binding): Ο δεσμός μεταξύ πελάτη και εξυπηρετητή δημιουργείται ακριβώς πριν από την κλήση της απομακρυσμένης διαδικασίας αλλά διατηρείται και μετά την ολοκλήρωση της κλήσης. Τερματίζεται μετά από το πέρας συγκεκριμένου χρονικού ορίου αδράνειας του δεσμού. + Μικρότερο χρονικό κόστος όταν γίνονται πολλά RPC από τον ίδιο πελάτη − Καταναλώνει πόρους του συστήματος για μεγάλο διάστημα Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
29
Θέματα απομακρυσμένων κλήσεων
Δύο τρόποι επικοινωνίας: Σύγχρονος και Ασύγχρονος. Σύγχρονη κλήση (Synchronous RPC) : η εφαρμογή του πελάτη που ενεργοποιεί την απομακρυσμένη κλήση περιμένει μέχρι να επιστραφεί η απάντηση από τον εξυπηρετητή. Μοιάζει με μια κλασική κλήση τοπικής υπορουτίνας κατά την οποία το πρόγραμμα που κάλεσε την υπορουτίνα μπλοκάρει μέχρι αυτή να επιστρέψει. + Εύκολα κατανοητή συμπεριφορά, συμβατή με τον κλασικό προγραμματισμό − Δεν εκμεταλλεύεται πλήρως τον παραλληλισμό. Σε κάποιες περιπτώσεις ο πελάτης θα μπορούσε να εκτελέσει χρήσιμες εντολές ενώ περιμένει την απομακρυσμένη κλήση να επιστρέψει. Αυτό δεν γίνεται αν πρέπει να περιμένει την επιστροφή της κλήσης. Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
30
Θέματα απομακρυσμένων κλήσεων
Ασύγχρονη κλήση (Asynchronous RPC) : Η εφαρμογή του πελάτη που κάνει την απομακρυσμένη κλήση συνεχίζει την εκτέλεση κανονικά χωρίς να περιμένει την απομακρυσμένη απόκριση. Δύο σενάρια: + Μεγαλύτερη εκμετάλλευση του παραλληλισμού − Μεγαλύτερη πιθανότητα σφάλματος και δυσκολία προγραμματισμού Α: Έναρξη RPC Κάνω κάτι χρήσιμο ενώ περιμένω Αν το RPC ολοκληρώθηκε πάω στο 4 αλλιώς επιστρέφω στο 2 Συνέχίζω... Β: Έναρξη πολλαπλών RPC Αν ολοκληρώθηκαν ΟΛΑ τα RPCs πάω στο 4 αλλιώς επιστρέφω στο 2 Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
31
Θέματα απομακρυσμένων κλήσεων
Γλώσσες ορισμού της διεπαφής (Interface Definition Languages – IDL) SUN XDR IDL Microsoft Interface Definition Language (MIDL) Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
32
Αντικειμενοστραφής κατανεμημένη επεξεργασία
Εναλλακτικά με τη μέθοδο των απομακρυσμένων κλήσεων διαδικασιών (RPC) έχει αναπτυχθεί τα τελευταία χρόνια μια αντικειμενοστραφής προσέγγιση στην επικοινωνία μεταξύ υπολογιστών (πελάτη – εξυπηρετητή). Σύμφωνα με την προσέγγιση αυτή υπάρχουν αντικείμενα (objects) τα οποία διαθέτουν μεθόδους (κατά το πρότυπο της Java). Οι μέθοδοι αυτές μπορούν να κληθούν από απομακρυσμένους πελάτες όπως περίπου γίνεται μια κλήση RPC. Η απομακρυσμένη κλήση μεθόδων (Remote Method Invocation – RMI) είναι μια τεχνική που σε πολλά σημεία μοιάζει με την μέθοδο RPC. Για παράδειγμα, γίνεται και εδώ marshalling των δεδομένων που ανταλλάσσονται ενώ χρησιμοποιούνται μηνύματα για την επικοινωνία των μεταξύ των εφαρμογών πελάτη και εξυπηρετητή. Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
33
Το μοντέλο των αντικειμένων
Βασική ορολογία των αντικειμενοστραφών εφαρμογών Αναφορά σε αντικείμενο (object reference): Μια μεταβλητή που φαίνεται να φυλάει ένα αντικείμενο στην πραγματικότητα φυλάει μια αναφορά (pointer) στο αντικείμενο Διεπαφή (Interface): σύνολο ονομάτων, τύπων ορισμάτων εισόδου, επιστρεφόμενων τιμών, και εξαιρέσεων που αντιστοιχούν στις μεθόδους ενός αντικειμένου, δηλαδή οι μέθοδοι του αντικειμένου χωρίς τον κώδικα. Ενέργεια (Action): η κλήση μιας μεθόδου. Το αντικείμενο που αντιστοιχεί στην μέθοδο που καλείται λέγεται στόχος (target) ή παραλήπτης (receiver). Μια ενέργεια μπορεί να έχει τα εξής αποτελέσματα : Αλλάζει την κατάσταση του παραλήπτη αντικειμένου ή Δημιουργεί νέο αντικείμενο (τότε η μέθοδος καλείται constructor) ή Καλεί επί πλέον μεθόδους άλλων αντικειμένων Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
34
Το μοντέλο των αντικειμένων
Εξαιρέσεις (Exceptions): όταν προκύπτουν σφάλματα ή απρόβλεπτες καταστάσεις μπορεί να προκληθεί μια εξαίρεση. Ένα κομμάτι κώδικα «πετάει» (throw) μια εξαίρεση στην περίπτωση συγκεκριμένου σφάλματος. Την εξαίρεση «πιάνει» (catch) ένα άλλο κομμάτι κώδικα που χειρίζεται το συγκεκριμένο σφάλμα. Μετά το catch ο έλεγχος δεν ξαναγυρίζει στο σημείο που προκλήθηκε throw (μοιάζει πολύ με την διαχείριση διακοπών στο λειτουργικό σύστημα). Συλλογή σκουπιδιών (garbage collection): όταν ένα αντικείμενο δεν είναι πλέον προσπελάσιμο πρέπει να απελευθερωθεί ο χώρος που καταλαμβάνει στη μνήμη. Γλώσσες όπως η Java έχουν αυτοματοποιημένη συλλογή σκουπιδιών σε αντίθεση με άλλες γλώσσες (πχ C++) όπου τα σκουπίδια μπορεί να προκαλέσουν σημαντικά προβλήματα στο πρόγραμμα. Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
35
Κατανεμημένα αντικείμενα
Στα συστήματα κατανεμημένων αντικειμένων τα αντικείμενα βρίσκονται στον εξυπηρετητή ο οποίος και τα διαχειρίζεται, ενώ οι πελάτες καλούν απομακρυσμένα τις μεθόδους των αντικειμένων αυτών (remote method invocation). Όπως και στο RPC η κλήση μιας μεθόδου γίνεται με αποστολή μηνύματος από τον πελάτη στον εξυπηρετητή. Η κλήση εκτελείται στον εξυπηρετητή και το αποτέλεσμα επιστρέφεται στον πελάτη με άλλο μήνυμα. Ένας εξυπηρετητής Α μπορεί να καλέσει απομακρυσμένα μια μέθοδο ενός άλλου εξυπηρετητή Β, γινόμενος έτσι πελάτης του Β. Με τον τρόπο αυτό μπορούν να δμηιουργηθούν «αλυσσίδες» κλήσεων για την υλοποίηση μιας μεθόδου. Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
36
Κατανεμημένα αντικείμενα
Εκτός από το κλασικό μοντέλο προσπέλασης ενός αντικειμένου σε ένα μοναδικό εξυπηρετητή υπάρχει και η εναλλακτική περίπτωση το αντικείμενο να αντιγραφεί σε ένα δεύτερο εξυπηρετητή τόσο για λόγους ανοχής σε σφάλματα όσο και για καλύτερη επίδοση. Πλεονεκτήματα αντικειμενοστραφούς σχεδίασης: Το να έχεις ξεχωριστά αντικείμενα πελάτη και αντικείμενα εξυπηρετητή επιβάλει την ενθυλάκωση (encapsulation). Το αντικείμενο βρίσκεται μέσα σε ένα «θύλακα», δηλαδή, η κατάσταση του είναι προσπελάσιμη μόνο μέσω των συγκεκριμένων μεθόδων που προσφέρονται γι’αυτό συνεπώς προστατεύεται απο χρήση μη εγκεκριμένων μεθόδων (εσφαλμένων ή κακόβουλων) Ένα απομακρυσμένο αντικείμενο μπορεί να αντιγραφεί σε μια τοπική cache στον πελάτη και προσπελαστεί άμεσα και γρήγορα, εφόσον η υλοποίηση της κλάσης είναι διαθέσιμη τοπικά. Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
37
Αναφορά σε κατανεμημένα αντικείμενα
Όταν ένας πελάτης καλεί μια μέθοδο ενός κατανεμημένου αντικειμένου στέλνει ένα μήνυμα στον εξυπηρετητή που φιλοξενεί το αντικείμενο. Η αναφορά στο αντικείμενο απαιτεί τη χρήση ενός μοναδικού στοιχείου ταυτότητας (identifier) το οποίο πρέπει να περιέχεται στο μήνυμα. Γενικά μπορεί να υπάρχουν πολλές διεργασίες σε διαφορετικούς κόμβους που φιλοξενούν κατανεμημένα αντικείμενα, οπότε απαιτείται μοναδική ταυτοποίηση του κάθε αντικειμένου ώστε να αποφεύγονται τα λάθη (πχ. κλήση σε λάθος αντικείμενο). Αν ένα απομακρυσμένο αντικείμενο σβηστεί είναι σημαντικό η αναφορά σε αυτό να μην ξαναχρησιμοποιηθεί. Ακόμη και αν χρησιμοποιηθεί ξανά τότε πρέπει να οδηγήσει σε λάθος παρά να επιτρέψουμε την προσπέλαση ενός άλλου αντικειμένου! Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
38
Αναφορά σε κατανεμημένα αντικείμενα
Ένας απλός τρόπος μοναδικής ταυτοποίησης ενός κατανεμημένου αντικειμένου είναι ο συνδυασμός (α) της IP διεύθυνσης του εξυπηρετητή που το φιλοξενεί (β) του αριθμού της θύρας (port number) της διεργασίας που το δημιούργησε (γ) του χρόνου της δημιουργίας του αντικειμένου (συνήθως εκφρασμένος σε δευτερόλεπτα από την 1/1/1970) και (δ) τον τοπικό αριθμό του αντικειμένου 32 bits 32 bits 32 bits 32 bits IP διεύθυνση Αριθμός θύρας Χρόνος Αριθμός αντικειμένου Διεπαφή Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
39
Κλήση κατανεμημένων αντικειμένων
Στα απλά πρωτόκολλα RMI το αντικείμενο δημιουργείται μαζί με τη διεργασία, καλείται με το μοναδικό αριθμό ταυτότητας που περιγράψαμε παραπάνω, εφόσον η διεργασία που το δημιούργησε εξακολουθεί να τρέχει, ενώ καταστρέφεται όταν η διεργασία τερματίζεται. Το μειονέκτημα του παραπάνω τρόπου ταυτοποίησης των αντικειμένων είναι ότι δεσμεύονται σε ένα συγκεκριμένο εξυπηρετητή και δε μπορούν να μεταναστεύσουν σε άλλον. Αυτό έχει συνέπεια ως προς την αξιοπιστία του συστήματος σε περίπτωση σφάλματος (πχ κατάρρευσης) του υπολογιστή που φιλοξενεί το αντικείμενο. Υπάρχουν εναλλακτικοί τρόποι ταυτοποίησης αντικειμένων όταν απαιτείται διαφανής αναφορά σε ένα αντικείμενο (χωρίς δέσμευση σε κάποιο server). Παράδειγμα η αρχιτεκτονική CORBA Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
40
CORBA (Common Object Request Broker Architecture)
Η Αρχιτεκτονική Μεσίτη για Αιτήσεις Κοινόχρηστων Αντικειμένων (Common Object Request Broker Architecture - CORBA) είναι ένα standard του Object Management Group (OMG) που επιτρέπει σε εφαρμογές γραμμένες σε διαφορετικές γλώσσες και πλατφόρμες να συνεργάζονται μεταξύ τους μέσω κατανεμημένων αντικειμένων. Η γλώσσα ορισμού των διεπαφών (Interface Definition Language – IDL) της CORBA επιτρέπει στον πελάτη και τον εξυπηρετητή να γράφουν εφαρμογές σε οποιαδήποτε γλώσσα επιθυμούν αντικειμενοστραφή (πχ Java) ή όχι (πχ. C) Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
41
Βασικά συστατικά της αρχιτεκτονικής CORBA
Δυναμικός σκελετός Δυναμική κλήση Αποθήκη υλοποίησης μεθόδων Αποθήκη διεπαφών ή ή αίτημα πρόγραμμα Υπηρεσία Α Object Adapter IDL skeleton IDL stub Α ORB ORB απόκριση πελάτης server Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
42
Χαρακτηριστικά του CORBA
Οι πελάτες δημιουργούν κλήσεις σε απομακρυσμένα αντικείμενα Ο πυρήνας ORB είναι υπεύθυνος για την επικοινωνία μεταξύ πελατών και απομακρυσμένων αντικειμένων. Ο πυρήνας ORB βρίσκει το αντικείμενο στο δίκτυο μέσω της υπηρεσίας ονομάτων. Οι προγραμματιστές δεν χρειάζεται να γνωρίζουν την τοποθεσία του αντικειμένου. Η υπηρεσία ονομάτων (naming service) αντιστοιχεί τα ονόματα των αντικειμένων με τους servers όπου αυτά φιλοξενούνται. Είναι ένας binder. Διεπαφή (interface): σύνολο μεθόδων και τύπων που υποστηρίζονται από το αντικείμενο. Η γλώσσα διεπαφής IDL χρησιμοποιείται για να ορίσει τα αντικείμενα και τις μεθόδους τους. Παράδειγμα διεπαφής σε γλώσσα IDL Interface Factory { Object create(); }; Διεπαφή Factory Μέθοδος create(). Επιστρέφει αναφορά σε ένα αντικείμενο τύπου Object Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
43
Χαρακτηριστικά του CORBA
Η Αποθήκη μεθόδων καταγράφει τα αντικείμενα και τους servers που είναι ενεργοποιημένοι Η Αποθήκη διεπαφών καταγράφει όλες τις καταχωρημένες διεπαφές, δηλαδή ονόματα μεθόδων και τα ορίσματα που χρησιμποιούν Το απόκομμα IDL (IDL stub) εκτελεί κλήσεις στον πυρήνα ORB εκ μέρους της εφαρμογής του πελάτη για μια συγκεκριμένη μέθοδο Α Ο σκελετός IDL (IDL skeleton) καλεί μια συγκεκριμένη μέθοδο Α στον εξυπηρετητή Με τη δυναμική κλήση ο πελάτης καλεί μια απομακρυσμένη μέθοδο η οποία δεν υπήρχε την ώρα της μετάφρασης, χρησιμοποιώντας την αποθήκη μεθόδων και την πληροφορία που παίρνει από εκεί για να χρησιμοποιήσει τα κατάλληλα ορίσματα. Με τον δυναμικό σκελετό μπορεί να προστεθεί δυναμικά ένα αντικείμενο με τις μεθόδους του στον server το οποίο δεν ήταν γνωστό κατά τη διάρκεια της μετάφρασης. Ο δυναμικός σκελετός εξυπηρετή δυναμικές κλήσεις. Ο προσαρμοστής αντικειμένου (Object adapter) διαχείρίζεται λειτουργίες όπως η ενεργοποίηση αντικειμένων και η ενεργοποίηση μεθόδων. Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
44
Java RMI Το Java Remote Object Invocation επεκτείνει το μοντέλο αντικειμένων της Java ώστε να καλύπτει κατανεμημένα αντικείμενα. Ο προγραμματισμός είναι απλούστερος από την CORBA καθώς τα προγράμματα client και server γράφονται στην ίδια γλώσσα (Java). //Παράδειγμα απομακρυσμένης διεπαφής (interface) import java.rmi.*; import java.util.Vector; public interface Shape extends Remote { int getVersion() throws RemoteException; GraphicalObject getState() throws RemoteException; } Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
45
Java RMI – Σειριοποίηση αντικειμένων
H Java RMI κάνει «Σειριοποίηση» (Serialization) αντικειμένων, δηλαδή μετατρέπει τα αντικείμενα σε μια σειρά από bytes έτσι ώστε να μπορούν να περνούν εύκολα ως παράμετροι σε ένα μήνυμα που στέλνεται //Παράδειγμα κλάσης που σειριοποιείται public class Person implements Serializable { private String name; private String place; private int year; public Person(String aName, Sting aPlace, int aYear) { name = aName; place = aPlace; year = aYear; } ... Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
46
Java RMI Όταν γίνεται αποσειριοποίηση του αντικειμένου υποτίθεται ότι ο παραλήπτης του μηνύματος πρέπει να το ανακατασκευάσει χωρίς να γνωρίζει τη δομή του. Επομένως απαιτείται κάποια συμπληρωματική πληροφορία στην σειριακή ακολουθία έτσι ώστε να αποκατασταθεί το αντικείμενο στην αρχική του μορφή Παράδειγμα: Σειριοποίηση του Person p = new Person(“Smith”, “London”, 1934); Σειριοποίηση του αντικειμένου (σειρά από bytes κατάλληλα για αποστολή σε μήνυμα): Person Version (8 byte) h0 3 java.lang.String name java.lang.String place int year 5 Smith 6 London 1934 h1 Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
47
computerName : port / objectName
Java RMI Το RMIregisrty είναι ένας καταχωρητής (binder) των δεσμεύσεων μεταξύ αντικειμένων και servers. Ένα στιγμιότυπο του registry πρέπει να τρέχει σε κάθε εξυπηρετητή που φιλοξενεί κατανεμημένα αντικείμενα. Το registry προσπελαύνεται από τις μεθόδους της κλάσης Name Οι καταχωρήσεις είναι της μορφής: computerName : port / objectName Κ. Διαμαντάρας Θεωρία Λειτουργικών Συστημάτων
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.