ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ



Σχετικά έγγραφα
ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ

Αποµακρυσµένη κλήση διαδικασιών

ΚΑΤΑΝΕΜΗΜΕΝΑ ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ

7.3 Πρωτόκολλο TCP. 1. Το TCP πρωτόκολλο παρέχει υπηρεσίες προσανατολισµένες σε σύνδεση. Σ Λ

Εισαγωγή. Κατανεµηµένα Συστήµατα 01-1

Γενικές Αρχές. Τεχνολογία ικτύων Επικοινωνιών ΙΙ

Πρωτόκολλα Διαδικτύου

ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ. Παράδοση Ασκήσεων Κεφάλαιο 2 Ασκήσεις 3,6,8,9,15,22,24,26. Γεωργόπουλος Άλκης Α.Μ.: 39 Κοντογιώργης Αναστάσιος A.M.

Μάθημα 4: Πρότυπα, Πρωτόκολλα & Υπηρεσίες

Τη φυσική (MAC) διεύθυνση που δίνει ο κατασκευαστής του δικτυακού υλικού στις συσκευές του (π.χ. στις κάρτες δικτύου). Η περιοχή διευθύνσεων που

Σύντομη παρουσίαση των εργαλείων/εντολών telnet, ping, traceroute nslookup και nmap, zenmap

Πρωτόκολλα Διαδικτύου

Εισαγωγή στην Πληροφορική

7.5 Πρωτόκολλο IP. Τεχνολογία ικτύων Επικοινωνιών ΙΙ

ΙΑΧΕΙΡΙΣΗ ΟΣΟΛΗΨΙΩΝ Να θυµηθούµε:

Η Υλοποίηση της Επικοινωνίας. Κατανεµηµένα Συστήµατα

ΠΡΟΤΕΙΝΟΜΕΝΑ ΘΕΜΑΤΑ ΣΤΑ ΔΙΚΤΥΑ ΥΠΟΛΟΓΙΣΤΩΝ ΙΙ Γ Τάξη Ε.Π.Α.Λ.

Κεφάλαιο 7.3. Πρωτόκολλο TCP

Α2. Να γράψετε τους αριθμούς 1-5 από τη Στήλη Α και δίπλα το γράμμα της Στήλης Β που δίνει τη σωστή αντιστοίχηση.

Κεφάλαιο 10 ο Υποπρογράµµατα

Κατανεµηµένασυστήµατα αρχείων

Κατανεμημένα Συστήματα: Θεωρία και Προγραμματισμός. Ενότητα # 1: Εισαγωγή Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Ειδικά Θέματα Προγραμματισμού

Νήµαταστην Java. Συγχρονισµός νηµάτων Επικοινωνία νηµάτων Εκτελέσιµα αντικείµενα Νήµατα δαίµονες Οµάδες νηµάτων. Κατανεµηµένα Συστήµατα 11-1

Εισαγωγή. E-03: Λειτουργικά Συστήµατα ΙΙ 6. Εαρινό Εξάµηνο Κατανεµηµένα συστήµατα αρχείων. Μέρη κατανεµηµένου συστήµατος αρχείων

Βάσεις Δεδομένων. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

Κατανεμημένα Συστήματα

6.2 Υπηρεσίες Διαδικτύου

Μάθημα 3 ο ΔΙΕΡΓΑΣΙΕΣ (PROCESSES)

ιαδίκτυα & Ενδοδίκτυα Η/Υ

Δίκτυα Υπολογιστών Firewalls. Χάρης Μανιφάβας

Ερώτηση 1 η μεταγωγής κυκλώματος? : Ποια είναι τα κύρια χαρακτηριστικά της. Ερώτηση 2 η : Ποια είναι τα κύρια χαρακτηριστικά της μεταγωγής μηνύματος?

Λιβανός Γιώργος Εξάμηνο 2017Β

Αµοιβαίοςαποκλεισµός. Κατανεµηµένα Συστήµατα 03-1

ΤΕΧΝΟΛΟΓΙΑ ΔΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ 7ο ΚΕΦΑΛΑΙΟ

Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals

ΕΠΙΚΟΙΝΩΝΙΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΕΣ INTERNET

ΤΕΧΝΟΛΟΓΙΑ ΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

Πρωτόκολλα Διαδικτύου Μέρος 2ο. Επικοινωνίες Δεδομένων Μάθημα 3 ο

ΔΙΑΓΩΝΙΣΜΑ ΤΕΛΙΚΗΣ ΕΠΑΝΑΛΗΨΗΣ ΣΤΙΣ ΕΝΟΤΗΤΕΣ

Το Πρόβληµα Οµοφωνίας Σύγχρονα Συστήµατα Μεταβίβασης Μηνύµατος Μοντέλο Κατάρρευσης (crash model) Οι διεργασίες µπορούν να σταµατούν να εκτελούνται σε

ΚΕΦΑΛΑΙΟ 1: Τα είδη των Δικτύων Εισαγωγή

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

Κεφάλαιο 3. Διδακτικοί Στόχοι

14. Δικτύωση με Java Δικτύωση με Java Sockets Δημιουργία της σύνδεσης Διευθυνσιοδότηση της σύνδεσης

Επικοινωνία Client/Server Απομακρυσμένη Κλήση Διαδικασιών

ιαχείριση Τηλεφωνικών Κλήσεων

Επαναληπτικές Ασκήσεις Μαθήματος

Δίκτυα Θεωρία

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Τμήμα Πληροφορικής

7.2 Τεχνολογία TCP/IP

ίκτυα υπολογιστών Στόχοι κεφαλαίου ίκτυα

Πληροφορίες. E-03: Λειτουργικά Συστήµατα ΙΙ 6. Εαρινό Εξάµηνο Ζητήµατα Επικοινωνίας Πελάτη-Εξυπηρετητή. Εξυπηρετητής

Το λειτουργικό σύστημα. Προγραμματισμός II 1

7.9 ροµολόγηση. Ερωτήσεις

4.1.1 Πρωτόκολλο TCP - Δομή πακέτου

Εισαγωγή στην επιστήμη των υπολογιστών. Υλικό Υπολογιστών Κεφάλαιο 6ο ίκτυα υπολογιστών

ικτύωσησε Java Κατανεµηµένα Συστήµατα 08-1

ΕΠΑΝΑΛΗΠΤΙΚΟ ΤΕΣΤ ΣΤΙΣ ΕΝΟΤΗΤΕΣ

Επίπεδο Δικτύου: Διαδικτύωση

Δίκτυα Θεωρία

Κεφάλαιο 7 Διαδικτύωση-Internet. 7.2 Τεχνολογία TCP/IP

Λειτουργικά Συστήματα

Επικοινωνία με μηνύματα. Κατανεμημένα Συστήματα 1

Πρωτόκολλο ARP. Γεωργιλά Χιονία Καθηγήτρια Πληροφορικής ΠΕ1901

ΗΥ360 Αρχεία και Βάσεις εδοµένων ιδάσκων:. Πλεξουσάκης

7.4 Πρωτόκολλο UDP. 3. Στη περίπτωση που ένα μήνυμα χωράει σε ένα τμήμα, χρησιμοποιούμε το πρωτόκολλο TCP.

Κατανεμημένα Συστήματα. Ενότητα # 4: Μηχανισμοί Επικοινωνίας Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

Αδιέξοδα Ανάθεση Πόρων (Deadlocks Resource Allocation)

Μάθημα 5: To Μοντέλο Αναφοράς O.S.I.

Συνεχής ροή πολυµέσων

7.7 Πρωτόκολλο ARP. 1. Το πρωτόκολλο ARP μετατρέπει τις διευθύνσεις IP στις αντίστοιχες φυσικές. Σ Λ

ΤΕΧΝΟΛΟΓΙΑ ΔΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

