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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Νήµατα. ιεργασίες και νήµατα Υλοποίηση νηµάτων Ελαφριές διεργασίες Αξιοποίηση νηµάτων. Κατανεµηµένα Συστήµατα 10-1

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

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

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

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

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

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

ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr

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

Ντίρλης Νικόλαος- ΕΤΥ 3ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 25 ΟΚΤΩΒΡΙΟΥ 2013 ΑΙΘΟΥΣΑ Β4

ΕΚΦΩΝΗΣΕΙΣ ΘΕΜΑ Α. α. Πριν εμφανιστεί η τεχνολογία ISDN οι υπηρεσίες φωνής, εικόνας και δεδομένων απαιτούσαν διαφορετικά δίκτυα.

Τμήμα Οικιακής Οικονομίας και Οικολογίας. Οργάνωση Υπολογιστών

α. Συνόδου β. Μεταφοράς γ. Δικτύου δ. Διασύνδεσης δεδομένων ε. Φυσικού Επιπέδου (Μονάδες 5)

Βασικές έννοιες. Κατανεμημένα Συστήματα 1

Ιόνιο Πανεπιστήµιο Τµήµα Αρχειονοµίας Βιβλιοθηκονοµίας. Μοντέλο TCP/IP. Ενότητα E. Συστήµατα Επικοινωνίας

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

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

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

7.8 Σύστηµα ονοµάτων περιοχών (Domain Name System, DNS)

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

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

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

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

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

Αποστολή µηνύµατος } Σχήµα 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(), που ονοµάζεται στέλεχος-πελάτη έχει το τοποθετηθεί στη βιβλιοθήκη. Όπως και στην απλή περίπτωση χρησιµοποιείται η ακολουθία κλήσης όπως φαίνεται στο σχήµα που ακολουθεί: nbytes buf fd ιευθ. Επιστροφής... Κορυφή της στοίβας Σχήµα 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. y 5 z[0] z[1] z[2] z[3] z[4] x Σχήµα 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

ονοµατολογία και µετά θα µελετήσουµε την οργάνωση και υλοποίηση ονοµάτων φιλικών στον άνθρωπο. Παραδείγµατα τέτοιων ονοµάτων αποτελούν αυτά των αρχείων και των διευθύνσεων του παγκόσµιου ιστού. Η δηµιουργία ενός παγκόσµιου και κλιµακούµενου συστήµατος ονοµασίας είναι πρωταρχικής σηµασίας για αυτού του είδους τα ονόµατα. Ονόµατα, αναγνωριστικά και διευθύνσεις "Όνοµα σε ένα κατανεµηµένο σύστηµα είναι µια συµβολοσειρά που παραπέµπει σε µια οντότητα." Οντότητα µπορεί να είναι οτιδήποτε, για παράδειγµα, πόροι, όπως εκτυπωτές, δίσκοι και αρχεία. Επίσης, διαδικασίες, χρήστες, γραµµατοκιβώτια, news groups, ιστοσελίδες, παράθυρα, µηνύµατα, συνδέσεις δικτύων, κ.α. Οι οντότητες εκτελούν διάφορες λειτουργίες. Για να χρησιµοποιήσει κάποιος τις λειτουργίες µιας οντότητας, πρέπει να έχει πρόσβαση σ' αυτή. Η πρόσβαση γίνεται µέσω ενός σηµείου πρόσβασης. Ένα σηµείο πρόσβασης είναι µια ιδιαίτερη οντότητα σε ένα κατανεµηµένο σύστηµα. Το όνοµα ενός σηµείου πρόσβασης καλείται διεύθυνση. Χάριν συντοµίας, θα λέµε "η διεύθυνση της οντότητας" και όχι "η διεύθυνση του σηµείου πρόσβασης της οντότητας". Μια οντότητα µπορεί να έχει πολλά σηµεία πρόσβασης, όπως ένας άνθρωπος µπορεί να έχει πολλούς αριθµούς τηλεφώνου. Μια οντότητα µπορεί να αλλάξει το σηµείο πρόσβασης µέσα στο χρόνο, όπως ένας άνθρωπος όταν µεταβεί σε άλλη πόλη ή κράτος θα αλλάξει αριθµό τηλεφώνου. Το ίδιο πρέπει να γίνει µε την ηλεκτρονική διεύθυνση όταν κάποιος αλλάξει παροχέα. Μια οντότητα µπορεί να αλλάξει σηµείο πρόσβασης ή ένα σηµείο πρόσβασης µπορεί να εκχωρηθεί σε διαφορετική οντότητα. Είναι ξεκάθαρο ότι ένα όνοµα µιας οντότητας, ανεξάρτητο από τη διεύθυνσή της, είναι ευκολότερο και πιο ευέλικτο στη χρήση. Ένα τέτοιο όνοµα καλείται ανεξάρτητο τοποθεσίας (location independent). Εκτός από τις διευθύνσεις, άλλου τύπου ονόµατα, που αξίζουν ειδική µεταχείριση, είναι τα ονόµατα που χρησιµοποιούνται για τον µοναδικό προσδιορισµό οντοτήτων. Ένα αναγνωριστικό είναι ένα όνοµα µε τις ακόλουθες ιδιότητες. 1. Ένα αναγνωριστικό αναφέρεται το πολύ σε µια οντότητα. 2. Κάθε οντότητα είναι αναφερόµενη από το πολύ ένα αναγνωστικό. 3. Ένα αναγνωστικό αναφέρεται πάντα στην ίδια οντότητα. 24

