1 / 47

Επικοινωνία μεταξύ διεργασιών Απομακρυσμένες κλήσεις και αντικείμενα

Επικοινωνία μεταξύ διεργασιών Απομακρυσμένες κλήσεις και αντικείμενα. Κώστας Διαμαντάρας Τμήμα Πληροφορικής ΤΕΙ Θεσσαλονίκης 2011. Επικοινωνία μεταξύ διεργασιών. Επικοινωνία μεταξύ διεργασιών. Δύο βασικές λειτουργίες επικοινωνίας:

Download Presentation

Επικοινωνία μεταξύ διεργασιών Απομακρυσμένες κλήσεις και αντικείμενα

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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 διεύθυνση 195.251.122.70 Υπολογιστής IP διεύθυνση 195.251.123.232 Κ. Διαμαντάρας

  8. Sockets και ports • Οι υπηρεσίες που τρέχουν σε έναν εξυπηρετητή (πχ. η υπηρεσία ftp) δεσμεύουν μια σγκεκριμένη θύρα δικτύου στον υπολογιστή αυτό (πχ. τη θύρα 21). Κάθε πελάτης που θέλει να καλέσει αυτή την υπηρεσία πρέπει να χρησιμοποιήσει την προσυμφωνημένη αυτή θύρα. Ωστόσο η θύρα από όπου εξέρχεται η αίτηση του πελάτη μπορεί να είναι οποιαδήποτε. • Μια διεργασία μπορεί να χρησιμοποιεί πολλές θύρες για να λαμβάνει μηνύματα αλλά δεν μπορεί να γίνεται κοινή χρήση της ίδιας θύρας από δύο διαφορετικές διεργασίες στον ίδιο υπολογιστή. • Υπάρχουν 216 = 65536 διαθέσιμες θύρες δικτύου για κάθε υπολογιστή • Κάθε socket συνδέεται μέ ένα συγκεκριμένο πρωτόκολλο μεταφοράς (transport protocol) – είτε UDP είτε TCP. Κ. Διαμαντάρας

  9. Το πρωτόκολλο UDP (User Datagram Protocol) • Στο πρωτόκολλο αυτό το μήνυμα στέλνεται από τον αποστολέα στον παραλήπτη χωρίς επαλήθευση αν παρελήφθη και χωρίς επανάληψη της προσπάθειας. Αν υπάρξει αποτυχία στην διαδρομή του μηνύματος αυτό μπορεί να χαθεί και να μην παραληφθεί ποτέ. Χρήση • Σε κάποιες εφαρμογές είναι αποδεκτό να υπάρχει πιθανότητα απώλειας πακέτων χωρίς επανάληψη της μετάδοσης. Τέτοιες υπηρεσίες είναι για παράδειγμα • η υπηρεσία ονοματοδοσίας στο internet (Domain Name Service - DNS) η οποία αντιστοιχεί ονόματα (πχ. www.teithe.gr) σε διευθύνσεις IP (πχ. 195.251.239.211) • η υπηρεσία Voice Over IP (VOIP) η οποία μεταδίδει πακέτα ήχου (φωνής) πάνω από το πρωτόκολλο του internet • κα Κ. Διαμαντάρας

  10. Το πρωτόκολλο UDP • Η χρήση του πρωτοκόλλου UDP είναι ελκυστική για όποιες εφαρμογές δεν απαιτείται εγγυημένη παράδοση των μηνυμάτων διότι αποφεύγονται • η ανάγκη αποθήκευσης της κατάστασης του μηνύματος στον αποστολέα και στον παραλήπτη • οι καθυστερήσεις από την επαναμετάδοση μηνυμάτων σε περίπτωση αποτυχίας • η καθυστέρηση του αποστολέα ο οποίος περιμένει επιβεβαίωση παραλαβής Κ. Διαμαντάρας

  11. Το πρωτόκολλο UDP Χαρακτηριστικά: • Μέγεθοςμηνύματος: < 216 bytes (64Kbytes) αλλά συνήθως < 8 Kbytes • Blocking: συνήθως non-blocking send αλλά blocking receive • Timeout: Λόγω blocking receive και πιθανότητας απώλειας του μηνύματος μπορεί ο server να περιμένει απ’ άπειρον την παραλαβή του μηνύματος. Για το λόγο αυτό εφαρμόζεται κάποιο όριο χρόνου στην αναμονή • Μοντέλοαποτυχίας: • Απώλεια μηνύματος: Μπορεί να συμβεί για δύο λόγους (α) υπάρχει checksum error (πχ κάποιο bit αλλοιώθηκε στην πορεία λόγω ηλεκτρικών παρεμβολών) (β) γέμισε ο buffer παραλαβής μηνυμάτων κάποιου κόμβου στη διαδρομή του μηνύματος • Τα μηνύματα μπορούν να παραληφθούν με άλλη σειρά από αυτή που στάλθηκαν Κ. Διαμαντάρας

  12. Το πρωτόκολλο TCP • Στο πρωτόκολλο TCP το socketSCενός πελάτη και το socket SSενός εξυπηρετητήσυνδέονται με δύο ροές δεδομένων και προς τις δύο κατευθύνσεις. Μια διεργασία του πελάτη στέλνει πληροφορία σε μια άλλη στον εξυπηρετητή γράφοντας στη ροή εξόδου του socket της (το SC ) ενώ η άλλη διαβάζει τη ροή εισόδου στο δικό της socket (το SS ) • Γίνεται προσπάθεια τα πακέτα να φθάσουν στον προορισμό τους και ο αποστολέας να ενημερωθεί ότι ελήφθησαν σωστά • Σε περίπτωση αποτυχίας παραλαβής ενός πακέτου αυτό επαναμεταδίδεται • Τα πακέτα παραλαμβάνονται με την σειρά που στάλθηκαν Κ. Διαμαντάρας

  13. Το πρωτόκολλο TCP Χρήση • Πολλές συχνά χρησιμοποιούμενες υπηρεσίες χρησιμοποιούν TCP. Πχ. • Η υπηρεσία HTTP (HyperText Transfer Protocol) που χρησιμοποιείται για την επικοινωνία μεταξύ web browsers και web servers. • Η υπηρεσία FTP (File Transfer Protocol) που χρησιμοποιείται για την μεταφορά αρχείων από τον εξυπηρετητή στον πελάτη • Η υπηρεσία Telnet που προσφέρει πρόσβαση υπό μορφή κονσόλας τερματικού σε έναν απομακρυσμένο υπολογιστή • Η υπηρεσία SMTP (Simple Mail Transfer Protocol) που χρησιμοποιείται για την αποστολή email • κα Κ. Διαμαντάρας

  14. Το πρωτόκολλο TCP Χαρακτηριστικά • Μέγεθος: Τα μηνύματα κόβονται σε πακέτα μήκους συνήθως < 1500 Bytes • Χαμέναμηνύματα: Το TCP χρησιμοποιεί επιβεβαίωση ότι το μήνυμα που στάλθηκε παραλήφθηκε επιτυχώς. Αλλιώς γίνεται επαναμετάδοση • Έλεγχοςκυκλοφορίας: Το TCP προσπαθεί να ταιριάζει την ταχύτητα του αποστολέα με αυτή του παραλήπτη. Αν πχ, ο αποστολέας στέλνει πιο γρήγορα μηνύματα απ’ ότι ο παραλήπτης είναι σε θέση να διαβάσει τότε ο αποστολέας μπλοκάρεται μέχρι ο παραλήπτης να διαβάσει (να καταναλώσει) ικανοποιητικό αριθμό πακέτων. • Διπλάπακέτακαιορισμόςτηςσειράςτωνπακέτων: γίνεται αρίθμηση των πακέτων με τη σειρά που στάλθηκαν έτσι ώστε να σβήνονται τα διπλότυπα πακέτα και να μπορεί να τακτοποιηθούν στη σωστή σειρά στον παραλήπτη Κ. Διαμαντάρας

  15. Το πρωτόκολλο TCP Χαρακτηριστικά (συνέχεια) • Timeout: Αν για κάποιο πακέτο δεν ληφθεί επιβεβαίωση εντός συγκεκριμένου χρονικού ορίου ότι παραλήφθηκε επιτυχώς τότε θεωρείται ότι υπάρχει αποτυχία αποστολής και ξαναστέλνεται. Η ακεραιότητα των πακέτων ελέγχεται με checksums. Επίσης τα πακέτα ενός μηνύματος αριθμούνται ώστε αν ένα πακέτο επαναμεταδοθεί ενώ κυκλοφορεί ήδη ένα αντίγραφό του τότε το ένα από τα δύο απορρίπτεται στο παραλήπτη. • Μοντέλο αποτυχίας • Σε περίπτωση σοβαρών καθυστερήσεων ή διακοπής της σύνδεσης ενημερώνεται η διεργασία που χρησιμοποιεί το πρωτόκολλο. Η διεργασία δεν μπορεί να διακρίνει αν φταίει το δίκτυο ή απλώς κατέρρευσε η άλλη διεργασία με την οποία επικοινωνεί • Η διεργασία δεν ξέρει αν παραλήφθηκαν επιτυχώς τα πακέτα που στάλθηκαν πρόσφατα (πριν εκπνεύσει ο χρόνoς timeout) Κ. Διαμαντάρας

  16. Επικοινωνία διεργασιών στο UNIX Sockets για UDPdatagrams Client: Αποστολή μηνύματος Server: Παραλαβή μηνύματος structsockaddr_inClntAddr; structsockaddr_inServAddr; 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)); structsockaddr_inClntAddr; structsockaddr_inServAddr; 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]; intlen, s; structsockaddr_inServAddr; intAddrLen=sizeof(structsockaddr_in); s = socket(AF_INET, SOCK_STREAM, 0); connect(s, &ServAddr,AddrLen); len = recv(s, buf, MAXLEN, 0); structsockaddr_inClntAddr; structsockaddr_inServAddr; int s, newsocket; char msg[] = "Hello World !\n"; intAddrLen=sizeof(structsockaddr_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 Δομή μηνύματος request-reply Κ. Διαμαντάρας

  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=ΟΚ εξυπ/τής 00fa c3 b1 01 3b d0 26 00fa c3 b1 01 3b d0 26 πακετάρισμα ξεπακετάρισμα Κ. Διαμαντάρας

  26. Θέματα απομακρυσμένων κλήσεων • Αναπαράσταση τύπων δεδομένων (συνέχεια). Έστω όμως ότι οι αναπαραστάσεις των δεδομένων ανάμεσα στις δύο μηχανές διαφέρουν μεταξύ τους. Πχ, στον πελάτη οτύποςint περιγράφεται με 4 bytes ενώ στον εξυπηρετητή περιγράφεται με 8 bytes. Τότε δημιουργείται πρόβλημα. • Λύση: η χρήση ενδιάμεσης αναπαράστασης όλων των τύπων δεδομένων (ακεραίων, αριθμών κινητής υποδιαστολής, συμβολοσειρών, κλπ). Οι εγγενείς τύποι του μηχανήματος μετατρέπονται στην ενδιάμεση αναπαράσταση πριν το πακετάρισμα και από την ενδιάμεση αναπαράσταση μετά το ξεπακετάρισμα. πελάτης int a int b int a = λάθος int b=? εξυπ/τής 00fa c3 b1 01 3b d0 26 00fa 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) : Η εφαρμογή του πελάτη που κάνει την απομακρυσμένη κλήση συνεχίζει την εκτέλεση κανονικά χωρίς να περιμένει την απομακρυσμένη απόκριση. Δύο σενάρια: + Μεγαλύτερη εκμετάλλευση του παραλληλισμού − Μεγαλύτερη πιθανότητα σφάλματος και δυσκολία προγραμματισμού Κ. Διαμαντάρας

  31. Θέματα απομακρυσμένων κλήσεων Γλώσσες ορισμού της διεπαφής (Interface Definition Languages – IDL) • SUN XDR IDL http://www.faqs.org/rfcs/rfc1832.html • Microsoft Interface Definition Language (MIDL) http://msdn.microsoft.com/en-us/library/windows/desktop/aa367091(v=VS.85).aspx Κ. Διαμαντάρας

  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 { intgetVersion() throws RemoteException; GraphicalObjectgetState() 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, intaYear) { name = aName; place = aPlace; year = aYear; } ... } Κ. Διαμαντάρας

  46. Java RMI • Όταν γίνεται αποσειριοποίηση του αντικειμένου υποτίθεται ότι ο παραλήπτης του μηνύματος πρέπει να το ανακατασκευάσει χωρίς να γνωρίζει τη δομή του. Επομένως απαιτείται κάποια συμπληρωματική πληροφορία στην σειριακή ακολουθία έτσι ώστε να αποκατασταθεί το αντικείμενο στην αρχική του μορφή • Παράδειγμα: Σειριοποίηση του Person p = new Person(“Smith”, “London”, 1934); Σειριοποίηση του αντικειμένου (σειρά από bytes κατάλληλα για αποστολή σε μήνυμα): Κ. Διαμαντάρας

  47. Java RMI • Το RMIregisrty είναι ένας καταχωρητής (binder) των δεσμεύσεων μεταξύ αντικειμένων και servers. Ένα στιγμιότυπο του registry πρέπει να τρέχει σε κάθε εξυπηρετητή που φιλοξενεί κατανεμημένα αντικείμενα. • Το registry προσπελαύνεται από τις μεθόδους της κλάσης Name • Οι καταχωρήσεις είναι της μορφής: computerName : port / objectName Κ. Διαμαντάρας

More Related