Β1. Σε ένα τοπικό δίκτυο τοπολογίας Ethernet-TCP/IP το επίπεδο πρόσβασης δικτύου περιλαμβάνει:

Επικοινωνία Client/Server Απομακρυσμένη Κλήση Διαδικασιών

Λογισµικό (Software SW) Λειτουργικά Συστήµατα και ίκτυα

Πληροφορική 2. Δομές δεδομένων και αρχείων

2η Προγραµµατιστική Εργασία

Συνοπτική Μεθοδολογία Ασκήσεων Κεφαλαίου 7. Ασκήσεις στο IP Fragmentation

Σελίδα 1 από 11. Απαντήσεις στο φυλλάδιο 57 Ερώτηση: 1 η : Οι ακροδέκτες αυτοί χρησιµοποιούνται για:

Οργάνωση και Αρχιτεκτονική Υπολογιστών. Κεφάλαιο 7.4

a. b. c. d ΤΕΧΝΟΛΟΓΙΑ ΔΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

ΤΕΧΝΟΛΟΓΙΑ ΔΙΚΤΥΩΝ ΕΠΙΚΟΙΝΩΝΙΩΝ

ιεργασίες και Επεξεργαστές στα Κατανεµηµένων Συστηµάτων

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Εισαγωγή στην Επιστήμη των Υπολογιστών Δίκτυα υπολογιστών. (και το Διαδίκτυο)

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

7.7 Πρωτόκολλο ARP. Τεχνολογία ικτύων Επικοινωνιών ΙΙ

Η απάντηση αυτή λαμβάνει 5 μονάδες. Και αφού βέβαια ο εξεταζόμενος γράψει το γράμμα της σωστής απάντησης μόνο.

Δοσοληψίες Βάσεις Δεδομένων Διδάσκων: Μαρία Χαλκίδη

Σκοπιµότητα των firewalls

ίκτυα - Internet Υπηρεσίες Internet O Παγκόσµιος Ιστός (World Wide Web) Ηλεκτρονική Αλληλογραφία ( ) Υπηρεσία FTP (File Transfer Protocol)

6.1 Επεκτείνοντας το δίκτυο 6.2 Επιλεγόμενες τηλεφωνικές γραμμές modems Πλεονεκτήματα Μειονεκτήματα Βασική χρήση

Το Πρόβληµα Οµοφωνίας Σύγχρονα Συστήµατα Μεταβίβασης Μηνύµατος Μοντέλο Κατάρρευσης (crash model) Οι διεργασίες µπορούν να σταµατούν να εκτελούνται σε

Το Πρόβληµα Οµοφωνίας Σύγχρονα Συστήµατα Μεταβίβασης Μηνύµατος Μοντέλο Κατάρρευσης (crash model) Οι διεργασίες µπορούν να σταµατούν να εκτελούνται σε

Προγραμματισμός Η/Υ (ΤΛ2007 )

Εγχειρίδιο Φοιτητών. 1. Εισαγωγή

Προγραμματισμός Ι (HY120)

Εγχειρίδιο Φοιτητών. 1. Εισαγωγή

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τ Μ Η Μ Α Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ

Transcript:

ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ ρ Καραΐσκος Ζαφείριος ΤΕΙ Λάρισας Ιανουάριος 2010

ΠΕΡΙΕΧΟΜΕΝΑ 1. Εισαγωγή... 3 2. ιαδιεργασιακή επικοινωνία... 7 2.1 Σύγχρονη και ασύγχρονη επικοινωνία...7 2.2 Επικοινωνία µε υποδοχές... 11 2.2.1 UDP datagram επικοινωνία...12 2.2.2 TCP ρεύµα επικοινωνίας...14 2.3 Τήλε-κλήση υποπρογράµµατος (RPC)... 17 2.3.1 Βασική λειτουργία της RPC...17 2.3.2 Μεταβίβαση παραµέτρων...20 2.3.3 Ασύγχρονο RPC...23 2.4 ιευθυνσιοδότηση... 23 3. Επεξεργασία συναλλαγών... 29 3.1 Εισαγωγή... 29 3.2 Συναλλαγές... 30 3.2.1 Έλεγχος ταυτοχρονισµού...33 3.2.2 Κλειδώµατα...36 3.2.3 Αισιόδοξος έλεγχος ταυτοχρονισµού...45 3.2.4 Ταξινόµηση µε βάση τις χρονοσφραγίδες...50 4. Κατανεµηµένη κοινή µνήµη... 57 4.1 Το µοντέλο κοινής µνήµης... 57 4.2 Κατανεµηµένη κοινή µνήµη... 58 4.2.1 Θέµατα σχεδίασης και υλοποίησης...59 5. Κατανεµηµένα συστήµατα αρχείων... 71 5.1 Κατανεµηµένη υπηρεσία ονοµάτων... 71 5.2 Κατανεµηµένη υπηρεσία αρχείων... 74 5.2.1 ιαφορές αρχείων...75 2

1. Εισαγωγή Ορισµός Λ.Σ. για Η/Υ ενός επεξεργαστή "Λειτουργικό σύστηµα είναι µια οµάδα προγραµµάτων τα οποία επικοινωνούν µε το χρήστη και εκτελούν τις εντολές του διαχειριζόµενα τις συσκευές του Η/Υ." Σχήµα 1. Λειτουργικό σύστηµα για Η/Υ ενός επεξεργαστή. Λ.Σ. για Η/Υ πολλών επεξεργαστών ιεπαφή χρήστη και εφαρµογές Λειτουργικό σύστηµα CPU... CPU Σχήµα 2. Λειτουργικό σύστηµα για Η/Υ πολλών επεξεργαστών. Χαρακτηριστικά: Ο Η/Υ έχει µια µνήµη κοινή για όλους τους επεξεργαστές. Υπάρχει συγχρονισµός µεταξύ των διεργασιών που εκτελούνται από τους επεξεργαστές. Η προσπέλαση κοινών πόρων γίνεται βάση του αµοιβαίου αποκλεισµού. Το σύστηµα παρέχει θεµελιώδεις (primitive) µηχανισµούς για την υλοποίηση των παραπάνω. 3

Λ.Σ. για πολλούς Η/Υ Η/Υ Α Η/Υ Β Η/Υ Γ Κατανεµηµένες Εφαρµογές Κατανεµηµένο Λειτουργικό Σύστηµα πυρήνας πυρήνας πυρήνας ίκτυο Σχήµα 3. Λειτουργικό σύστηµα για πολλούς Η/Υ. Ο πυρήνας (kernel) κάνει τη διαχείριση των διεργασιών ενός Η/Υ. Ο κάθε πυρήνας διαχειρίζεται τις τοπικές συσκευές και τη δια-διεργασιακή επικοινωνία. Το πρώτο επίπεδο πάνω από τους πυρήνες είναι το Κατανεµηµένο Λειτουργικό Σύστηµα (Κ.Λ.Σ.). υνατότητες του Κ.Λ.Σ. είναι: α) Η ανάθεση εργασιών στους επεξεργαστές. β) Η συγκάλυψη των αποτυχιών του υλικού (hardware). γ) Η παροχή διαφανούς (transparent) µνήµης. δ) Η δια-διεργασιακή επικοινωνία. ΠΑΡΑΤΗΡΗΣΗ: Η δια-διεργασιακή επικοινωνία θα συζητηθεί σε ξεχωριστό κεφάλαιο. Κατανεµηµένα συστήµατα κοινής µνήµης Ένα Κ.Λ.Σ. µπορεί να παρέχει κοινή κατανεµηµένη µνήµη (Κ.Κ.Μ.) ή όχι. Η παροχή Κ.Κ.Μ. διευκολύνει το συγχρονισµό και την επικοινωνία των διεργασιών, για παράδειγµα, οι σηµατοφόροι, οι ελεγκτές και η αποστολή µηνυµάτων διευκολύνουν περισσότερο από την παροχή µόνο της αποστολής µηνυµάτων. Ζητήµατα όπως ενδιάµεση αποθήκευση (buffering), φράξιµο (blocking) και αξιοπιστία δυσχεραίνουν την κατάσταση. Για το λόγο αυτό, 4