Τέλος υπάρχουν και τα φιλικά προς τον άνθρωπο ονόµατα. Ενώ οι διευθύνσεις και τα αναγνωριστικά αναπαρίστανται µε σειρές ψηφίων (bitstrings), τα φιλικά προς τον άνθρωπο ονόµατα αναπαρίστανται µε συµβολοσειρές (character-strings). Χώροι ονοµάτων Τα ονόµατα οργανώνονται σε χώρους ονοµάτων (Name spaces). Ένας χώρος ονοµάτων µπορεί να αναπαρασταθεί µε ένα κατευθυνόµενο γράφο (directed graph). home n0 cs n1 keys n2 l1 l2 n3 l5 mbox l3 l4 Σχήµα 15. Γράφος ονοµάτων Οι τερµατικοί κόµβοι ( l1,l2, ) αποθηκεύουν πληροφορίες για την οντότητα που αναπαριστούν, π.χ. τη διεύθυνσή της. Οι µη-τερµατικοί κόµβοι (n1, n2 ) έχουν έναν αριθµό εξερχόµενων ακµών που καταλήγουν σε άλλους κόµβους τερµατικούς ή µη. Οι ακµές έχουν ετικέτες. Κάθε µη-τερµατικός κόµβος αποθηκεύει έναν πίνακα, στον οποίο κάθε εξερχόµενη ακµή αναπαρίσταται µε το ζεύγος (ετικέτα ακµής, αναγνωριστικό κόµβου). ( ιότι, σε ένα κατανεµηµένο σύστηµα, και οι κόµβοι αποτελούν οντότητες ο κάθε ένας από τους οποίους είναι συνδεδεµένος µε ένα αναγνωριστικό). Ο µη-τερµατικός κόµβος n0 ονοµάζεται ρίζα του γράφου. Μια διαδροµή του γράφου περιγράφεται µε την ακολουθία ετικετών που αντιστοιχούν στις ακµές που αποτελούν τη διαδροµή. π.χ. η ακολουθία n0 : <home, keys, mbox> περιγράφει τη διαδροµή n0 n1 n3 l4. 25