έχει γίνει σηµαντική έρευνα για τη µίµηση της κοινής µνήµης σε συστήµατα πολλών Η/Υ. Σκοπός είναι η παροχή εικονικής µνήµης. Θα µελετηθεί σε επόµενο κεφάλαιο. Λειτουργικά συστήµατα δικτύων (Λ.Σ...) Η/Υ Α Η/Υ Β Η/Υ Γ Κατανεµηµένες Εφαρµογές Λ.Σ.. Λ.Σ.. Λ.Σ.. πυρήνας πυρήνας πυρήνας ίκτυο Σχήµα 4. Λειτουργικό σύστηµα δικτύου. Σε αντίθεση µε τα Κ.Λ.Σ., τα Λ.Σ.. δε θεωρούν ότι το υποκείµενο υλικό είναι οµοιογενές, το οποίο θα έπρεπε να φαίνεται ως ένα σύστηµα. Υπάρχουν διάφορα υπολογιστικά συστήµατα ενός επεξεργαστή, το καθένα µε το δικό του Λ.Σ., όπως φαίνεται στο παραπάνω σχήµα. Είναι όλα συνδεδεµένα σε ένα δίκτυο. Τα Λ.Σ.. παρέχουν τη δυνατότητα στους χρήστες να κάνουν χρήση των υπηρεσιών που διαθέτει συγκεκριµένος Η/Υ. Μεγάλη διαφορά µεταξύ των δύο Λ.Σ. (Κ.Λ.Σ. και Λ.Σ..) είναι η διαφάνεια (transparency). Τα Κ.Λ.Σ. επιδιώκουν την πλήρη διαφάνεια, δηλαδή, την άποψη ενός συστήµατος. Τα Λ.Σ.. απαιτούν την είσοδο σε συγκεκριµένο Η/Υ του δικτύου. Αυτό φυσικά καταστρατηγεί τη διαφάνεια. Μεσολογισµικό Σύµφωνα µε τον ορισµό των κατανεµηµένων συστηµάτων: "Ένα κατανεµηµένο σύστηµα είναι µια συλλογή από ανεξάρτητους Η/Υ, οι οποίοι εµφανίζονται στους χρήστες ως ένα ενιαίο συναφές σύστηµα." ούτε τα Κ.Λ.Σ. είναι κατανεµηµένα αφού δε χειρίζονται ανεξάρτητους Η/Υ, ούτε τα Λ.Σ.. παρέχουν την όψη ενός ενιαίου συναφούς συστήµατος. 5

Σχήµα 5. Μεσολογισµικό. Για να συνδυάσουν την προσαρµοστικότητα και την ανοικτότητα των Λ.Σ.. µε τη διαφάνεια και την ευκολία χρήσης των Κ.Λ.Σ. πολλά µοντέρνα κατανεµηµένα συστήµατα κατασκευάζονται µε ένα επιπρόσθετο στρώµα, που ονοµάζεται µεσολογισµικό (middleware). 6

2. ιαδιεργασιακή επικοινωνία Η δια-διεργασιακή επικοινωνία (interprocess communication) αφορά την µεταβίβαση µηνυµάτων µεταξύ των διεργασιών. Μεταβίβαση ενός µηνύµατος από µια διεργασία σε άλλη, είναι η αντιγραφή δεδοµένων από το χώρο µνήµης της µιας διεργασίας στο χώρο µνήµης της άλλης διεργασίας. Γι αυτό το σκοπό χρησιµοποιούνται δύο θεµελιώδεις εντολές: send(παραλήπτης, µήνυµα) και receive(αποστολέας, µήνυµα) Για να επιτευχθεί η επικοινωνία µεταξύ δύο διεργασιών, η µία διεργασία στέλνει ένα µήνυµα µε την εντολή send, το οποίο λαµβάνει η άλλη µε την εντολή receive. Για να πραγµατοποιηθεί η επικοινωνία ίσως χρειαστεί ο συγχρονισµός των διεργασιών. Σχήµα 6. Επικοινωνία δύο διεργασιών. 2.1 Σύγχρονη και ασύγχρονη επικοινωνία Οι δύο θεµελιώδεις εντολές µπορεί να εκτελούνται µε φράξιµο (blocking) ή χωρίς-φράξιµο (nonblocking). Φράξιµο σηµαίνει ότι η καλούσα διεργασία παύει να εκτελείται µέχρι να ολοκληρώσει η εντολή την εργασία της. Άρα χωρίς-φράξιµο, η καλούσα διεργασία συνεχίζει να εκτελείται χωρίς να περιµένει την ολοκλήρωση της εντολής. Υπάρχουν δύο είδη επικοινωνίας, η σύγχρονη και η ασύγχρονη. 1. Σύγχρονη send και σύγχρονη receive. Η εντολή send επιστρέφει τον έλεγχο στην καλούσα διεργασία µόνον όταν η αντίστοιχη receive, στην 7

πλευρά του παραλήπτη, τερµατίσει επιτυχώς και στείλει επιβεβαίωση λήψης του µηνύµατος στον αποστολέα. Αποστολέας Παραλήπτης send { blocked state Αποστολή µηνύµατος } receive blocked state Αποστολή επιβεβαίωσης Σχήµα 7. Σύγχρονη επικοινωνία. Μέχρι τη λήψη της επιβεβαίωσης, ο αποστολέας δεν µπορεί να συνεχίσει την εκτέλεση του κώδικά του. Η λήψη της επιβεβαίωσης υπονοεί ότι ο παραλήπτης έλαβε όλο το µήνυµα. Συνεπώς, η ολοκλήρωση της send εγγυάται ότι το µήνυµα ελήφθη µε επιτυχία. 2. Ασύγχρονη send και σύγχρονη receive. Η ασύγχρονη send, επιστρέφει τον έλεγχο στην καλούσα διεργασία, όταν το µήνυµα αποσπαστεί από το χώρο µνήµης της διεργασίας. 8

Αποστολέας Παραλήπτης send Αποστολή µηνύµατος } receive blocked state Αποστολή επιβεβαίωσης Σχήµα 8. Ασύγχρονη send και σύγχρονη receive. Σε σύγκριση µε την σύγχρονη send, η ασύγχρονη επιτρέπει τη διεργασία αποστολής να ανακτήσει πολύ νωρίτερα, αλλά δεν εγγυάται ότι το µήνυµα έφτασε ή θα φτάσει στην κατάλληλη διεργασία. Η εξασφάλιση αυτής της εγγύησης θα απαιτούσε επιπρόσθετη συνεννόηση (handshaking) µεταξύ των διεργασιών. 3. Ασύγχρονη send και ασύγχρονη receive µε φράξιµο. Η ασύγχρονη µε φράξιµο receive είναι παρόµοια µε την σύγχρονη receive επειδή επιστρέφει τον έλεγχο στην καλούσα διεργασία µόνον όταν το µήνυµα έχει µεταφερθεί µε επιτυχία στον προορισµό του. Αποστολέας Παραλήπτης send Αποστολή µηνύµατος } receive blocked state Σχήµα 9. Ασύγχρονη send ασύγχρονη receive µε φράξιµο. 9