Επειδή τα ονόµατα οργανώνονται πάντα σε χώρους ονοµάτων, ορίζονται µόνο ως προς τη ρίζα του γράφου. Ανάλυση ονόµατος Οι χώροι ονοµάτων προσφέρουν ένα βολικό µηχανισµό αποθήκευσης και ανάκτησης πληροφοριών για οντότητες µε ονόµατα. Γενικότερα δοθείσης της διαδροµής ενός ονόµατος, θα ήταν δυνατόν να βρεθούν οι πληροφορίες που είναι αποθηκευµένες στον προσδιοριζόµενο, από αυτό το όνοµα, κόµβο. Η διαδικασία εύρεσης ενός ονόµατος καλείται ανάλυση ονόµατος (name resolution). Η αναζήτηση ξεκινάει από τον κόµβο ρίζα του γράφου. Χρησιµοποιώντας την ετικέτα της διαδροµής βρίσκει µέσω του πίνακα το αναγνωριστικό του κόµβου στον οποίο καταλήγει η ακµή. Συνεχίζοντας µε αυτόν τον τρόπο φτάνει στον τελευταίο κόµβο της διαδροµής. Ένα παράδειγµα: The Domain Name System (DNS) Μία από τις πιο ευρείες υπηρεσίες κατανεµηµένων ονοµάτων σε χρήση σήµερα, είναι το DNS του διαδικτύου. Το DNS βασικά χρησιµοποιείται για την εύρεση host διευθύνσεων και εξυπηρετητών αλληλογραφίας (mail servers). Ο DNS χώρος ονοµάτων είναι οργανωµένος ιεραρχικά ως ένα δένδρο. Οι ετικέτες είναι συµβολοσειρές χωρίς διάκριση πεζών-κεφαλαίων, µε µέγιστο µήκος 63 χαρακτήρων. Το πλήρες όνοµα µιας διαδροµής είναι 255 χαρακτήρες. Οι ετικέτες της διαδροµής διαχωρίζονται µε '.'. Η ρίζα αναπαρίσταται επίσης µε '.'. Π.χ. η διαδροµή root:<gr,lar,tei,cs> αναπαρίσταται µε τη συµβολοσειρά cs.tei.lar.el. Η τελευταία '.' παραλείπεται. Επειδή κάθε κόµβος έχει µόνο µία εισερχόµενη ακµή (µε εξαίρεση τη ρίζα που δεν έχει εισερχόµενες ακµές), η ετικέτα της εισερχόµενης ακµής χρησιµοποιείται και ως όνοµα του κόµβου. Ένα υποδένδρο καλείται περιοχή (domain). Η διαδροµή προς τη ρίζα καλείται όνοµα περιοχής (domain name). Το περιεχόµενο ενός κόµβου διαµορφώνεται από µία συλλογή εγγραφών πόρων (resource records). Ένας κόµβος στο DNS χώρο ονοµάτων συχνά αναπαριστά διάφορες οντότητες την ίδια στιγµή. Π.χ. ο χώρος ονοµάτων teilar.gr χρησιµοποιείται για να αναπαριστά µια περιοχή και µία ζώνη. Σ' αυτή την περίπτωση, η περιοχή υλοποιείται µε διάφορες ζώνες. Ένας σηµαντικός τύπος εγγραφής πόρων είναι η εγγραφή ΜΧ (mail exchange), η οποία είναι ουσιαστικά ένας συµβολικός σύνδεσµος σε ένα κόµβο που αναπαριστά έναν εξυπηρετητή αλληλογραφίας. Για παράδειγµα, ο 26