Αντίθετα µε τη σύγχρονη receive, η receive µε φράξιµο δε στέλνει επιβεβαίωση λήψης στον αποστολέα. 4. Ασύγχρονη send και ασύγχρονη receive. Οι χωρίς φράξιµο send και receive επιτρέπουν τη µεγαλύτερη αλληλοεπικάλυψη (overlap) µεταξύ υπολογισµού και µεταβίβασης µηνύµατος επιστρέφοντας το συντοµότερο στην καλούσα διεργασία. Μια χωρίς φράξιµο send επιστρέφει τον έλεγχο αµέσως. Μια χωρίς φράξιµο receive επιστρέφει τον έλεγχο αφού πρώτα στείλει την πρόθεση λήψης. Η λήψη µηνύµατος και η τοποθέτησή του στο χώρο µνήµης της διεργασίας εκτελείται ασύγχρονα, σε απροσδιόριστη στιγµή, από το σύστηµα. Αποστολέας Παραλήπτης send Αποστολή µηνύµατος receive Σχήµα 10. Ασύγχρονη send και ασύγχρονη receive Στις χωρίς φράξιµο send και receive η επιστροφή του ελέγχου δεν υπονοεί τίποτα για την κατάσταση του µηνύµατος, οπότε είναι ευθύνη του χρήστη να προσδιορίσει αυτήν την κατάσταση. Ξεχωριστές θεµελιώδεις-εντολές (primitives) παρέχονται για τη διερεύνηση της κατάστασης. Μηνύµατα χωρίς φράξιµο, συνεπώς, χρησιµοποιούνται σε δύο φάσεις: πρώτα η send/receive εκτελεί το δικό της κώδικα και µετά, όταν χρειάζεται, τις θεµελιώδεις-εντολές διερεύνησης. Οι θεµελιώδεις-εντολές µπορούν να φράξουν µέχρι να παρατηρηθεί η επιθυµητή κατάσταση ή να επιστρέψουν τον έλεγχο αµέσως και απλώς να αναφέρουν την παρατηρηθείσα κατάσταση. 10

2.2 Επικοινωνία µε υποδοχές Η υποδοχή (socket) είναι ένας µηχανισµός που παρέχει επικοινωνία δύο κατευθύνσεων. Υπάρχουν πολλών ειδών υποδοχές, δύο εκ των οποίων είναι οι υποδοχές διαδικτύου και οι υποδοχές UNIX. Θα εξετάσουµε τις υποδοχές διαδικτύου και ιδιαίτερα τις υποδοχές-ροής (stream-sockets) και τις datagram υποδοχές. Οι υποδοχές-ροής είναι αξιόπιστη επικοινωνία δύο-κατευθύνσεων. Η µεταβίβαση των µηνυµάτων είναι fifo. Υποδοχές-ροής χρησιµοποιεί το HTTP πρωτόκολλο των φυλλοµετρητών διαδικτύου. Οι υποδοχές-ροής χρησιµοποιούν το πρωτόκολλο TCP. Οι datagram-υποδοχές δε χρησιµοποιούν TCP, χρησιµοποιούν όµως IP για τη δροµολόγηση στο διαδίκτυο, και το User Datagram Protocol (UDP). Οι datagram-υποδοχές υλοποιούν τη λεγόµενη ασύνδετη επικοινωνία, διότι δε χρειάζεται να διατηρούν µια ανοιχτή σύνδεση, όπως οι υποδοχές-ροής. Το µόνο που χρειάζεται είναι το µήνυµα και η ΙΡ κεφαλίδα για να γίνει η αποστολή. Η δια-διεργασιακή επικοινωνία συνίσταται στην µεταβίβαση ενός µηνύµατος από την υποδοχή µιας διεργασίας στην υποδοχή άλλης διεργασίας, όπως φαίνεται στο σχήµα που ακολουθεί. Σχήµα 11. Μεταβίβαση µηνύµατος από υποδοχή σε υποδοχή. Μια διεργασία, για να λάβει µηνύµατα, πρέπει να είναι δεµένη σε µια τοπική πόρτα και µία από τις διευθύνσεις διαδικτύου του Η/Υ στον οποίο εκτελείται. Τα µηνύµατα που στέλνονται σε συγκεκριµένη διεύθυνση διαδικτύου και συγκεκριµένο αριθµό πόρτας, µπορούν να ληφθούν µόνο από µια διεργασία της οποίας η υποδοχή είναι συνδεδεµένη µε τη συγκεκριµένη διεύθυνση διαδικτύου και το συγκεκριµένο αριθµό πόρτας. ιεργασίες µπορούν να χρησιµοποιήσουν την ίδια υποδοχή για την αποστολή και λήψη µηνυµάτων. Κάθε Η/Υ έχει ένα µεγάλο αριθµό ( 2 16 ) δυνατών αριθµών πορτών, που µπορούν να χρησιµοποιήσουν οι τοπικές διεργασίες για τη λήψη µηνυµάτων. 11

Κάθε διεργασία µπορεί να λάβει µηνύµατα από πολλές πόρτες, αλλά µια διεργασία δεν µπορεί να µοιράζεται πόρτες µε άλλες διεργασίες στον ίδιο Η/Υ. Οι διεργασίες που χρησιµοποιούν πολλαπλής διανοµής ΙΡ 1, αποτελούν εξαίρεση διότι αυτές µοιράζονται πόρτες. Ωστόσο, πολλές διεργασίες µπορούν να στείλουν µηνύµατα στην ίδια πόρτα. Κάθε υποδοχή συνδέεται µε συγκεκριµένο πρωτόκολλο, είτε το UDP είτε το TCP. 2.2.1 UDP datagram επικοινωνία Ένα datagram 2 που στέλνεται µε UDP, µεταβιβάζεται από µια διεργασία αποστολέα σε µια διεργασία παραλήπτη, χωρίς επιβεβαίωση ή επαναληπτικές προσπάθειες. Αν συµβεί µια αποτυχία, το µήνυµα µπορεί να µην φτάσει. Ένα datagram είναι διαβιβασθέν, όταν µια διεργασία το έχει στείλει και µια άλλη διεργασία το έχει παραλάβει. Μια διεργασία για να στείλει ή να λάβει µηνύµατα πρέπει πρώτα να δέσει µια υποδοχή µε µια διεύθυνση διαδικτύου του τοπικού οικοδεσπότη και µια τοπική πόρτα. Ένας εξυπηρετητής θα δέσει την υποδοχή του µε µια πόρτα εξυπηρετητή, την οποία θα γνωστοποιήσει σε πελάτες ώστε να µπορούν να στείλουν µηνύµατα σ' αυτή. Ένας πελάτης δένει την υποδοχή του σε οποιαδήποτε ελεύθερη τοπική πόρτα. Η λήψη επιστρέφει τη διεύθυνση διαδικτύου και την πόρτα του αποστολέα, µαζί µε το µήνυµα, δίνοντας έτσι τη δυνατότητα στον παραλήπτη να απαντήσει. Οι παράγραφοι που ακολουθούν παρουσιάζουν κάποια ζητήµατα σχετιζόµενα µε την datagram επικοινωνία: Μέγεθος µηνύµατος. Η διεργασία λήψης χρειάζεται να καθορίσει έναν πίνακα bytes (buffer) συγκεκριµένου µεγέθους στον οποίο θα υποδεχθεί το µήνυµα. Αν το µήνυµα είναι πολύ µεγάλο για τον πίνακα, περικόπτεται κατά την 16 άφιξη. Το υποκείµενο ΙΡ πρωτόκολλο επιτρέπει πακέτα µήκους µέχρι 2 byte, συµπεριλαµβανοµένης της κεφαλίδας. Εν τούτοις, τα περισσότερα περιβάλλοντα επιβάλλουν µέγιστο µέγεθος 8.000 byte. Εφαρµογές που απαιτούν µεγαλύτερα µηνύµατα πρέπει να τα τεµαχίσουν σε κοµµάτια αυτού του µεγέθους. Γενικά, µια εφαρµογή, για παράδειγµα το DNS, καθορίζει ένα µέγεθος που δεν είναι υπερβολικά µεγάλο αλλά είναι επαρκές για την προτιθέµενη χρήση. Φράξιµο. Οι υποδοχές συνήθως παρέχουν send χωρίς φράξιµο και receive µε φράξιµο για datagram επικοινωνία (η receive χωρίς φράξιµο είναι επιλογή σε 1 Αποστολή ενός ΙΡ πακέτου σε οµάδα Η/Υ. 2 Ένα datagram είναι ένα µικρό "πακέτο", τµήµα ενός µεγαλύτερου µηνύµατος, που περιέχει την πλήρη διεύθυνση του οικοδεσπότη αποστολέα και του οικοδεσπότη παραλήπτη. 12