κόµβος που αναπαριστά την περιοχή teilar.gr έχει µια ΜΧ εγγραφή που περιέχει το όνοµα mail.teilar.gr, που αναφέρεται σε ένα εξυπηρετητή αλληλογραφίας. Αυτός ο εξυπηρετητής χειρίζεται την εισερχόµενη αλληλογραφία που απευθύνεται στους χρήστες της teilar.gr περιοχής. Μπορεί να είναι διάφορες ΜΧ εγγραφές αποθηκευµένες σε ένα κόµβο. ΙΡ διευθύνσεις Οι ΙΡ διευθύνσεις είναι 32 bit αριθµητικά αναγνωριστικά που περιέχουν ένα αναγνωριστικό διαδικτύου και ένα αναγνωριστικό οικοδεσπότη (host). Τα δύο αναγνωριστικά γράφονται ως ακολουθία 4 οκταψήφιων αριθµών διαχωριζοµένων µε '.', π.χ. 192.0.2.111 Οι αριθµοί, ανάλογα µε την κλάση των διευθύνσεων, µπορούν να είναι: Κλάση Α 1-127.0-255.0-255.0-255 Κλάση Β 128-191.0-255.0-255.0-255 Κλάση C 192-223.0-255.0-255.0-255 24 8 8 8 Οι διευθύνσεις της κλάσης Α µε δυναµικότητα 2 = 2.2.2 οικοδεσποτών σε κάθε υποδίκτυο, είναι δεσµευµένες για διάφορα δίκτυα ευρείας έκτασης. Οι διευθύνσεις της κλάσης Β είναι δεσµευµένες για οργανισµούς που περιέχουν δίκτυα µε περισσότερους από 255 Η/Υ. Οι διευθύνσεις της κλάσης C είναι για όλες τις άλλες περιπτώσεις. Όταν φάνηκε ότι το πλήθος των διευθύνσεων της παραπάνω µορφής επρόκειτο να µηδενιστεί, εµφανίστηκε το ΙΡν6 σύστηµα. Αποτελείται από 128 ψηφία, χωρισµένα σε 8 οµάδες των 16 ψηφίων, που διαχωρίζονται µε ':', και ο αριθµός κάθε οµάδας έχει 16δικη µορφή, π.χ. 2001:0db8:c9d2:aee5:73e3:943a:a5ae:9551 Όταν µια οµάδα είναι 0 τότε δε γράφουµε τον αριθµό, π.χ. Η διεύθυνση: 2001:0db8:c9d2:0012:0000:0000:0000:0051 γράφεται ως: 2001:0db8:c9d2:0012::0051 Άλλο παράδειγµα. Η διεύθυνση: 2001:0db8:ab00:0000:0000:0000:0000:0000 γράφεται ως: 2001:0db8:ab00:: Συµβατότητα µεταξύ ΙΡν4 και ΙΡν6 διευθύνσεων. Η ΙΡν4 διεύθυνση 192.0.2.33 έχει την εξής ΙΡν6 µορφή: ::ffff:192:0:2:33 27

Πόρτες (ports) Εκτός από την ΙΡ διεύθυνση, υπάρχει ακόµη µια διεύθυνση, που χρησιµοποιείται από τις υποδοχές-ροής, η οποία ονοµάζεται αριθµός πόρτας. Είναι ένας 16-ψήφιος αριθµός που χρησιµοποιείται ως τοπική διεύθυνση για τη σύνδεση. Έστω ότι θέλετε να κάνετε περιήγηση στον παγκόσµιο ιστό και να λάβετε τα ηλεκτρονικά σας µηνύµατα. Πως διαχωρίζονται οι δύο υπηρεσίες στον ίδιο Η/Υ, ο οποίος έχει µία µόνο ΙΡ διεύθυνση; ιαφορετικές υπηρεσίες του διαδικτύου έχουν διαφορετικούς αριθµούς πορτών, οι οποίοι είναι γνωστοί. Η περιήγηση έχει αριθµό πόρτας 80. Η telnet έχει αριθµό πόρτας 23. Το SMTP έχει αριθµό πόρτας 25. Μπορείτε να βρείτε όλους τους αριθµούς πορτών στη λίστα "Big IANA port list". 28