κάποιες υλοποιήσεις). Η πράξη send επιστρέφει αφού έχει παραδώσει το µήνυµα στα υποκείµενα UDP και IP πρωτόκολλα, τα οποία είναι υπεύθυνα για τη µεταβίβασή του στον προορισµό του. Με την άφιξη, το µήνυµα τοποθετείται σε µια ουρά της υποδοχής που είναι (η υποδοχή) δεµένη µε την πόρτα προορισµού. Το µήνυµα µπορεί να περισυλλεγεί από την ουρά από µια εκκρεµή κλήση ή µια µελλοντική κλήση της receive επί αυτής της υποδοχής. Μηνύµατα απορρίπτονται (στον προορισµό) όταν καµία διεργασία δεν έχει ήδη δέσει µια υποδοχή µε την πόρτα προορισµού. Η receive φράζεται µέχρι να ληφθεί ένα datagram, εκτός και αν έχει τεθεί λήξη χρόνου στην υποδοχή. Αν η διεργασία που καλεί τη receive έχει να κάνει άλλη δουλειά περιµένοντας το µήνυµα, πρέπει να κανονίσει για ξεχωριστό νήµα (thread). Λήξη χρόνου. Η receive µε ατελείωτο φράξιµο, είναι κατάλληλη για χρήση από έναν εξυπηρετητή που περιµένει να λάβει αιτήµατα από τους πελάτες του. Σε µερικά, όµως, προγράµµατα δεν είναι πρέπων να περιµένει επ' αόριστον σε περίπτωση που ο ενδεχόµενος αποστολέας έχει συντριβεί ή το µήνυµα έχει χαθεί. Τέτοιες περιπτώσεις αντιµετωπίζονται θέτοντας λήξη χρόνου στις υποδοχές. Η επιλογή του κατάλληλου χρονικού διαστήµατος χρόνου είναι δύσκολη, αλλά θα πρέπει να είναι αρκούντως µεγάλο σε σύγκριση µε το χρόνο που χρειάζεται ένα µήνυµα να µεταβιβαστεί. Λήψη από οποιονδήποτε. Η receive δεν καθορίζει την προέλευση των µηνυµάτων. Αντ' αυτού, η κλήση της receive λαµβάνει ένα µήνυµα που κατευθύνεται στην υποδοχή της από οποιαδήποτε προέλευση. Η receive επιστρέφει τη διεύθυνση διαδικτύου και την τοπική πόρτα του αποστολέα, επιτρέποντας τον παραλήπτη να ελέγξει την προέλευσή του. Είναι δυνατόν να συνδέσουµε µια datagram υποδοχή µε συγκεκριµένη αποµακρυσµένη πόρτα και διεύθυνση διαδικτύου, οπότε η υποδοχή είναι σε θέση να στέλνει σε και να λαµβάνει µηνύµατα µόνο από αυτή τη διεύθυνση. Σε κάποιες εφαρµογές είναι αποδεκτή η χρήση υπηρεσιών οι οποίες είναι αντικείµενο σποραδικών αποτυχιών. Για παράδειγµα, η Υπηρεσία Ονοµάτων Περιοχής, η οποία ανατρέχει DNS ονόµατα στο διαδίκτυο, υλοποιείται πάνω σε UDP. Voice over IP τρέχει επίσης, πάνω σε UDP. UDP datagrams είναι πολλές φορές µια ελκυστική επιλογή, διότι δεν «πάσχουν» από επιβαρύνσεις (overheads), πού σχετίζονται µε την εγγυηµένη διανοµή µηνυµάτων. Υπάρχουν τρεις κύριες πηγές επιβάρυνσης: α. η ανάγκη αποθήκευσης της κατάστασης σε αφετηρία και προορισµό. 13

β. Η µεταβίβαση πρόσθετων µηνυµάτων. γ. Η λανθάνουσα κατάσταση (latency) του αποστολέα. Παράδειγµα επικοινωνίας µε datagram sockets SERVER s=socket(ip4 ή IP6,STREAM,πρωτόκολλο) CLIENT s=socket( ) bind( ) send() ή sendto( ) recv( ) close(s) close (s) 2.2.2 TCP ρεύµα επικοινωνίας Αυτού του είδους η επικοινωνία παρέχει την αφαίρεση (abstraction) ενός ρεύµατος byte, στο οποίο δεδοµένα µπορούν να εισαχθούν σ αυτό όπως επίσης να εξαχθούν (διαβαστούν) από αυτό. Τα ακόλουθα χαρακτηριστικά του δικτύου αποκρύπτονται από το ρεύµα: Μέγεθος µηνύµατος: Η εφαρµογή επιλέγει το πλήθος των δεδοµένων που θα γράψει στο ρεύµα ή θα διαβάσει από αυτό. Μπορεί να επιλέξει µεταξύ πολύ µικρής ή πολύ µεγάλης οµάδας δεδοµένων. Η υποκείµενη υλοποίηση του TCP ρεύµατος, αποφασίζει πόσα δεδοµένα θα συγκεντρώσει πριν τα µεταβιβάσει ως ένα ή περισσότερα IP πακέτα. Με την άφιξη τα δεδοµένα παραχωρούνται στην εφαρµογή που τα ζήτησε. Οι εφαρµογές δύνανται, εν ανάγκη, να πιέσουν ώστε τα δεδοµένα να σταλούν αµέσως. Χαµένα µηνύµατα: Το TCP πρωτόκολλο κάνει χρήση του σχήµατος επιβεβαίωσης. Για παράδειγµα, ο παραλήπτης στέλνει επιβεβαίωση για κάθε παραλαβή. Αν ο αποστολέας δε λάβει επιβεβαίωση µε τη λήξη χρόνου, ξαναστέλνει το µήνυµα. Έλεγχος ροής: Το TCP πρωτόκολλο προσπαθεί να ταιριάξει την ταχύτητα των διεργασιών που γράφουν στο ρεύµα και διαβάζουν από το ρεύµα. Αν ο αποστολέας είναι γρηγορότερος του παραλήπτη, τότε φράζεται µέχρι ο παραλήπτης να διαβάσει αρκετά από τα µηνύµατα. ιπλότυπα µηνυµάτων και ταξινόµηση: Τα αναγνωριστικά των µηνυµάτων συνδέονται µε κάθε ΙΡ πακέτο, γεγονός που επιτρέπει στον παραλήπτη να 14