3. Επεξεργασία συναλλαγών 3.1 Εισαγωγή Οι συναλλαγές εγγυώνται ότι όλα τα αντικείµενα που χειρίζεται ο εξυπηρετητής παραµένουν σε συνεπή κατάσταση όταν προσπελαύνοντα από πολλαπλές συναλλαγές ακόµη και όταν συµβαίνουν συντριβές του εξυπηρετητή. Μια συναλλαγή ορίζεται από έναν πελάτη ως ένα σύνολο πράξεων σε αντικείµενα, το οποίο θα εκτελεστεί ως µια αδιαίρετη µονάδα από τους εξυπηρετητές, οι οποίοι διαχειρίζονται αυτά τα αντικείµενα. Οι συναλλαγές εγγυώνται ότι όλα τα αντικείµενα που χειρίζεται ο εξυπηρετητής παραµένουν σε συνεπή κατάσταση όταν προσπελαύνοντα από πολλαπλές συναλλαγές ακόµη και όταν συµβαίνουν συντριβές του εξυπηρετητή. Οι εξυπηρετητές πρέπει να εγγυώνται ότι είτε εκτελείται ολόκληρη η συναλλαγή και τα αποτελέσµατα καταχωρούνται σε µόνιµο αποθηκευτικό χώρο ή, σε περίπτωση συντριβής κάποιου ή κάποιων εξυπηρετητών, τα ενδιάµεσα αποτελέσµατα της συναλλαγής εξαλείφονται. Η συναλλαγή ενός πελάτη θεωρείται ως αδιαίρετη και από τη σκοπιά των συναλλαγών άλλων πελατών, µε την έννοια ότι οι πράξεις µιας συναλλαγής δεν µπορούν να διακρίνουν τα ενδιάµεσα αποτελέσµατα πράξεων άλλων συναλλαγών. Για την επεξήγηση διαφόρων καταστάσεων θα χρησιµοποιήσουµε ένα τραπεζικό παράδειγµα. Κάθε λογαριασµός αναπαρίσταται από ένα αποµακρυσµένο αντικείµενο του οποίου η διεπαφή Λογαριασµός παρέχει τις πράξεις για καταθέσεις, αναλήψεις και ερωτήσεις υπολοίπου. Κάθε υποκατάστηµα αναπαρίσταται από ένα αποµακρυσµένο αντικείµενο του οποίου η διεπαφή Υποκατάστηµα παρέχει τις πράξεις για τη δηµιουργία νέων λογαριασµών, αναζήτηση λογαριασµών και ερωτήσεις αποθέµατος. Λογαριασµός κατάθεση (λογαριασµός, ποσό) ανάληψη(λογαριασµός, ποσό) υπόλοιπο_λογαριασµού (λογαριασµός ) ποσό θέσε_υπόλοιπο_λογαριασµού (λογαριασµός, ποσό) 29

Υποκατάστηµα δηµιουργία (όνοµα) λογαριασµός αναζήτηση (όνοµα) λογαριασµός απόθεµα_υποκαταστήµατος ( ) ποσό Απλός συγχρονισµός (χωρίς συναλλαγές) Σε έναν εξυπηρετητή, οι συναλλαγές διαφόρων πελατών που εκτελούνται, µπορεί µερικές φορές να παρεµβαίνουν η µια στην άλλη. Αυτή η παρέµβαση µπορεί να έχει ως αποτέλεσµα λανθασµένες τιµές για τα αντικείµενα. Ατοµικές πράξεις. Είναι πράξεις που δεν επιδέχονται παρέµβαση από πράξεις που εκτελούνται ταυτόχρονα σε άλλα νήµατα. Οι synchronized µέθοδοι στην Java είναι ένας τρόπος για να επιτύχουµε ατοµικές πράξεις. Για παράδειγµα: public synchronized void deposit(int poso) throws Remote Exception { } Μόνο ένα νήµα µπορεί να καλέσει µια synchronized µέθοδο. Σε άλλα περιβάλλοντα επιτυγχάνουµε ατοµικές πράξεις µε µηχανισµούς αµοιβαίου αποκλεισµού. Βελτίωση της συνεργασίας πελατών. Κάποιοι πελάτες χρησιµοποιούν πράξεις για την ενηµέρωση αντικειµένων του εξυπηρετητή και άλλοι πελάτες χρησιµοποιούν πράξεις για την προσπέλαση τους. Αυτός ο τρόπος συγχρονίζει την προσπέλαση των αντικειµένων, άλλα µερικές φορές απαιτείται επικοινωνία µεταξύ των νηµάτων. Ένα κλασικό παράδειγµα είναι οι παραγωγοί και οι καταναλωτές. Οι καταναλωτές δεν µπορούν να καταναλώσουν αν πρώτα δεν παράγουν οι παραγωγοί. Στη Java οι wait και notify µέθοδοι επιτρέπουν τα νήµατα να επικοινωνούν µεταξύ τους. Η µέθοδος object.wait(χρονικό διάστηµα) µπλοκάρει το νήµα που την καλεί µέχρι να τελειώσει ο χρόνος ή να κληθεί η µέθοδος notify, δηλαδή η object.notify() ξυπνάει ένα νήµα που µπλόκαρε µε την wait. Οι wait και notify πρέπει να κληθούν εντός synchronized µεθόδων. 3.2 Συναλλαγές Σε κάποιες περιπτώσεις, οι πελάτες χρειάζονται µια ακολουθία ξεχωριστών αιτηµάτων, προς τον εξυπηρετητή, να είναι ατοµική, µε την έννοια ότι: 30