ανιχνεύσει και να απορρίψει τα διπλότυπα ή να ταξινοµήσει εκ νέου τα µηνύµατα, τα οποία δε φτάνουν µε τη σειρά που στάλθηκαν. Προορισµός µηνύµατος: Ένα ζευγάρι επικοινωνούντων διεργασιών, εγκαθιστούν µια σύνδεση πριν µπορέσουν να επικοινωνήσουν µε ρεύµα. Μόλις επιτευχθεί η σύνδεση, οι διεργασίες απλώς γράφουν ή διαβάζουν στο ρεύµα, χωρίς να χρειάζεται να χρησιµοποιήσουν διευθύνσεις διαδικτύου και πόρτες. Η εγκατάσταση µιας σύνδεσης περιλαµβάνει ένα connect αίτηµα του πελάτη προς τον εξυπηρετητή, ακολουθούµενο από µια accept απόκριση του εξυπηρετητή προς τον πελάτη, πριν η επικοινωνία λάβει χώρα. Αυτό µπορεί να είναι σηµαντική επιβάρυνση για ένα απλό πελάτη-εξυπηρετητή αίτηµα και απόκριση. Η επικοινωνία ρεύµατος υποθέτει ότι όταν ένα ζευγάρι διεργασιών εγκαθιστά µια σύνδεση, µία από αυτές παίζει το ρόλο του πελάτη και η άλλη παίζει το ρόλο του εξυπηρετητή. Ο ρόλος του πελάτη περιλαµβάνει τη δηµιουργία µιας υποδοχής ρεύµατος δεµένης σε κάποια πόρτα και κατόπιν την υποβολή αιτήµατος connect ζητώντας σύνδεση µε τον εξυπηρετητή στην πόρτα του εξυπηρετητή. Ο ρόλος του εξυπηρετητή περιλαµβάνει τη δηµιουργία µιας αφουγκραζόµενης υποδοχής δεµένης σε µια πόρτα του εξυπηρετητή και την αναµονή του αιτήµατος πελάτη για σύνδεση. Η αφουγκραζόµενη υποδοχή διατηρεί ουρά εισερχοµένων αιτηµάτων σύνδεσης. Στο µοντέλο υποδοχής, όταν ο εξυπηρετητής αποδέχεται µια σύνδεση (µε τη συνάρτηση accept), δηµιουργείται µια νέα υποδοχή ρεύµατος µε σκοπό την επικοινωνία του εξυπηρετητή µε έναν πελάτη, διατηρώντας, εν τω µεταξύ, την αρχική υποδοχή του δεµένη µε την πόρτα για το άκουσµα νέων αιτηµάτων connect από άλλους πελάτες. Το ζεύγος υποδοχών του πελάτη και του εξυπηρετητή συνδέονται µε ένα ζεύγος ρευµάτων, ένα για κάθε κατεύθυνση. Μία από το ζεύγος διεργασιών στέλνει πληροφορίες στην άλλη γράφοντας στο εξερχόµενο ρεύµα και η άλλη διεργασία λαµβάνει την πληροφορία διαβάζοντας το εισερχόµενο ρεύµα. Όταν µια εφαρµογή κλείνει µια υποδοχή (µε τη συνάρτηση close), δηλώνει ότι δε θα γράψει άλλα δεδοµένα στο εξερχόµενο ρεύµα. εδοµένα που βρίσκονται στο buffer εξερχοµένων αποστέλλεται στο άλλο άκρο του ρεύµατος και τοποθετείται στην ουρά της υποδοχής προορισµού µε την ένδειξη ότι το ρεύµα διακόπηκε. Η διεργασία στον προορισµό µπορεί να διαβάσει τα δεδοµένα από την ουρά, αλλά κάθε προσπάθεια να συνεχίσει το διάβασµα, αφού η ουρά έχει αδειάσει, θα έχει ως αποτέλεσµα την ένδειξη του τέλους του ρεύµατος. Όταν µια διεργασία εξέρχεται ή αποτυγχάνει, όλες οι 15

υποδοχές κλείνουν και οποιαδήποτε προσπάθεια επικοινωνίας µε αυτή θα βρει τη σύνδεση κοµµένη. Ακολουθούν κάποια σηµαντικά ζητήµατα σχετικά µε την επικοινωνία ρεύµατος: Ταίριασµα δεδοµένων: ύο επικοινωνούσες διεργασίας πρέπει να συµφωνήσουν ως προς το περιεχόµενο των δεδοµένων των µεταβιβαζόµενων µε το ρεύµα, ώστε να µην υπάρξει παρερµηνεία από τον παραλήπτη. Για παράδειγµα, αν µια διεργασία γράψει στο ρεύµα ένα ακέραιο ακολουθούµενο από έναν πραγµατικό αριθµό, πρέπει και ο παραλήπτης να διαβάσει ένα ακέραιο αριθµό ακολουθούµενο από έναν πραγµατικό. Φράξιµο: Τα δεδοµένα που γράφονται στο ρεύµα, φυλάσσονται σε µια ουρά της υποδοχής προορισµού. Όταν µια διεργασία επιχειρεί να διαβάσει δεδοµένα από ένα εισερχόµενο ρεύµα, θα τα λάβει από την ουρά ή θα φράξει µέχρι να υπάρξουν διαθέσιµα. Η διεργασία που γράφει δεδοµένα σε ρεύµα µπορεί να φράξει, από το µηχανισµό ελέγχου TCP ροής, αν η υποδοχή στο άλλο άκρο φυλάσσει στην ουρά τόσα δεδοµένα όσα επιτρέπει το πρωτόκολλο. Νήµατα: Όταν ένας εξυπηρετητής αποδέχεται µια σύνδεση, δηµιουργεί, εν γένει, ένα νέο νήµα µέσω του οποίου θα επικοινωνεί µε το νέο πελάτη. Το πλεονέκτηµα της χρήσης ενός ξεχωριστού νήµατος για κάθε πελάτη είναι ότι ο εξυπηρετητής µπορεί να φράξει αναµένοντας δεδοµένα εισόδου, χωρίς να καθυστερεί άλλους πελάτες. Παράδειγµα επικοινωνίας µε stream sockets SERVER s=socket(ip4 ή IP6,DGRAM,πρωτόκολλο) CLIENT s=socket( ) bind(s,διεύθυνση,µήκος-διεύθυνσης) listen(s,max-connections) connect(s,διεύθυνση,µήκος-διεύθυνσης) s2=accept(s,ο πελάτης,µέγεθος) send(s,buffer,count,0) recv(s2,buffer,maxn,0) close(s2) close(s) 16

Η send είναι ασύγχρονη (δεν περιµένει). Η recv είναι σύγχρονη (περιµένει). 2.3 Τήλε-κλήση υποπρογράµµατος (RPC) 2.3.1 Βασική λειτουργία της RPC Σύνταξη Η τήλε-κλήση υποπρογράµµατος έχει γενικά τη µορφή: call όνοµα-υποπρογράµµατος(παράµετροι τιµής; παράµετροι αποτελέσµατος) Ο πελάτης φράζεται λόγω της call µέχρι να λάβει την επιβεβαίωση. Το αποµακρυσµένο υποπρόγραµµα είναι η διεργασία εξυπηρετητή η οποία εκτελείται στον αποµακρυσµένο Η/Υ. Φράζεται µε τη receive µέχρι να λάβει ένα µήνυµα από τον πελάτη και παραµέτρους. Κατόπιν, ο εξυπηρετητής στέλνει ένα reply() όταν τελειώσει την εργασία του. receive όνοµα-υποπρογράµµατος(παράµετροι εισόδου; παράµετροι εξόδου) reply(ο καλών, παράµετροι εξόδου) Σηµασιολογία Η καλούσα διεργασία καλεί και µεταβιβάζει ορίσµατα στο υποπρόγραµµα και φράζεται ενώ το υποπρόγραµµα εκτελείται. Όταν το υποπρόγραµµα τερµατίσει επιστρέφει τα αποτελέσµατα στην καλούσα διεργασία. Ο εξυπηρετητής φράζεται περιµένοντας το µήνυµα που περιέχει τα ορίσµατα. Όταν το λάβει αποσπά τα ορίσµατα από το µήνυµα και µεταβιβάζει ορίσµατα και έλεγχο στο υποπρόγραµµα. Τα αποτελέσµατα αποστέλλονται στον πελάτη. Το ακόλουθα ζητήµατα αφορούν τις ιδιότητες (χαρακτηριστικά) του RPC που πρέπει να ληφθούν υπ' όψη στη σχεδίαση ενός RPC συστήµατος, ώστε να επιτευχθεί η διαφάνεια. 17