1. δεν επηρεάζεται από πράξεις εκτελούµενες ταυτόχρονα για λογαριασµό άλλων πελατών, 2. είτε θα εκτελεστούν όλες οι πράξεις µε επιτυχία ή, σε αντίθετη περίπτωση, να µην επηρεαστούν από τη συντριβή του εξυπηρετητή. Στο τραπεζικό µας παράδειγµα, ένας πελάτης που εκτελεί µια ακολουθία πράξεων σε συγκεκριµένο λογαριασµό για κάποιο χρήστη, πρέπει πρώτα να βρει το λογαριασµό βάση του ονόµατος και µετά να εκτελέσει τις πράξεις: κατάθεση, ανάληψη και υπόλοιπο_λογαριασµού. Έστω ότι οι λογαριασµοί είναι τρεις µε τα ονόµατα Α, Β και Γ. Βρίσκονται οι αντίστοιχοι λογαριασµοί και στις µεταβλητές a,b,c εισχωρείτε ένας pointer προς τον αντίστοιχο λογαριασµό. Ένα παράδειγµα συναλλαγής είναι το ακόλουθο: Συναλλαγή Τi ανάληψη(a,100) κατάθεση(b,100) ανάληψη(c,200) κατάθεση(b,200) Οι δύο πρώτες ενέργειες µεταφέρουν 100 από το λογαριασµό Α στο λογαριασµό Β και οι επόµενες δύο µεταφέρουν 200 από το λογαριασµό Γ στο λογαριασµό Β. Οι συναλλαγές προορίζονται να είναι ατοµικές και ονοµάζονται ατοµικές συναλλαγές (atomic transactions). Υπάρχουν δύο πλευρές της ατοµικότητας: Όλα ή τίποτα: Μια συναλλαγή είτε τερµατίζει επιτυχώς, και τα αποτελέσµατα όλων των πράξεών της καταχωρούνται στα αντικείµενα, είτε δεν έχει καµία επίδραση στα αντικείµενα (αν αποτύχει). Αυτή η πλευρά εµπεριέχει δύο διαστάσεις: ατοµικότητα αποτυχίας (failure atomicity), µακροβιότητα (durability) (αποθήκευση αποτελεσµάτων). Αποµόνωση: Κάθε συναλλαγή πρέπει να εκτελεστεί χωρίς την παρέµβαση άλλων συναλλαγών. Για να υποστηριχθούν οι όροι ατοµικότητα αποτυχίας και µακροβιότητα πρέπει τα αντικείµενα να είναι ανακτήσιµα (recoverable). ηλαδή, όταν ένας εξυπηρετητής συντρίβεται για οποιονδήποτε λόγω, οι αλλαγές όλων των αποπερατωµένων συναλλαγών πρέπει να είναι διαθέσιµες σε µόνιµη µνήµη 31