έσιµο (binding): Το δέσιµο παρέχει σύνδεση µεταξύ του ονόµατοςυποπρογράµµατος και την τοποθεσία του αποµακρυσµένου υποπρογράµµατος. ιαφάνεια επικοινωνίας: Οι χρήστες πρέπει να είναι ανήµεροι ότι το υποπρόγραµµα που καλούν είναι αποµακρυσµένο. Υπάρχουν τρεις (3) δυσκολίες στην επίτευξη διαφάνειας: α) η ανίχνευση και διόρθωση λαθών οφειλοµένων σε αποτυχία της επικοινωνίας και του Η/Υ, β) η µεταβίβαση παραµέτρων και γ) χειρισµός των εξαιρέσεων. Η αποτυχία επικοινωνίας και του Η/Υ έχουν ως αποτέλεσµα ασυνεπή δεδοµένα λόγω της µερικής ολοκλήρωσης των διεργασιών. Η λύση σ' αυτό το πρόβληµα επαφίεται συχνά στον προγραµµατιστή εφαρµογών. Η µεταβίβαση παραµέτρων στα περισσότερα συστήµατα περιορίζεται στη χρήση παραµέτρων τιµής. Ο χειρισµός των εξαιρέσεων είναι ένα πρόβληµα που και αυτό σχετίζεται µε την ανοµοιογένεια. Οι διαθέσιµες εξαιρέσεις στις διάφορες γλώσσες προγραµµατισµού διαφέρουν και πρέπει να περιοριστούν στο χαµηλότερο κοινό παρονοµαστή. Ταυτοχρονισµός: Οι µηχανισµοί ταυτοχρονισµού δεν πρέπει να εµποδίζουν τους µηχανισµούς επικοινωνίας. Πελάτες και εξυπηρετητές µονονηµατικοί (single threaded), που φράζονται ενώ περιµένουν τα αποτελέσµατα από το αποµακρυσµένο υποπρόγραµµα, µπορούν να προκαλέσουν σηµαντικές καθυστερήσεις. Αυτές οι καθυστερήσεις µπορούν να επιδεινωθούν από περαιτέρω κλήσεις αποµακρυσµένων υποπρογραµµάτων στον εξυπηρετητή. Τα νήµατα επιτρέπουν τον εξυπηρετητή να εκτελέσει κλήσεις από περισσότερους πελάτες ταυτόχρονα. Ανοµοιογένεια: ιαφορετικοί Η/Υ µπορεί να έχουν διαφορετική αναπαράσταση δεδοµένων, µπορεί να εκτελούν διαφορετικά λειτουργικά συστήµατα ή τα αποµακρυσµένα υποπρογράµµατα µπορεί να έχουν γραφεί σε διαφορετική γλώσσα προγραµµατισµού. Η διεπαφή ενός αποµακρυσµένου υποπρογράµµατος εξυπηρετεί στη σύσταση (συγκρότηση) συµφωνίας µεταξύ των επικοινωνούντων διεργασιών ως προς των τύπο των ορισµάτων, τον τύπο των εξαιρέσεων, τον έλεγχο τύπων και την αυτόµατη µετατροπή από µια αναπαράσταση δεδοµένων σε µια άλλη, όπου απαιτείται. 18

Γενικά RPC καταδεικνύει έναν απλούστερο τρόπο κατασκευής κατανεµηµένων προγραµµάτων από τη µεταβίβαση µηνυµάτων, διότι αφαιρεί τις λεπτοµέρειες επικοινωνίας και µεταβίβασης. Η ιδέα είναι να φαίνεται η αποµακρυσµένη κλήση σαν τοπική. ηλαδή η RPC να είναι διαφανής που σηµαίνει ότι η καλούσα διεργασία να µην είναι ενήµερη ότι το κληθέν υποπρόγραµµα εκτελείται σε άλλο Η/Υ. Συνήθης κλήση υποπρογράµµατος Ας υποθέσουµε ότι ένα πρόγραµµα χρειάζεται να διαβάσει µια εγγραφή από ένα αρχείο. Ο προγραµµατιστής τοποθετεί µια κλήση της συνάρτησης read(fd,but,nbytes) στο πρόγραµµα. Σε ένα προσωπικό Η/Υ ο κώδικας της read() αποσπάται από µια βιβλιοθήκη, µε το διασυνδέτη, ο οποίος τον ενώνει µε το υπόλοιπο πρόγραµµα. Ο κώδικας της read() γενικά καλεί την αντίστοιχη read του συστήµατος. Με άλλα λόγια η read() λειτουργεί ως διεπαφή του προγράµµατος µε το λειτουργικό σύστηµα. Στέλεχος πελάτη και εξυπηρετητή Η RPC επιτυγχάνει τη διαφάνεια ε ανάλογο τρόπο. Αν το αρχείο βρίσκεται σε άλλο Η/Υ τότε µπορεί να γίνει κλήση της τοπικής read(). Για το σκοπό αυτό, µια διαφορετική έκδοση της read(), που ονοµάζεται στέλεχος-πελάτη έχει το τοποθετηθεί στη βιβλιοθήκη. Όπως και στην απλή περίπτωση χρησιµοποιείται η ακολουθία κλήσης όπως φαίνεται στο σχήµα που ακολουθεί: Σχήµα 12. Ακολουθία κλήσης υποπρογράµµατος. 19

Στη συνέχεια τοποθετούνται οι παράµετροι σε µήνυµα και ζητάει να σταλεί το µήνυµα στον εξυπηρετητή. Μετά την κλήση της send(), το στέλεχοςπελάτη καλεί τη receive(), το οποίο φράζεται µέχρι να έρθει η επιβεβαίωση. Στον εξυπηρετητή, το λειτουργικό σύστηµα µεταβιβάζει το µήνυµα στο στέλεχος-εξυπηρετητή. Το στέλεχος-εξυπηρετητή είναι παρόµοιο µε το στέλεχος-πελάτη. Είναι ένα κοµµάτι κώδικα που µετατρέπει αιτήµατα που προέρχονται από το διαδίκτυο σε τοπική κλήση υποπρογράµµατος. Κατά κανόνα το στέλεχος-εξυπηρετητή έχει καλέσει τη receive() και έχει φράξει περιµένοντας τα εισερχόµενα µηνύµατα. Όταν ληφθεί ένα µήνυµα, το στέλεχος-εξυπηρετητή αποσπά τις παραµέτρους και καλεί το υποπρόγραµµα. Άρα τα δεδοµένα του σχήµατος 12 βρίσκονται στη στοίβα. Ο εξυπηρετητής εκτελεί το υποπρόγραµµα κει µετά επιστρέφει το αποτέλεσµα στον καλούντα. Στη δική µας περίπτωση γεµίζει το buf µε δεδοµένα. Αυτός ο buf ανήκει στον εξυπηρετητή. Το στέλεχος-εξυπηρετητή τοποθετεί το buf σε µήνυµα και καλεί την send() να το µεταβιβάσει στον πελάτη. Μετά από αυτό, το στέλεχος-εξυπηρετητή συνήθως καλεί τη receive() και περιµένει για το επόµενο αίτηµα. Όταν το µήνυµα φτάσει στον πελάτη, το λειτουργικό σύστηµα βλέπει σε ποια διεργασία απευθύνεται, παραδίδει το µήνυµα στο στέλεχος-πελάτη και το ξεµπλοκάρει. Το στέλεχος-πελάτη αφαιρεί τα δεδοµένα από το µήνυµα και τα αντιγράφει στο buf του καλούντα. Ο καλών επιστρέφει µετά το read() και το µόνο που ξέρει είναι ότι ελήφθησαν τα δεδοµένα, αλλά αγνοεί την όλη διαδικασία. 2.3.2 Μεταβίβαση παραµέτρων Παράµετροι τιµής Η τοποθέτηση παραµέτρων σε µήνυµα λέγεται στοίχιση παραµέτρων (parameter marshaling). Έστω, για παράδειγµα, το αποµακρυσµένο υποπρόγραµµα add (i,j) το οποίο δέχεται 2 ακέραιους i και j ως παραµέτρους και επιστρέφει το άθροισµά τους. 20

Πελάτης Εξυπηρετητής ιεργασία... push j push i call add mov k,ax... Στέλεχοςπελάτη ιεργασία... push j push i call add mov k,ax... k proc int int int add val(i) val(j) k Στέλεχοςεξυπηρετητή proc int int int add val(i) val(j) k k Λειτουργικό σύστηµα Λειτουργικό σύστηµα Σχήµα 13. Τηλεκλήση. Έφ' όσον οι Η/Υ του πελάτη και του εξυπηρετητή είναι ίδιες η δουλειά προχωράει περίφηµα. Όµως, σε ένα µεγάλο κατανεµηµένο σύστηµα, είναι σύνηθες να διαφέρουν οι Η/Υ. Συχνά οι Η/Υ έχουν δική τους αναπαράσταση αριθµών και άλλων δεδοµένων. Επίσης, κάποιοι Η/Υ αριθµούν τα byte από δεξιά προς τ' αριστερά (π.χ. intel). Οπότε χρειάζονται πληροφορίες για το τι είναι ακέραιος και οι άλλοι τύποι, ώστε να µπορεί να γίνει η µετατροπή στην αναπαράσταση του Η/Υ του εξυπηρετητή. Παράµετροι αναφοράς Πως µεταβιβάζονται pointers και γενικά αναφορές; Όπως ξέρουµε ο pointer ή η αναφορά περιέχουν τη διεύθυνση µιας θέσης στη µνήµη του Η/Υ του πελάτη. Άρα τι νόηµα έχει στον Η/Υ του εξυπηρετητή, όταν στην ίδια διεύθυνση σίγουρα υπάρχει ένα άλλο αντικείµενο; Ας ξανά εξετάσουµε το παράδειγµα µε τη συνάρτηση read(). Η δεύτερη παράµετρος είναι η διεύθυνση ενός buffer. Ας υποθέσουµε ότι η διεύθυνσή του είναι 0x0B098230. Είναι φανερό ότι δεν µπορούµε να µεταβιβάσουµε 21

την παραπάνω διεύθυνση στον εξυπηρετητή, διότι είναι πολύ πιθανό να είναι η διεύθυνση ενός άλλου αντικειµένου. Μια λύση είναι να τοποθετήσει στο µήνυµα έναν πίνακα τόσων byte όσο το buffer. Ο server µπορεί να αντιγράψει τα δεδοµένα στον πίνακα που παρέλαβε και να τον στείλει πίσω στον πελάτη. Εκεί το στέλεχος-πελάτη θα αντιγράψει τα δεδοµένα στο buffer του προγράµµατος που περιέχεται στην read(). Προσδιορισµός των παραµέτρων και δηµιουργία στελέχους Αυτό που διαπιστώσαµε µέχρι τώρα είναι ότι ο καλών και ο κληθείς πρέπει να έχουν συµφωνήσει για τη µορφή των µηνυµάτων και ότι ακολουθούν τα ίδια ακριβώς βήµατα όταν χειρίζονται σύνθετες δοµές δεδοµένων. ηλαδή, και οι δύο πλευρές πρέπει να ακολουθήσουν το ίδιο πρωτόκολλο, διαφορετικά το RPC δε θα εκτελεστεί σωστά. π.χ. Synartisi(char x,float y,int Z[5]) { } Έστω ότι το πρωτόκολλο προσδιορίζει ότι στο µήνυµα ο χαρακτήρας θα είναι το δεξιότερο byte ενός double word (4 byte), ο πραγµατικός αριθµός θα είναι ένα double word και ο πίνακας θα καταλαµβάνει 5 double words των οποίων θα προηγείται ένας ακέραιος που θα δηλώνει το πλήθος των στοιχείων. Βλέπε σχήµα 14. Σχήµα 14. Μήνυµα. Και τα δύο στελέχη πρέπει να γνωρίζουν την παραπάνω µορφή του µηνύµατος. 22

Ο προσδιορισµός της µορφής ενός µηνύµατος είναι ένας παράγων, άλλα δεν είναι ο µοναδικός. Αυτό που επίσης χρειάζεται είναι συµφωνία µεταξύ πελάτη και εξυπηρετητή για την αναπαράσταση των απλών τύπων, όπως ακεραίων, πραγµατικών, χαρακτήρων, λογικών, κτλ. Π.χ. οι ακέραιοι αναπαρίσταται µε τη µορφή "συµπλήρωµα ως προς 2", οι πραγµατικοί µε την IEEE 754 µορφή. Όλοι αριθµοί αποθηκεύονται µε την little endian µορφή. Οι χαρακτήρες µε την 16-bit unicode µορφή, κτλ. Με τις πρόσθετες πληροφορίες µπορούν τα µηνύµατα να διερµηνευθούν µε σαφήνεια. Ο πελάτης και ο εξυπηρετητής πρέπει να συµφωνήσουν για ένα ακόµη παράγοντα: την ανταλλαγή µηνυµάτων. Να χρησιµοποιήσουν ροές ή datagrams. 2.3.3 Ασύγχρονο RPC Υπάρχουν εργασίες οι οποίες δεν επιστέψαν κάποιο αποτέλεσµα: µεταφορά χρηµάτων από λογαριασµό σε λογαριασµό, εισαγωγή γραµµών σε Β, έναρξη batch επεξεργασίας, κτλ. Για το λόγω αυτό παρέχεται η δυνατότητα της ασύγχρονης RPC. Ο πελάτης εκτελεί τη RPC και περιµένει την επιβεβαίωση από τον εξυπηρετητή. Ο εξυπηρετητής µόλις λάβει το αίτηµα στέλνει την επιβεβαίωση παραλαβής του αιτήµατος και συνεχίζει µε την κλήση του υποπρογράµµατος. Ο πελάτης µόλις λάβει την επιβεβαίωση επιστρέφει από την κλήση και συνεχίζει µε άλλες εργασίες. Αν ο πελάτης που εκτελεί την RPC δεν περιµένει ούτε για επιβεβαίωση τότε ονοµάζουµε αυτό το είδος RPC-µονόδροµο (one-way RPC). 2.4 ιευθυνσιοδότηση Ένα σηµαντικό ζήτηµα στη δια-διεργασιακή επικοινωνία είναι η διευθυνσιοδότηση: προσδιορισµός των διεργασιών που εµπλέκονται στην επικοινωνία. Κάθε µήνυµα πρέπει να ονοµάζει τη διεργασία παραλήπτη. Ονοµασία Σε ένα κατανεµηµένο σύστηµα, η υλοποίηση ενός συστήµατος ονοµασίας είναι συχνά κατανεµηµένο σε πολλαπλές µηχανές. Ο τρόπος κατανοµής παίζει ρόλο κλειδί στην απόδοση και την κλιµάκωση του συστήµατος ονοµασίας. Υπάρχουν πολλοί τρόποι χρήσης ονοµάτων στα κατανεµηµένα συστήµατα. Εµείς θα εξετάσουµε µερικά γενικά ζητήµατα, σε σχέση µε την 23