έτσι ώστε όταν ο εξυπηρετητής αντικαθίσταται, να µπορεί να ανακτήσει τα αντικείµενα µε αντικατοπτριζόµενο το αποτέλεσµα "όλα-ή-τίποτα". Ο εξυπηρετητής που υποστηρίζει συναλλαγές πρέπει να συγχρονίζει τις πράξεις επαρκώς ώστε να εξασφαλίζει ότι ο όρος "αποµόνωσης" ικανοποιείται. Ένας τρόπος να το καταφέρει είναι να εκτελεί τις συναλλαγές σειριακά - µια τη φορά. υστυχώς, αυτή η λύση είναι απαράδεκτη για εξυπηρετητές των οποίων οι πόροι είναι κοινοί σε πολλαπλούς διαδραστικούς χρήστες. Στο παράδειγµα µας, είναι επιθυµητό να επιτρέπονται πολλοί τραπεζικοί υπάλληλοι να εκτελούν online τραπεζικές συναλλαγές ταυτόχρονα. Σκοπός κάθε εξυπηρετητή είναι να µεγιστοποιήσει τον ταυτοχρονισµό. Εποµένως, συναλλαγές επιτρέπεται να εκτελούνται ταυτόχρονα αν είχαν το ίδιο αποτέλεσµα εκτελούµενες σειριακά δηλαδή είναι σειριακά ισοδύναµες ή σειριακοποιήσιµες (serializable). Την κάθε συναλλαγή δηµιουργεί και διαχειρίζεται ένας συντονιστής, ο οποίος υλοποιεί τη διεπαφή Συντονιστής, που ακολουθεί: άνοιγµασυναλλαγής() t κλείσιµοσυναλλαγής(t) (commit, abort) αν επιστρέψει commit σηµαίνει ότι δεσµεύθηκε, αν επιστρέψει abort σηµαίνει ότι διακόπηκε. διακοπήσυναλλαγής(t) διακόπτη τη συναλλαγή t. Ο συντονιστής δίνει σε κάθε συναλλαγή ένα αναγνωστικό ή TID. Ο πελάτης καλεί την πράξη άνοιγµασυναλλαγής() για να συστήσει µια νέα συναλλαγή - χορηγεί ένα αναγνωριστικό συναλλαγής και επιστρέφει. Στο τέλος της συναλλαγής ο πελάτης καλεί την πράξη κλείσιµοσυναλλαγής(t) για να υποδείξει το τέλος της - όλα τα ανακτήσιµα αντικείµενα που προσπελάστηκαν πρέπει να αποθηκευτούν. Αν για οποιονδήποτε λόγο, ο πελάτης επιθυµεί να διακόψει τη συναλλαγή, καλεί την πράξη διακοπήσυναλλαγής(t) - όλα τα αποτελέσµατα πρέπει να εξαλειφτούν. Ο πελάτης ορίζει την ακολουθία κλήσεων που θα αποτελέσει τη συναλλαγή. Η κλήση θα αφορά κάποιο αντικείµενο. Η συναλλαγή προσδιορίζεται µε το TID που χρησιµοποιείται στην κλήση. Για το λόγο αυτό προστίθεται µια επιπλέον παράµετρος στις πράξεις, για παράδειγµα η κατάθεση ορίζεται ως: κατάθεση(λογαριασµός,αναγνωριστικό-συναλλαγής,ποσό) Όταν η συναλλαγή τερµατίζει καλείται η πράξη κλείσιµοσυναλλαγής(t), η οποία αποκρίνεται µε commit αν η εξέλιξη υπήρξε οµαλή και οι αλλαγές 32

παγιώθηκαν ή µε abort αν η συναλλαγή διακόπηκε για κάποιο λόγω και οι αλλαγές εξαλείφτηκαν. 3.2.1 Έλεγχος ταυτοχρονισµού Σ' αυτή την ενότητα θα περιγράψουµε δύο πολύ γνωστά προβλήµατα στα πλαίσια του τραπεζικού παραδείγµατος. Στη συνέχεια θα δείξουµε πώς να τα αποφεύγουµε χρησιµοποιώντας σειριακά-ισοδύναµες εκτελέσεις των συναλλαγών. Υποθέτουµε ότι κάθε µια από τις πράξεις: κατάθεση, ανάληψη, υπόλοιπο_λογαριασµού και θέσε_υπόλοιπο_λογαριασµού, είναι ατοµικές. Το πρόβληµα της χαµένης ενηµέρωσης. Το πρόβληµα της χαµένης ενηµέρωσης επεξηγείται µε το ακόλουθο ζεύγος συναλλαγών επί των τραπεζικών λογαριασµών Α, Β και Γ, των οποίων το τρέχον ισοζύγιο είναι 100, 200 και 300 αντίστοιχα. Η συναλλαγή Τ µεταφέρει ένα ποσό από τον Α στον Β. Η συναλλαγή U µεταφέρει ένα ποσό από τον Γ στον Β. Έστω ότι οι συναλλαγές Τ και U εκτελούνται ταυτόχρονα κατά τον ακόλουθο τρόπο: Συναλλαγή Τ Συναλλαγή U y=υπόλοιπο_λογαριασµού(b,t) y=υπόλοιπο_λογαριασµού(b,u) θέσε_υπόλοιπο_λογαριασµού(b,u,y*1.1) θέσε_υπόλοιπο_λογαριασµού(b,t,y*1.1) ανάληψη(a,τ,y/10) ανάληψη(c,u,y/10) Και οι δύο συναλλαγές διαβάζουν υπόλοιπο 200. Η µια µετά την άλλη αυξάνουν τον λογαριασµό κατά 20, οπότε το τελικό αποτέλεσµα είναι 220, ενώ θα έπρεπε να είναι: 200+20=220 και 220+22=242. Αυτό συµβαίνει διότι µια από τη ενηµερώσεις χάθηκε. Ασυνεπής ανάκτηση. Ακολουθεί ένα άλλο παράδειγµα: Συναλλαγή V ανάληψη(a,v,100) κατάθεση(b,v,100) Συναλλαγή W synolo=υπόλοιπο_λογαριασµού(a,w) synolo=synolo+υπόλοιπο_λογαριασµού(a,w) synolo=synolo+υπόλοιπο_λογαριασµού(c,w) 33

Η συναλλαγή V αφαιρεί 100 από τον λογαριασµό Α. Ενεργοποιείται η συναλλαγή W και υπολογίζει το συνολικό υπόλοιπο (υπόλοιπο όλων των λογαριασµών). Στη συνέχεια καταθέτει η συναλλαγή V 100 στο λογαριασµό Β. Φυσικά το σύνολο είναι κατά 100 λιγότερο. Σειριακή ισοδυναµία. Αν κάθε συναλλαγή, από µια οµάδα συναλλαγών, εκτελείται παράγοντας σωστά αποτελέσµατα, τότε µπορούµε να συµπεράνουµε ότι αν αυτές οι συναλλαγές εκτελεστούν µια-µια µε κάποια σειρά, το συνολικό αποτέλεσµα θα είναι επίσης σωστό. Η εναλλαγή στην εκτέλεση των πράξεων των συναλλαγών, η οποία επιφέρει συνολικό αποτέλεσµα ίδιο µε το συνολικό αποτέλεσµα της σειριακής εκτέλεσης των συναλλαγών λέγεται ότι είναι σειριακά ισοδύναµη µε αυτή. Η χρήση της σειριακής ισοδυναµίας, ως κριτηρίου για την σωστή ταυτόχρονη εκτέλεση, αποτρέπει την εµφάνιση των χαµένων ενηµερώσεων και των ασυνεπών ανακτήσεων. Μπορούµε να λύσουµε το πρόβληµα της χαµένης ενηµέρωσης µε τη σειριακή ισοδυναµία ως εξής: Συναλλαγή Τ Συναλλαγή U y=υπόλοιπο_λογαριασµού(b,t) θέσε_υπόλοιπο_λογαριασµού(b,t,y*1.1) y=υπόλοιπο_λογαριασµού(b,u) θέσε_υπόλοιπο_λογαριασµού(b,u,y*1.1) ανάληψη(a,τ,y/10) ανάληψη(c,u,y/10) Στον παραπάνω τρόπο εκτέλεσης, οι πράξεις της συναλλαγής U επί του λογαριασµού Β, εκτελούνται µετά από τις πράξεις της συναλλαγής Τ. ηλαδή, οι πράξεις επί του λογαριασµού Β εκτελούνται σειριακά. Στη συνέχεια θα εξετάσουµε την επίδραση της σειριακής ισοδυναµίας επί του προβλήµατος της ασυνεπούς ανάκτησης. Η εναλλάξ εκτέλεση των πράξεων των δύο συναλλαγών, µε τη σειρά που γίνεται, παράγει σωστά αποτελέσµατα: Συναλλαγή V ανάληψη(a,v,100) κατάθεση(b,v,100) Συναλλαγή W synolo=υπόλοιπο_λογαριασµού(a,w) synolo=synolo+υπόλοιπο_λογαριασµού(a,w) synolo=synolo+υπόλοιπο_λογαριασµού(c,w) 34