Πρόλογος Εισαγωγή... 21

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

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

Πρόλογος... xv. Κεφάλαιο 1: Εισαγωγή... 1

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

Εισαγωγή Middleware. Χάρης Μανιφάβας Τμήμα Εφ. Πληροφορικής & Πολυμέσων ΤΕΙ Κρήτης. Κατανεμημένα Συστήματα (Ε) Εισαγωγή: Θέματα S/W 1

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

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

Αμοιβαίος αποκλεισμός

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

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

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

Εισαγωγή Έννοιες Σχετικές Με S/W

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

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

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

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

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

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

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

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

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

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

1. ΑΡΧΕΣ ΛΕΙΤΟΥΡΓΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ

Όλες οι υπηρεσίες είναι διαθέσιμες μέσω διαδικτύου.

Κεφάλαιο 4: Λογισμικό Συστήματος

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

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

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

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

ΚΕΦΑΛΑΙΟ 17: Web Services Εισαγωγή

Αρχιτεκτονικές κατανεμημένων συστημάτων. I. Sommerville 2006 Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Κεφ. 12

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

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

Λειτουργικά Συστήματα Ι. Καθηγήτρια Παπαδάκη Αναστασία

Λειτουργικά Συστήματα (διαχείριση επεξεργαστή, μνήμης και Ε/Ε)

Τι είναι ένα λειτουργικό σύστημα (ΛΣ); Μια άλλη απεικόνιση. Το Λειτουργικό Σύστημα ως μέρος του υπολογιστή

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

Αρχιτεκτονικές κατανεμημένων συστημάτων. I. Sommerville 2006 Βασικές αρχές Τεχνολογίας Λογισμικού, 8η αγγ. έκδοση Κεφ. 12

Περιεχόµενα. Μέρος I Βασικά στοιχεία των Microsoft Windows XP Professional. Ευχαριστίες Εισαγωγή... 19

Κεφάλαιο 4 Διεργασίες Β Τάξη ΕΠΑΛ

Μετακινούμενος Κώδικας (Mobile Code) Κατανεμημένα Συστήματα 1

Κεφάλαιο 4 Λογισμικό συστήματος. Εφαρμογές Πληροφορικής Κεφ.4 Καραμαούνας Πολύκαρπος 1

Κεφάλαιο 7. ΕΠΑΛ Σύμης Εφαρμογές πληροφορικής Ερωτήσεις επανάληψης

ΕΦΑΡΜΟΓΕΣ ΠΛΗΡΟΦΟΡΙΚΗΣ Α ΤΑΞΗ

Τμήμα Λογιστικής. Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές. Μάθημα 8. 1 Στέργιος Παλαμάς

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

Λειτουργικά. Τεχνολογικό Εκπαιδευτικό Ίδρυμα Δυτικής Μακεδονίας Σιώζιος Κων/νος - Πληροφορική Ι

Σύστηµα Java RMI. Κατανεµηµένα Συστήµατα 17-1

Παράλληλη Επεξεργασία Κεφάλαιο 7 ο Αρχιτεκτονική Συστημάτων Κατανεμημένης Μνήμης

επιφάνεια πυριτίου Αναφορά στο Εκπαιδευτικό Υλικό : 5. Αναφορά στο Εργαστήριο :

Αρχιτεκτονική του πληροφοριακού συστήµατος Cardisoft Γραµµατεία 2003 ιαχείριση Προσωπικού

Πρότυπο Αναφοράς Open Systems Interconnection (OSI) Επικοινωνίες Δεδομένων Μάθημα 5 ο

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

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

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

Λειτουργικά συστήματα πραγματικού χρόνου

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

Κεφάλαιο 5. Κεφ. 5 Λειτουργικά Συστήματα 1

Οργάνωση επεξεργαστών και διεργασιών

Σχολή Προγραµµατιστών Ηλεκτρονικών Υπολογιστών (ΣΠΗΥ) Τµήµα Προγραµµατιστών Σειρά 112

Ενότητα 3 - Θέματα Εφαρμοσμένης Επιστήμης Υπολογιστών. Κοντογιάννης Βασίλειος ΠΕ19

Εξωτερική Αναζήτηση. Ιεραρχία Μνήμης Υπολογιστή. Εξωτερική Μνήμη. Εσωτερική Μνήμη. Κρυφή Μνήμη (Cache) Καταχωρητές (Registers) μεγαλύτερη ταχύτητα

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

ΠΕΡΙΕΧΟΜΕΝΑ Υλικό και Λογισμικό Αρχιτεκτονική Υπολογιστών Δομή, Οργάνωση και Λειτουργία Υπολογιστών 6

Συστήματα πολυμέσων. Εισαγωγή Υλικό συστημάτων πολυμέσων Λογισμικό συστημάτων πολυμέσων Συστήματα πραγματικού χρόνου Χρονοπρογραμματισμός

Κεφάλαιο 4. Λογισμικό Συστήματος

Κατανεµηµένα Αντικείµενα 16-1

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

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

Γεωγραφικά Συστήµατα Πληροφοριών και Αρχές Τηλεπισκόπησης

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

Θέματα διπλωματικών εργασιών σε. Συστοιχίες παράλληλης εξυηρέτησης εφαρμογών Διαδικτύου

Αρχιτεκτονική Υπολογιστών

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

Εισαγωγή Θέματα H/W. Χάρης Μανιφάβας Τμήμα Εφ. Πληροφορικής & Πολυμέσων ΤΕΙ Κρήτης. Κατανεμημένα Συστήματα (Ε) Εισαγωγή: Θέματα H/W 1

12/5/18. συστημάτων. Το λογισµικό συστηµάτων. Κεφάλαιο 5

Χαράλαμπος Καραγιαννίδης

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

Αρχιτεκτονική Υπολογιστών

Χαρακτηρισµός Κατανεµηµένων Συστηµάτων

Ομότιμα συστήματα p2p systems ΠΡΙΝΕΑ ΜΑΡΙΑ 10 ΕΞΑΜΗΝΟ

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

Οργάνωση ενός σύγχρονου Υπολογιστικού Συστήματος ή Ηλεκτρονικού Υπολογιστή (Η/Υ) Τα σύγχρονα συστήματα Η/Υ έχουν την παρακάτω οργάνωση:

Στοιχεία από την αρχιτεκτονική των μικροϋπολογιστών

Διαχείριση Ειδοποιήσεων με Κινητές Συσκευές

Μάθημα 3: Αρχιτεκτονική Υπολογιστών

Διαχείριση Πολιτισμικών Δεδομένων

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

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

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

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

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

Εισαγωγή στην Αρχιτεκτονική Η/Υ

Αρχιτεκτονική Υπολογιστών

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

Αυτοματισμοί και Συστήματα Αυτομάτου Ελέγχου. Ενότητα 2

PROXY SERVER. Άριστη πύλη διαχωρισμού μεταξύ του εσωτερικού δικτύου και του Internet.

Ανάπτυξη & Σχεδίαση Λογισμικού (ΗΥ420)

Βασικές Έννοιες Πληροφορικής

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

Transcript:

ΠΑΡΑΡΤΗΜΑ Α Περιεχόμενα Πρόλογος... 15 ΚΕΦΑΛΑΙΟ 1 Εισαγωγή... 21 1.1. Συστήματα πολλών επεξεργαστών...21 1.1.1. Λειτουργικά συστήματα πολυεπεξεργαστών... 24 1.1.2. Λειτουργικά συστήματα δικτύων... 26 1.1.3. Κατανεμημένα λειτουργικά συστήματα... 27 1.1.4. Ενδιάμεσο λογισμικό κατανεμημένων συστημάτων... 28 1.2. Στόχοι κατανεμημένων συστημάτων...31 1.2.1. Διαφάνεια... 33 1.2.2. Κλιμάκωση... 35 1.3. Υπηρεσίες κατανεμημένων συστημάτων...37 1.3.1. Υπηρεσίες επικοινωνίας... 37 1.3.2. Υπηρεσίες εκτέλεσης... 38 1.3.3. Υπηρεσίες ονομασίας... 39 1.3.4. Υπηρεσίες αρχείων... 40 1.3.5. Υπηρεσίες συναλλαγών... 40 1.3.6. Υπηρεσίες αντικειμένων... 41 1.3.7. Υπηρεσίες παραγωγής αντιγράφων... 41 1.3.8. Υπηρεσίες ασφάλειας... 42 1.4. Μοντέλο πελάτη-εξυπηρετητή...43 1.4.1. Μοντέλο πελάτη-εξυπηρετητή τριών επιπέδων... 45 1.4.2. Υλοποίηση μοντέλου πελάτη-εξυπηρετητή... 48 5

6 Κατανεμημένα Συστήματα με Java 1.5. Μοντέλο ομοτίμων...49 1.5.1. Δομημένα συστήματα ομοτίμων... 52 1.5.2. Μη δομημένα συστήματα ομοτίμων... 54 1.6. Κατανεμημένα συστήματα, υπολογισμοί και αλγόριθμοι...56 1.6.1. Σύγχρονα και ασύγχρονα συστήματα... 56 1.6.2. Κατανεμημένοι υπολογισμοί... 58 1.6.3. Κατανεμημένοι αλγόριθμοι... 60 ΚΕΦΑΛΑΙΟ 2 Διάταξη συμβάντων και καθολικές καταστάσεις... 61 2.1. Εισαγωγή...61 2.2. Συγχρονισμός φυσικών χρονιστών...63 2.2.1. Αλγόριθμοι Cristian και Berkeley... 65 2.2.2. Πρωτόκολλο Ώρας Δικτύου... 67 2.3. Διάταξη συμβάντων...69 2.4. Λογικοί και διανυσματικοί χρονιστές...70 2.5. Καθολικές καταστάσεις...73 2.6. Παθητική στρατηγική: Παρατηρήσεις...75 2.6.1. Παθητική στρατηγική: Παρατηρήσεις... 77 2.6.2. Ενεργητική στρατηγική: Στιγμιότυπα... 83 ΚΕΦΑΛΑΙΟ 3 Καθολικά κατηγορήματα... 91 3.1. Εισαγωγή...91 3.2. Ιδιότητες καθολικών κατηγορημάτων...92 3.2.1. Σταθερά κατηγορήματα... 92 3.2.2. Ασταθή κατηγορήματα... 92 3.2.3. Possibly(Φ) και Definitely(Φ)... 95 3.2.4. Αποτίμηση Possibly(Φ)... 96 3.2.5. Αποτίμηση Definitely(Φ)... 97 3.3. Αδιέξοδα...98 3.3.1. Χειρισμός αδιεξόδων... 100 3.3.2. Ανίχνευση αδιεξόδων... 101 3.3.3. Συγκεντρωτική ανίχνευση αδιεξόδων... 103 3.3.4. Ιεραρχική ανίχνευση αδιεξόδων... 104

Περιεχόμενα 7 3.3.5. Κατανεμημένη ανίχνευση αδιεξόδων... 106 3.3.6. Αποκατάσταση αδιεξόδων... 114 3.4. Κατανεμημένος τερματισμός...116 3.4.1. Αλγόριθμος του Dijkstra... 116 3.4.2. Αλγόριθμος ανάκτησης πίστωσης... 118 3.4.3. Αλγόριθμος των Dijkstra και Scholten... 121 3.4.4. Αλγόριθμος στιγμιότυπων... 122 ΚΕΦΑΛΑΙΟ 4 Αμοιβαίος αποκλεισμός... 123 4.1. Εισαγωγή...123 4.2. Συγκεντρωτική προσέγγιση...125 4.3. Κατανεμημένη προσέγγιση...128 4.3.1. Αλγόριθμος του Lamport... 128 4.3.2. Αλγόριθμος των Ricart και Agrawala... 132 4.4. Προσέγγιση με μεταβίβαση σκυτάλης...137 4.4.1. Τοπολογία δακτυλίου: Αλγόριθμος του LeLann... 137 4.4.2. Γενική τοπολογία: Αλγόριθμος του Chandy... 139 4.4.3. Τοπολογία δένδρου: Αλγόριθμος της Raymond... 141 ΚΕΦΑΛΑΙΟ 5 Εκλογή αρχηγού... 147 5.1. Εισαγωγή...147 5.2. Τοπολογία δένδρου...149 5.3. Τοπολογία δακτυλίου...153 5.3.1. Αλγόριθμος του LeLann... 153 5.3.2. Αλγόριθμος των Chang και Roberts... 154 5.4. Τοπολογία ισχυρά συνδεδεμένου γράφου...157 ΚΕΦΑΛΑΙΟ 6 Ανοχή βλαβών... 163 6.1. Εισαγωγή...163 6.2. Πλεονασμός...164 6.3. Ενεργή παραγωγή αντιγράφων...166

8 Κατανεμημένα Συστήματα με Java 6.4. Παθητική παραγωγή αντιγράφων...169 6.4.1. Ένα σύγχρονο πρωτόκολλο... 171 6.4.2. Ένα ασύγχρονο πρωτόκολλο... 172 6.5. Αποκατάσταση...175 6.5.1. Αντίστροφη αποκατάσταση... 175 6.5.2. Ευθεία αποκατάσταση... 176 6.6. Κατανεμημένη συμφωνία...178 6.6.1. Πρόβλημα των δύο στρατών... 180 6.6.2. Πρόβλημα των Βυζαντινών στρατηγών... 182 ΚΕΦΑΛΑΙΟ 7 Ατομικές συναλλαγές... 189 7.1. Εισαγωγή...189 7.2. Κατηγορίες συναλλαγών...192 7.3. Έλεγχος ταυτοχρονισμού...194 7.4. Μέθοδοι ελέγχου ταυτοχρονισμού...198 7.4.1. Κλείδωμα... 199 7.4.2. Αισιόδοξος έλεγχος ταυτοχρονισμού... 204 7.4.3. Διάταξη χρονοσφραγίδων... 209 7.5. Κατανεμημένες συναλλαγές...213 ΚΕΦΑΛΑΙΟ 8 Μηχανισμοί επικοινωνίας... 221 8.1. Πρωτόκολλα επικοινωνίας...221 8.2. Μοντέλο αναφοράς ISO/OSI...222 8.3. Μοντέλο αναφοράς TCP/IP...226 8.4. Υποδοχές επικοινωνίας...228 8.5. Δικτύωση στην Java...231 8.5.1. Διευθύνσεις: Τάξη InetAddress... 232 8.5.2. Υποδοχές ρευμάτων δεδομένων: Τάξη ServerSocket... 234 8.5.3. Σειριακοποίηση αντικειμένων... 240 8.5.4. Υποδοχές δεδομενογραμμάτων: Τάξη DatagramSocket... 242 8.5.5. Υποδοχές πολυεκπομπής: Τάξη MulticastSocket... 257 8.5.6. Ομοιόμορφοι Εντοπιστές Πόρων: Τάξη URL... 259

Περιεχόμενα 9 8.6. Απομακρυσμένες κλήσεις διαδικασιών...262 8.7. Μεταβίβαση παραμέτρων...265 8.7.1. Αναπαράσταση παραμέτρων... 267 8.7.2. Πρωτόκολλα απομακρυσμένων κλήσεων... 269 8.7.3. Αντιγραφή μηνυμάτων... 271 8.7.4. Προδιαγραφές διαδικασιών... 274 8.7.5. Το σύστημα DCE... 274 ΚΕΦΑΛΑΙΟ 9 Ταυτοχρονισμός και νήματα... 279 9.1. Διεργασίες και νήματα...279 9.2. Υλοποίηση νημάτων...282 9.3. Αξιοποίηση των νημάτων...287 9.4. Νήματα στην Java...289 9.4.1. Νήματα εκτέλεσης: Τάξη Thread... 292 9.4.2. Αντικείμενα εκτέλεσης: Διεπαφή Runnable... 303 9.4.3. Νήματα δαίμονες... 307 9.4.4. Ομάδες νημάτων... 308 9.4.5. Συγχρονισμός νημάτων... 313 ΚΕΦΑΛΑΙΟ 10 Θέματα ασφάλειας... 333 10.1. Μηχανισμοί ασφάλειας...333 10.2. Πάροχοι ασφάλειας...336 10.2.1. Αφηρημένη τάξη Provider... 337 10.3. Λίστες ελέγχου προσπέλασης...338 10.3.1. Διεπαφή Principal... 339 10.3.2. Διεπαφή Group... 339 10.3.3. Διεπαφή Permission... 340 10.3.4. Διεπαφή AclEntry... 340 10.3.5. Διεπαφή Owner... 342 10.3.6. Διεπαφή Acl... 343 10.4. Συνόψεις μηνυμάτων...353 10.4.1. Αφηρημένη τάξη MessageDigest... 354

10 Κατανεμημένα Συστήματα με Java 10.5. Κρυπτογραφία...360 10.5.1. Διεπαφή Key... 362 10.5.2. Κρυπτογραφία μυστικού κλειδιού... 363 10.5.3. Κρυπτογραφία δημόσιου κλειδιού... 365 10.5.4. Τάξη Cipher... 369 10.6. Ψηφιακές υπογραφές...375 10.6.1. Αφηρημένη τάξη Signature... 377 10.7. Ψηφιακά πιστοποιητικά...383 10.7.1. Αφηρημένη τάξη Certificate... 386 10.7.2. Εργαλείο keytool... 387 10.7.3. Τάξη KeyStore... 392 ΚΕΦΑΛΑΙΟ 11 Κατανομή φόρτου... 399 11.1. Οργάνωση πόρων...399 11.1.1. Μοντέλο δεξαμενής... 400 11.1.2. Μοντέλο σταθμών εργασίας... 402 11.1.3. Υβριδικό μοντέλο... 404 11.2. Πολιτικές καταχώρισης επεξεργαστών...405 11.2.1. Προσέγγιση εξισορρόπησης φόρτου... 409 11.2.2. Προσέγγιση καταμερισμού φόρτου... 420 11.3. Μετεγκατάσταση κώδικα...424 11.3.1. Είδη μετεγκατάστασης... 425 11.3.2. Δέσμευση πόρων... 427 11.3.3. Μετεγκατάσταση σε ετερογενή συστήματα... 430 11.3.4. Μετεγκατάσταση σε εικονικές μηχανές... 432 11.3.5. Μετεγκατάσταση κώδικα στην Agent TCL... 434 ΚΕΦΑΛΑΙΟ 12 Κατανεμημένα συστήματα ονομασίας... 439 12.1. Ονομασία οντοτήτων...439 12.1.1. Χώροι ονομάτων... 442 12.1.2. Ανάλυση ονομάτων... 444 12.1.3. Συγχώνευση χώρων ονομάτων... 446

Περιεχόμενα 11 12.2. Υπηρεσίες ονομασίας...449 12.2.1. Σύστημα DNS... 453 12.3. Υπηρεσίες ευρετηρίων...459 12.3.1. Σύστημα Active Directory... 462 12.3.2. Σύστημα Novell Directory Service... 466 12.4. Υπηρεσίες εντοπισμού...469 12.4.1. Ευρεία εκπομπή και πολυεκπομπή... 472 12.4.2. Δείκτες προώθησης... 473 12.4.3. Αρχική τοποθεσία... 475 ΚΕΦΑΛΑΙΟ 13 Κατανεμημένοι πίνακες κατακερματισμού... 479 13.1. Εισαγωγή...479 13.2. Κατανεμημένος κατακερματισμός...480 13.3. Το σύστημα Chord...484 13.3.1. Κόμβοι και κλειδιά... 485 13.3.2. Απλή αναζήτηση κλειδιών... 487 13.3.3. Σύνθετη αναζήτηση κλειδιών... 489 13.3.4. Προσχώρηση κόμβων... 493 13.3.5. Αποχώρηση και αποτυχία κόμβων... 499 13.4. Το σύστημα Pastry...502 13.4.1. Κόμβοι και κλειδιά... 504 13.4.2. Δρομολόγηση μηνυμάτων... 506 13.4.3. Προσχώρηση, αποχώρηση και αποτυχία κόμβων... 509 13.4.4. Βελτιστοποίηση διαδρομών... 511 13.5. Πολυεκπομπή στο σύστημα Scribe...514 13.5.1. Δημιουργία δένδρου πολυεκπομπής... 515 13.5.2. Αντιμετώπιση αποτυχιών... 518 ΚΕΦΑΛΑΙΟ 14 Κατανεμημένα συστήματα αποθήκευσης... 519 14.1. Εισαγωγή...519 14.2. Διεπαφή συστήματος αρχείων...520 14.2.1. Διεπαφή υπηρεσίας αρχείων... 522 14.2.2. Διεπαφή υπηρεσίας ευρετηρίων... 525

12 Κατανεμημένα Συστήματα με Java 14.3. Ονόματα και αναγνωριστικά αρχείων...528 14.4. Εξυπηρετητές αρχείων και ευρετηρίων...530 14.5. Προσωρινή αποθήκευση απομακρυσμένων αρχείων...534 14.6. Σημασιολογία καταμερισμού αρχείων...537 14.7. Συνέπεια συστήματος αρχείων...539 14.8. Το σύστημα NFS...543 14.8.1. Διεπαφή του NFS... 546 14.8.2. Προσωρινή αποθήκευση αρχείων στο NFS... 550 14.9. Το σύστημα AFS...552 14.9.1. Διεπαφή του AFS... 553 14.9.2. Προσωρινή αποθήκευση αρχείων στο AFS... 557 14.10. Το σύστημα PAST...559 14.10.1. Λειτουργία του PAST... 560 14.10.2. Παραγωγή αντιγράφων στο PAST... 564 14.11. Το σύστημα CFS...567 14.11.1. Το σύστημα αρχείων του CFS... 568 14.11.2. Λειτουργία του CFS... 570 ΚΕΦΑΛΑΙΟ 15 Κατανεμημένος καταμερισμός αρχείων... 573 15.1. Εισαγωγή...573 15.2. Αναζήτηση αρχείων σε συστήματα ομοτίμων...575 15.2.1. Αναζήτηση μέσω εξυπηρετητών... 575 15.2.2. Αναζήτηση μέσω πλημμύρας... 578 15.2.3. Αναζήτηση σε ημιδομημένα δίκτυα... 581 15.3. Ανταλλαγή αρχείων σε συστήματα ομοτίμων...584 15.3.1. Το σύστημα BitTorrent... 586 ΚΕΦΑΛΑΙΟ 16 Κατανεμημένα συστήματα αντικειμένων... 599 16.1. Εισαγωγή...599 16.2. Απομακρυσμένα αντικείμενα...601 16.3. Αναφορές σε αντικείμενα...604 16.4. Εξυπηρετητές αντικειμένων...606 16.4.1. Προσαρμογείς αντικειμένων... 608 16.4.2. Υποτακτικές τάξεις και εργαστηριακές μέθοδοι... 609

Περιεχόμενα 13 16.5. Εκκαθάριση αντικειμένων...611 16.5.1. Μετρητές και λίστες αναφορών... 613 16.6. Java RMI...615 16.6.1. Επικοινωνία με αντικείμενα... 615 16.6.2. Μεταβίβαση παραμέτρων και επιστροφή αποτελεσμάτων... 618 16.6.3. Εντοπισμός αντικειμένων... 620 16.6.4. Δυναμική φόρτωση κώδικα... 625 16.6.5. Υλοποίηση και εκτέλεση εφαρμογών... 626 Παράδειγμα 16.1... 633 16.6.6. Ενεργοποίηση αντικειμένων... 640 ΚΕΦΑΛΑΙΟ 17 Μηνυματοστρεφές ενδιάμεσο λογισμικό... 645 17.1. Εισαγωγή...645 17.2. Υπηρεσία Μηνυμάτων της Java...647 17.3. Προηγμένο Πρωτόκολλο Αναμονής Μηνυμάτων...650 17.4. Άλλες προσεγγίσεις...656 ΚΕΦΑΛΑΙΟ 18 Υπηρεσίες Ιστού... 657 18.1. Εισαγωγή...657 18.2. Γλώσσα Περιγραφής Υπηρεσιών Ιστού...659 18.3. Υπηρεσίες Ιστού βασισμένες στο πρωτόκολλο SOAP...667 18.4. Υπηρεσίες Ιστού με στυλ REST...669 18.5. Σύγκριση μεταξύ SOAP και REST...670 18.6. Σχεδιασμός και υλοποίηση υπηρεσιών Ιστού...672 ΠΑΡΑΡΤΗΜΑ Α Επικεφαλίδες μεθόδων της Java... 675 Μέθοδοι της τάξης InetAddress...675 Μέθοδοι της τάξης Socket...675 Μέθοδοι της τάξης ServerSocket...676 Μέθοδοι της τάξης DatagramPacket...676 Μέθοδοι της τάξης DatagramSocket...676 Μέθοδοι της τάξης MulticastSocket...676

14 Κατανεμημένα Συστήματα με Java Μέθοδοι της τάξης URL...677 Μέθοδοι της αφηρημένης τάξης URLConnection...677 Μέθοδοι της τάξης Thread...677 Μέθοδοι της τάξης ThreadGroup...678 Μέθοδοι της τάξης Object...679 Μέθοδοι της αφηρημένης τάξης Provider...679 Μέθοδοι της διεπαφής Principal...679 Μέθοδοι της τάξης PrincipalImpl...679 Μέθοδοι της διεπαφής Group...679 Μέθοδοι της τάξης GroupImpl...680 Μέθοδοι της τάξης PermissionImpl...680 Μέθοδοι της διεπαφής AclEntry...680 Μέθοδοι της τάξης AclEntryImpl...680 Μέθοδοι της διεπαφής Owner...680 Μέθοδοι της τάξης OwnerImpl...680 Μέθοδοι της διεπαφής Acl...681 Μέθοδοι της τάξης AclImpl...681 Μέθοδοι της αφηρημένης τάξης MessageDigest...681 Μέθοδοι της διεπαφής Key...682 Μέθοδοι της τάξης KeyGenerator...682 Μέθοδοι της τάξης KeyPair...682 Μέθοδοι της αφηρημένης τάξης KeyPairGenerator...683 Μέθοδοι της τάξης Cipher...683 Μέθοδοι της αφηρημένης τάξης Signature...684 Μέθοδοι της αφηρημένης τάξης Certificate...684 Μέθοδοι της τάξης KeyStore...685 Μέθοδοι της τάξης UnicastRemoteObject...686 Μέθοδοι της διεπαφής Registry...686 Μέθοδοι της τάξης LocateRegistry...686 Μέθοδοι της τάξης Naming...686 Βιβλιογραφία... 689 Ευρετήριο... 691

ΚΕΦΑΛΑΙΟ 1 Εισαγωγή 1.1. Συστήματα πολλών επεξεργαστών Ένα κατανεμημένο σύστημα είναι ένα σύνολο ετερογενών υπολογιστών οι οποίοι συνδέονται μέσω ενός δικτύου, με στόχο την από κοινού παροχή υπηρεσιών στους χρήστες του συστήματος. Η εξέλιξη των κατανεμημένων συστημάτων επηρεάζεται από την εξέλιξη της τεχνολογίας των υπολογιστών και των δικτύων, αλλά και από τις μεταβαλλόμενες ανάγκες των χρηστών τους. Από τεχνολογικής πλευράς, οι εξελίξεις στο χώρο των υπολογιστών (βλ. και Τόμο I, Κεφ. 0) έχουν επιτρέψει τη μαζική παραγωγή πολύ οικονομικών μικροεπεξεργαστών, οι οποίοι αποτελούν τις Κεντρικές Μονάδες Επεξεργασίας, ΚΜΕ (Central Processing Units, CPUs) των σύγχρονων μικροϋπολογιστών. Από τη δεκαετία του 1980, οι περισσότεροι χρήστες έχουν το δικό τους προσωπικό υπολογιστή (personal computer) ή σταθμό εργασίας (workstation), χωρίς να χρειάζεται πια να μοιράζονται ένα μεγάλο υπολογιστικό σύστημα με άλλους χρήστες. Όμως, σημαντικές τεχνολογικές εξελίξεις έχουν σημειωθεί και στα δίκτυα υπολογιστών, τα οποία επιτρέπουν την οικονομική σύνδεση δεκάδων, εκατοντάδων ή και εκατομμυρίων συστημάτων με τέτοιο τρόπο, ώστε τα συνδεδεμένα συστήματα να ανταλλάσσουν μεγάλο όγκο πληροφοριών σε μικρό χρονικό διάστημα. Έτσι, παρότι κάθε χρήστης έχει το δικό του σταθμό εργασίας, ο σταθμός αυτός μπορεί να επικοινωνήσει εύκολα και γρήγορα με οποιονδήποτε άλλον. Η δυνατότητα εύκολης και οικονομικής σύνδεσης πολλών προσωπικών υπολογιστών μέσω τοπικών δικτύων και δικτύων ευρείας περιοχής έχει δώσει ώθηση στη σχεδίαση υπολογιστικών συστημάτων πολλών επεξεργαστών, τα οποία ονομάζονται κατανεμημένα συστήματα (distributed systems), σε αντιδιαστολή με τα 21

22 Κατανεμημένα Συστήματα με Java παραδοσιακά συγκεντρωτικά συστήματα (centralized systems) ενός επεξεργαστή. Στην πράξη, ο όρος κατανεμημένο σύστημα είναι πιο εξειδικευμένος: Κατανεμημένο σύστημα ονομάζουμε κάθε υπολογιστικό σύστημα το οποίο αποτελείται από ανεξάρτητους υπολογιστές και το οποίο παρουσιάζει στους χρήστες του την εικόνα ενός ενιαίου συστήματος. Το ενδιαφέρον για τα συστήματα αυτά οφείλεται στο ότι μπορούν να κατασκευαστούν με βάση απλούς (συγκεντρωτικούς ή μη) υ- πολογιστές και στο ότι, εκτός από αυξημένη επίδοση, επιτρέπουν και τον (κατα)μερισμό των πόρων των ανεξάρτητων συστημάτων από τα οποία αποτελούνται. Αφού τα κατανεμημένα συστήματα είναι μια ειδική περίπτωση των συστημάτων πολλών επεξεργαστών, θα εξετάσουμε αρχικά τα συστήματα πολλών επεξεργαστών για να δούμε τις ομοιότητες και τις διαφορές μεταξύ τους. Η πιο προφανής σχεδιαστική προσέγγιση για τα συστήματα πολλών επεξεργαστών είναι αυτή των πολυεπεξεργαστών (multiprocessors). Όπως φαίνεται στο Σχήμα 1.1, στους πολυεπεξεργαστές πολλοί (συνήθως πανομοιότυποι) επεξεργαστές μοιράζονται την ίδια κύρια μνήμη, δηλαδή έχουμε κατανομή μόνο της επεξεργασίας (βλ. Τόμο I, Κεφ. 4.11). Για να είναι αποδοτικός ο καταμερισμός της κύριας μνήμης, οι επεξεργαστές και η μνήμη πρέπει να συνδέονται μέσω ενός δικτύου ή μιας λεωφόρου 1 πολύ υψηλής ταχύτητας και να βρίσκονται πολύ κοντά μεταξύ τους, αν γίνεται στο ίδιο κουτί, για ελαχιστοποίηση των καθυστερήσεων. Αν και οι πολυεπεξεργαστές είναι πολύ χρήσιμοι για εφαρμογές οι οποίες μπορούν να διασπαστούν εύκολα σε παράλληλες διεργασίες ή για να εκτελούν χρέη Επεξεργαστής 1 Επεξεργαστής 2 Επεξεργαστής 3 Λεωφόρος Συστήματος Κοινή μνήμη Σχήμα 1.1. Δομή ενός πολυεπεξεργαστή. 1 Σ.τ.Ε.: Στην ελληνική βιβλιογραφία, ο όρος bus αναφέρεται και ως δίαυλος.

Κεφάλαιο 1: Εισαγωγή 23 εξυπηρετητών 2, στην πράξη αποδεικνύεται ότι είναι δύσκολο να αυξήσουμε πολύ το πλήθος των επεξεργαστών, χωρίς να αντιμετωπίσουμε προβλήματα επίδοσης τα οποία απαιτούν εξειδικευμένο υλισμικό 3 για την επίλυσή τους, πράγμα που ανεβάζει το κόστος τους. Μιας και στα συστήματα πολυεπεξεργαστών οι μηχανές (ή μάλλον οι επεξεργαστές) δεν είναι ανεξάρτητες (ανεξάρτητοι), ένας μόνο πολυεπεξεργαστής δεν μπορεί να αποτελεί κατανεμημένο σύστημα, ανεξάρτητα από το λογισμικό που χρησιμοποιεί. Μια πιο σύνθετη προσέγγιση είναι η σύνδεση αυτόνομων υπολογιστών, δηλαδή επεξεργαστών με ιδιωτική κύρια μνήμη, οι οποίοι μπορούν να λειτουργήσουν και αυτόνομα, όπως φαίνεται στο Σχήμα 1.2. Τα συστήματα αυτά, γνωστά και ως πολυ-υπολογιστές (multicomputers), αποτελούνται από απλούς σταθμούς εργασίας συνδεδεμένων μέσω δικτύου, με αποτέλεσμα να έχουν χαμηλό κόστος αφού δεν απαιτούν εξειδικευμένο υλισμικό. Στην απλούστερη περίπτωση, όλες οι μηχανές είναι πανομοιότυπες, δηλαδή το σύστημα είναι ομοιογενές (homogeneous), ενώ στην πιο σύνθετη περίπτωση οι μηχανές διαφέρουν, οπότε το σύστημα είναι ετερογενές (heterogeneous). Στα ομοιογενή συστήματα μπορούμε να έχουμε το ίδιο ακριβώς λειτουργικό σύστημα σε κάθε μηχανή, ενώ στα ετερογενή συστήματα τα λειτουργικά συστήματα μπορεί να διαφέρουν σημαντικά. Τα ετερογενή συστήματα παρουσιάζουν μεγαλύτερο ενδιαφέρον αφού μπορούν να κατασκευαστούν χρησιμοποιώντας οποιονδήποτε διαθέσιμο εξοπλισμό. Και οι δύο κατηγορίες πολυ- Μνήμη 1 Μνήμη 2 Μνήμη 3 Επεξεργαστής 1 Επεξεργαστής 2 Επεξεργαστής 3 Δίκτυο Σχήμα 1.2. Δομή ενός πολυ-υπολογιστή. 2 Σ.τ.Ε.: Στην ελληνική βιβλιογραφία, ο όρος server αναφέρεται και ως διακομιστής. 3 Σ.τ.Ε.: Στην ελληνική βιβλιογραφία, ο όρος hardware αναφέρεται και ως υλικό.

24 Κατανεμημένα Συστήματα με Java Επεξεργαστής 1 Πυρήνας 1 Πυρήνας 2 Επεξεργαστής 1 Πυρήνας 1 Πυρήνας 2 Λεωφόρος Συστήματος Λεωφόρος Συστήματος Κοινή μνήμη Κοινή μνήμη Δίκτυο Σχήμα 1.3. Δομή ενός υβριδικού πολυ-υπολογιστή. υπολογιστών μπορούν να αποτελούν κατανεμημένα συστήματα, αν χρησιμοποιούν το κατάλληλο λογισμικό. Από τα μέσα της δεκαετίας του 2000 κυριαρχούν οι πολυπύρηνοι επεξεργαστές (multicore processors), οι οποίοι συνδυάζουν πολλούς πυρήνες επεξεργασίας στο ίδιο ολοκληρωμένο κύκλωμα. Μια αυτόνομη μηχανή που βασίζεται σε πολυπύρηνο επεξεργαστή είναι ένας πολυεπεξεργαστής, αλλά όταν συνδέεται μέσω δικτύου με άλλες αυτόνομες μηχανές, όπως φαίνεται στο Σχήμα 1.3, μπορεί να αποτελεί μέρος ενός υβριδικού πολυ-υπολογιστή (hybrid multicomputer). Γενικότερα, σε ένα ετερογενές κατανεμημένο σύστημα μπορούν να συνδυάζονται μηχανές με απλούς επεξεργαστές, πολυπύρηνους πολυεπεξεργαστές και (κλασικούς) πολυεπεξεργαστές. 1.1.1. Λειτουργικά συστήματα πολυεπεξεργαστών Τα Λειτουργικά Συστήματα Πολυεπεξεργαστών, ΛΣΠ (Multiprocessor Operating Systems, MOS) χρησιμοποιούνται στους πολυεπεξεργαστές με κοινή κύρια μνήμη. Οι χρήστες των συστημάτων αυτών βλέπουν μόνο ένα λειτουργικό σύστημα, το οποίο μπορεί να χρησιμοποιηθεί είτε για τη λύση ενός προβλήματος με παράλληλο τρόπο είτε για την ταυτόχρονη εκτέλεση προγραμμάτων πολλών χρη-

Κεφάλαιο 1: Εισαγωγή 25 στών. Σε ένα ΛΣΠ υπάρχει μόνο ένας εικονικός χώρος διευθύνσεων, ο οποίος καταμερίζεται μεταξύ των διαφόρων επεξεργαστών του συστήματος, και έναν κοινό χρονιστή, δηλαδή όλοι οι επεξεργαστές έχουν κοινή αντίληψη του χρόνου. Τα ΛΣΠ δεν διαφέρουν πολύ από τα κλασικά λειτουργικά συστήματα ενός επεξεργαστή. Όλα τα σύγχρονα λειτουργικά συστήματα υποστηρίζουν συμμετρική πολυεπεξεργασία (symmetric multiprocessing, SMP), προκειμένου να μπορούν να αξιοποιούν τους πολυπύρηνους επεξεργαστές, ενώ τα περισσότερα συστήματα υποστηρίζουν και (κλασικούς) πολυεπεξεργαστές. Ο αμοιβαίος αποκλεισμός των κρίσιμων περιοχών των διεργασιών που εκτελούνται ταυτόχρονα σε διαφορετικούς επεξεργαστές μπορεί να επιτευχθεί με τη χρήση ειδικών εντολών του υλισμικού που συγχρονίζουν την πρόσβαση σε καταμεριζόμενες δομές δεδομένων στην κοινή μνήμη (βλ. Τόμο II, Κεφ. 5.9.2). Το βασικό χαρακτηριστικό των ΛΣΠ είναι μια κεντρική λίστα έτοιμων διεργασιών (λίστα διανομέα) (βλ. Τόμο II, Κεφ. 5.13) που είναι αποθηκευμένη στην κοινή μνήμη. Ο μόνος παράγοντας που μπορεί να επηρεάσει την επιλογή μιας ΚΜΕ για την εκτέλεση μιας διεργασίας από τη λίστα αυτή είναι η μικρή ελάττωση της καθυστέρησης, αν η συγκεκριμένη ΚΜΕ περιέχει ήδη στην κρυφή μνήμη της μέρος του χώρου διευθύνσεων της υπό διανομή διεργασίας. Σε μερικά ΛΣΠ, μία από τις ΚΜΕ αφιερώνεται στην εκτέλεση του πυρήνα και των διεργασιών του λειτουργικού συστήματος, ενώ οι υπόλοιπες ασχολούνται με τις διεργασίες των χρηστών, με αποτέλεσμα η συγκεκριμένη ΚΜΕ να καταλήγει να αποτελεί σημείο συνωστισμού ή συμφόρησης (bottleneck). Το δίκτυο σύνδεσης των επεξεργαστών μπορεί επίσης να καταλήξει σε σημείο συνωστισμού, ειδικά στην περίπτωση που οι επεξεργαστές συνδέονται μέσω μιας κοινής λεωφόρου. Για το λόγο αυτόν, πολλά συστήματα πολυεπεξεργαστών χρησιμοποιούν κρυφές μνήμες (βλ. Τόμο I, Κεφ. 1.1.10) μεταξύ των επεξεργαστών και της κύριας μνήμης. Όλες οι αιτήσεις για προσπέλαση λέξεων της κύριας μνήμης γίνονται μέσω των κρυφών μνημών. Αν η απαιτούμενη από έναν επεξεργαστή λέξη βρίσκεται ήδη στην κρυφή του μνήμη, τότε αποφεύγεται η μεταφορά της μέσω του δικτύου σύνδεσης. Η προσθήκη ιδιωτικών κρυφών μνημών σε κάθε επεξεργαστή εισάγει το εξής πρόβλημα: Αν δύο επεξεργαστές περιέχουν στις κρυφές τους μνήμες την ίδια λέξη και ένας από αυτούς τροποποιήσει τα περιεχόμενά της, τότε, αν ο δεύτερος επιχειρήσει αργότερα να την αναγνώσει, θα ανακαλέσει τα παλιά της περιεχόμενα (βλ. Τόμο I, Κεφ. 4.11.1). Σε αυτή την περίπτωση, οι μνήμες είναι μη συνεκτικές (in-

26 Κατανεμημένα Συστήματα με Java coherent) και τα προγράμματα θα δώσουν λανθασμένα αποτελέσματα. Μία λύση στο πρόβλημα αυτό είναι οι κρυφές μνήμες να σχεδιάζονται με τέτοιο τρόπο ώστε κάθε φορά που μια λέξη γράφεται σε αυτές, αυτή η λέξη να αποθηκεύεται και στην κύρια μνήμη. Τέτοιες κρυφές μνήμες προξενούν κυκλοφορία δεδομένων στο δίκτυο όχι μόνο στις αποτυχίες ανάγνωσης λέξεων, αλλά σε όλες τις εγγραφές λέξεων, ακόμα και στις επιτυχείς. Επιπλέον, οι ελεγκτές των μνημών αυτών παρακολουθούν συνέχεια το δίκτυο σύνδεσης. Όταν ένας ελεγκτής διαπιστώσει ότι γίνεται εγγραφή σε μια λέξη της κύριας μνήμης που βρίσκεται στη δική του κρυφή μνήμη, είτε διαγράφει αυτή τη λέξη από την κρυφή μνήμη του είτε αντικαθιστά απλά τα περιεχόμενα της λέξης στην κρυφή του μνήμη με τα νέα περιεχόμενα της λέξης από την κύρια μνήμη. Ένα σύστημα πολυεπεξεργαστών που χρησιμοποιεί τέτοιου είδους κρυφές μνήμες ονομάζεται συνεκτικό (coherent). 1.1.2. Λειτουργικά συστήματα δικτύων Τα Λειτουργικά Συστήματα Δικτύων, ΛΣΔ ( etwork Operating Systems, OS) χρησιμοποιούνται σε ετερογενή και ομοιογενή συστήματα πολυυπολογιστών και δίνουν στους χρήστες τη δυνατότητα να χρησιμοποιούν πόρους που διατίθενται από άλλους υπολογιστές του δικτύου, χωρίς όμως να κρύβουν ότι οι πόροι αυτοί δεν είναι τοπικοί. Για παράδειγμα, σε ένα ΛΣΔ οι χρήστες μπορούν να αντιγράφουν αρχεία μεταξύ διαφορετικών μηχανών, να εκτελούν εντολές σε απομακρυσμένες μηχανές ή να συνδέονται σε απομακρυσμένες μηχανές χρησιμοποιώντας το τοπικό τους σύστημα σαν τερματικό. Το λειτουργικό σύστημα κάθε μηχανής του δικτύου είναι ουσιαστικά ίδιο με ένα λειτουργικό σύστημα ενός επεξεργαστή, με ορισμένες προσθήκες για την υλοποίηση των δικτυακών υπηρεσιών. Οι μηχανές μπορεί να διαθέτουν είτε όλες το ίδιο λειτουργικό σύστημα είτε διαφορετικά λειτουργικά συστήματα, αρκεί να συμφωνούν στο μορφότυπο (format) και στη σημασία των μηνυμάτων που μπορούν να ανταλλάξουν. Οι προσθήκες αυτές δεν αλλάζουν τη βασική δομή του λειτουργικού συστήματος αφού κάθε μηχανή διατηρεί πλήρη αυτονομία, ελέγχει πλήρως τους πόρους της και τους διαθέτει μέσω δικτύου κατόπιν ρητών αιτήσεων από απομακρυσμένους χρήστες. Στην πραγματικότητα, το ΛΣΔ καθιστά ιδιαίτερα εμφανές το ότι το σύστημα αποτελείται από ανεξάρτητους υπολογιστές. Για παράδειγμα, κάθε μηχανή έχει το δικό της σύστημα αρχείων, οπότε οι χρήστες όχι μόνο πρέπει να ορίζουν ρητά τις μηχανές ανάμεσα στις οποίες θέλουν να αντιγράψουν ένα αρχείο, αλλά θα πρέπει

Κεφάλαιο 1: Εισαγωγή 27 να γνωρίζουν και τη δομή του συστήματος αρχείων κάθε μηχανής. Αυτό σημαίνει ότι η θέση των αρχείων δεν είναι διαφανής (transparent) στους χρήστες, με την έννοια ότι οι χρήστες πρέπει να γνωρίζουν πού ακριβώς (μηχανή και διαδρομή) βρίσκονται τα αρχεία που τους ενδιαφέρουν. Για να αυξηθεί η ευελιξία των ΛΣΔ, πολλά τέτοια συστήματα παρέχουν ένα καταμεριζόμενο καθολικό σύστημα αρχείων το οποίο υποστηρίζεται από μία ή περισσότερες μηχανές, γνωστές ως εξυπηρετητές αρχείων (file servers). Οι υπόλοιπες μηχανές, γνωστές ως πελάτες (clients), μπορεί να υποστηρίζουν και τα δικά τους τοπικά συστήματα αρχείων, αν έχουν τοπικούς δίσκους. Όλα τα αρχεία που μπορούν να καταμεριστούν βρίσκονται αποθηκευμένα στους εξυπηρετητές, με α- ποτέλεσμα η θέση κάθε αρχείου να είναι διαφανής στους χρήστες οι οποίοι προσπελάζουν τα απομακρυσμένα αρχεία με τον ίδιο τρόπο που προσπελάζουν τα τοπικά. Ανάλογα με το σύστημα, κάθε πελάτης μπορεί να έχει είτε την ίδια εικόνα του συστήματος αρχείων είτε διαφορετική εικόνα. Τα κατανεμημένα συστήματα αρχείων είναι ουσιαστικά το πρώτο βήμα των ΛΣΔ προς την κατεύθυνση της παρουσίασης της εικόνας ενός ενιαίου συστήματος. 1.1.3. Κατανεμημένα λειτουργικά συστήματα Τα Κατανεμημένα Λειτουργικά Συστήματα, ΚΛΣ (Distributed Operating Systems, DOS) χρησιμοποιούνται σε ομοιογενή συστήματα πολυ-υπολογιστών. Αν και ένα ΚΛΣ εκτελείται σε μηχανές χωρίς κοινή μνήμη ή κοινό χρονιστή, παρέχει στους χρήστες την εικόνα ενός μόνο συστήματος, όπως φαίνεται στο Σχήμα 1.4. Οι χρήστες του δεν χρειάζεται να γνωρίζουν αν υπάρχουν περισσότεροι του ενός επεξεργαστές, σε ποιους επεξεργαστές εκτελούνται οι διεργασίες τους ή πού βρίσκονται αποθηκευμένα τα αρχεία τους. Έτσι λοιπόν, σε αντίθεση με τα ΛΣΠ και τα ΛΣΔ, τα ΚΛΣ είναι πραγματικά κατανεμημένα συστήματα. Τα ΚΛΣ διαφέρουν σημαντικά από τα συστήματα ενός επεξεργαστή. Για παράδειγμα, μπορούν να επιτρέπουν σε διάφορες διεργασίες να εκτελούνται σε διαφορετικούς επεξεργαστές, με αποτέλεσμα να απαιτούν σύνθετους αλγόριθμους χρονοπρογραμματισμού για βελτιστοποίηση της επίδοσης. Η επικοινωνία των μηχανών μέσω του δικτύου οδηγεί σε καθυστερήσεις, με αποτέλεσμα οι κατανεμημένοι αλγόριθμοι να εκτελούνται συχνά με μη πλήρεις, απαρχαιωμένες ή ακόμα και λανθασμένες πληροφορίες. Η εικόνα αυτή διαφέρει ριζικά από εκείνη του λειτουργικού συστήματος ενός επεξεργαστή, το οποίο έχει στη διάθεσή του σε κάθε χρονική στιγμή πλήρεις και ακριβείς πληροφορίες για την κατάσταση του συστήματος.

28 Κατανεμημένα Συστήματα με Java Εφαρμογή Εφαρμογή Εφαρμογή ΚΛΣ Επεξεργαστής 1 Επεξεργαστής 2 Επεξεργαστής 3 Δίκτυο Σχήμα 1.4. Κατανεμημένο Λειτουργικό Σύστημα. Για να παρέχεται η εικόνα ενός ενιαίου συστήματος, το ΚΛΣ πρέπει να παρέχει ακριβώς τις ίδιες κλήσεις του πυρήνα σε όλες τις μηχανές και να υποστηρίζει τους ίδιους μηχανισμούς επικοινωνίας διεργασιών σε όλους τους επεξεργαστές του συστήματος, ανεξάρτητα από το αν οι διεργασίες εκτελούνται στην ίδια ή σε διαφορετικές μηχανές. Επίσης, πρέπει να παρέχει μια καθολική εικόνα όλων των πόρων του, για παράδειγμα ένα και μοναδικό καθολικό σύστημα αρχείων, καθώς και ένα και μοναδικό καθολικό μηχανισμό προστασίας. Για να ικανοποιούνται οι παραπάνω απαιτήσεις, οι πυρήνες που εκτελούνται σε όλες τις μηχανές του συστήματος πρέπει να παρέχουν ακριβώς την ίδια διεπαφή (interface) κλήσεων του συστήματος και να συντονίζονται για ορισμένες εργασίες. Για παράδειγμα, όταν μια διεργασία χρειάζεται να αρχίσει την εκτέλεσή της, όλοι οι πυρήνες πρέπει να συνεργαστούν προκειμένου να βρεθεί ο καταλληλότερος επεξεργαστής για να την εκτελέσει. Παρόλα αυτά, κάθε πυρήνας μπορεί να ασκεί σημαντικό έλεγχο στους δικούς του πόρους. Για παράδειγμα, εφόσον δεν υπάρχει κοινή μνήμη, είναι λογικό κάθε πυρήνας να διαχειρίζεται τη δική του φυσική μνήμη, δηλαδή να αποφασίζει ποια τεμάχια θα αντικαταστήσει, πότε και ποια θα προσκομίσει στη μνήμη και πού ακριβώς θα τα τοποθετήσει (βλ. Τόμο II, Κεφ. 8). 1.1.4. Ενδιάμεσο λογισμικό κατανεμημένων συστημάτων Αν και τα ΚΛΣ παρέχουν την εικόνα ενός ενιαίου συστήματος που αποτελείται από ανεξάρτητους υπολογιστές, οι προσπάθειες ανάπτυξης ΚΛΣ κατά τη δεκαετία του 1990 είχαν περιορισμένη επιτυχία, σε αντίθεση με την τεράστια επιτυχία των

Κεφάλαιο 1: Εισαγωγή 29 ΛΣΔ που ουσιαστικά αντικατέστησαν πλήρως τα απλά λειτουργικά συστήματα ενός επεξεργαστή μέσα στην ίδια δεκαετία. Για παράδειγμα, όλα τα σύγχρονα λειτουργικά συστήματα έχουν δυνατότητες καταμερισμού αρχείων και εκτυπωτών, δηλαδή καλύπτουν τη βασική λειτουργικότητα των παλιότερων ΛΣΔ. Οι λόγοι της περιορισμένης επιτυχίας των ΚΛΣ σε σχέση με τα ΛΣΔ είναι πολλοί. Αρχικά, η απαίτηση το σύστημα να είναι ομοιογενές σημαίνει ότι χρειαζόμαστε πολλές πανομοιότυπες μηχανές, σε αντίθεση με τα ΛΣΔ που λειτουργούν με οποιοδήποτε διαθέσιμο υλισμικό. Ιδιαίτερα προβληματική είναι η απαίτηση όλες οι μηχανές να εκτελούν το ίδιο λειτουργικό σύστημα, το οποίο σε πολλές περιπτώσεις μπορεί να μη συμβαδίζει με τις ανάγκες ή τις προτιμήσεις των χρηστών. Αντίθετα, ένα ΛΣΔ απαιτεί μόνο προσθήκες σε υπάρχοντα λειτουργικά συστήματα, κάτι που διευκολύνει την αποδοχή του. Ένα άλλο πρόβλημα είναι ότι το ΚΛΣ απαιτεί από τους χρήστες να παραδώσουν κατά ένα μέρος τον έλεγχο των μηχανών τους σε αυτό, με αποτέλεσμα να χάνουν την αυτονομία τους και πιθανόν και την ασφάλειά τους. Σε ένα σύστημα πολυ-υπολογιστή ειδικά κατασκευασμένο για την εκτέλεση απαιτητικών εφαρμογών, η δυνατότητα να χρησιμοποιούνται όλοι οι πόροι χωρίς περιορισμούς είναι απαραίτητη. Όμως, σε ένα τοπικό δίκτυο με σταθμούς εργασίας, οι χρήστες διστάζουν να επιτρέψουν σε οποιονδήποτε χρήστη να χρησιμοποιεί τους πόρους τους σε βάρος της επίδοσης των δικών τους εφαρμογών. Παρότι οι περισσότεροι χρήστες μπορεί να μην ενδιαφέρονται για ένα πλήρως κατανεμημένο σύστημα, ειδικά αν αυτό απαιτεί να θυσιάσουν την αυτονομία τους, συχνά ενδιαφέρονται για συγκεκριμένες εφαρμογές που απαιτούν κατανεμημένη επεξεργασία. Για παράδειγμα, τα κατανεμημένα συστήματα αρχείων, τα οποία α- ντιπροσωπεύουν ένα πραγματικά κατανεμημένο μοντέλο εργασίας, είναι μέρος όλων των σύγχρονων λειτουργικών συστημάτων. Ο λόγος είναι ότι καλύπτουν πραγματικές ανάγκες: εύκολη ανταλλαγή αρχείων, προσπέλαση αρχείων από ο- ποιονδήποτε σταθμό εργασίας και αυξημένη αξιοπιστία λόγω χρήσης ειδικού υλισμικού για τους εξυπηρετητές. Τα κατανεμημένα συστήματα αρχείων προκύπτουν από ΛΣΔ με την προσθήκη ενός επιπέδου ενδιάμεσου λογισμικού (middleware) το οποίο αξιοποιεί τις βασικές υπηρεσίες ενός ΛΣΔ για να παρέχει υποστήριξη σε κατανεμημένες εφαρμογές. Τέτοιο ακριβώς ενδιάμεσο λογισμικό είναι η βάση των σύγχρονων κατανεμημένων συστημάτων. Όπως φαίνεται στο Σχήμα 1.5, το ενδιάμεσο λογισμικό εκτελείται επάνω από το ΛΣΔ κάθε μηχανής και έτσι παρέχει μια σειρά από υπηρεσίες υψη-

30 Κατανεμημένα Συστήματα με Java λού επιπέδου στις κατανεμημένες εφαρμογές. Ο βασικός έλεγχος κάθε μηχανής γίνεται από το τοπικό ΛΣΔ, προκειμένου κάθε μηχανή να έχει την αυτονομία της. Οι μηχανές μπορεί να είναι ετερογενείς και από πλευράς υλισμικού και από πλευράς λογισμικού, αρκεί να υποστηρίζουν ένα βασικό σύνολο υπηρεσιών που απαιτούνται από το ενδιάμεσο λογισμικό. Το ενδιάμεσο λογισμικό, αντί να παρέχει μια ολοκληρωμένη εικόνα ενός ενιαίου συστήματος, παρέχει ένα περιορισμένο μοντέλο κατανεμημένης επεξεργασίας κατάλληλο για συγκεκριμένες εφαρμογές. Για παράδειγμα, ένα απλό μοντέλο είναι οι κλήσεις απομακρυσμένων διαδικασιών (remote procedure calls, RPC), με τις οποίες μια διεργασία σε μία μηχανή μπορεί να καλεί μια διαδικασία σε μια α- πομακρυσμένη μηχανή με τον ίδιο ακριβώς τρόπο που θα καλούσε μια τοπική διαδικασία. Στο μοντέλο αυτό, το ενδιάμεσο λογισμικό αποκρύπτει πού βρίσκεται κάθε διαδικασία, αλλά δεν κατανέμει τις διαδικασίες στους διαθέσιμους επεξεργαστές. Επέκταση της προσέγγισης αυτής είναι η κλήση απομακρυσμένων μεθόδων (remote method invocation, RMI) στην οποία η κλήση των μεθόδων ενός απομακρυσμένου αντικειμένου δεν διαφέρει από την κλήση των μεθόδων ενός τοπικού αντικειμένου. Και σε αυτή την περίπτωση η κατανομή των αντικειμένων σε μηχανές δεν καθορίζεται από το ενδιάμεσο λογισμικό που υποστηρίζει τις απομακρυσμένες κλήσεις. Οι ακριβείς υπηρεσίες που παρέχονται από το ενδιάμεσο λογισμικό εξαρτώνται από το μοντέλο κατανεμημένης επεξεργασίας που υποστηρίζει και το βαθμό στον Εφαρμογή Εφαρμογή Εφαρμογή Ενδιάμεσο Λογισμικό ΛΣ 1 ΛΣ 2 ΛΣ 3 Επεξεργαστής 1 Επεξεργαστής 2 Επεξεργαστής 3 Δίκτυο Σχήμα 1.5. Ενδιάμεσο λογισμικό κατανεμημένου συστήματος.

Κεφάλαιο 1: Εισαγωγή 31 οποίο προσπαθεί να προσεγγίσει την εικόνα ενός ενιαίου συστήματος. Σε γενικές γραμμές, το ενδιάμεσο λογισμικό πρέπει να παρέχει υπηρεσίες επικοινωνίας υψηλού επιπέδου, όπως κλήση απομακρυσμένων μεθόδων, υπηρεσίες ονομασίας οι οποίες θα υποστηρίζουν έναν κοινό χώρο ονομάτων για τους πόρους ολόκληρου του συστήματος και υπηρεσίες ασφάλειας, προκειμένου να περιφρουρούνται οι πόροι κάθε μηχανής. Άλλες υπηρεσίες που μπορεί να παρέχονται, αν απαιτούνται, είναι υπηρεσίες συγχρονισμού διεργασιών, υπηρεσίες κλειδώματος πόρων και υ- πηρεσίες κατανεμημένων συναλλαγών. 1.2. Στόχοι κατανεμημένων συστημάτων Οι υπηρεσίες που παρέχουν τα κατανεμημένα συστήματα είναι παρόμοιες με αυτές που παρέχονται από τα ΛΣΔ, αλλά υποστηρίζουν ένα υψηλότερο επίπεδο αφαίρεσης προκειμένου να διευκολύνουν τον προγραμματισμό κατανεμημένων εφαρμογών. Ο βασικός στόχος των υπηρεσιών αυτών είναι η σύνδεση των χρηστών με τους διαθέσιμους πόρους, οπουδήποτε και αν βρίσκονται αυτοί στο σύστημα. Σε ορισμένες περιπτώσεις, η σύνδεση αυτή έχει οικονομικά οφέλη για παράδειγμα, όταν ένας ακριβός εκτυπωτής διατίθεται σε ένα ολόκληρο τμήμα ή ένας υπερυπολογιστής διατίθεται για απομακρυσμένη εκτέλεση εφαρμογών. Σε άλλες περιπτώσεις, η σύνδεση χρησιμεύει για την ανάπτυξη εφαρμογών που διευκολύνουν τη συνεργασία των χρηστών για την επίτευξη ενός κοινού στόχου για παράδειγμα, για τη συγγραφή μιας έκθεσης από πολλά άτομα ή την επεξεργασία μιας παραγγελίας από μια σειρά τμημάτων μιας επιχείρησης. Για να παρέχονται οι υπηρεσίες αυτές με ομοιογενή τρόπο, το κατανεμημένο σύστημα πρέπει να δίνει στον προγραμματιστή και το χρήστη την εικόνα ενός ε- νιαίου συστήματος, τουλάχιστον στο βαθμό που κάτι τέτοιο απαιτείται από τις ε- φαρμογές. Έτσι, ανεξάρτητα από το μοντέλο κατανεμημένης επεξεργασίας που υποστηρίζει ένα κατανεμημένο σύστημα, υπάρχουν ορισμένες αρχές σχεδίασης που θέλουμε να ακολουθούνται σε κάθε περίπτωση. Ευελιξία (flexibility), δηλαδή ευκολία αλλαγής ή επέκτασης του συστήματος από τους σχεδιαστές ή τους προγραμματιστές του. Είναι φανερό ότι ένα σύστημα με μονολιθικό πυρήνα είναι λιγότερο ευέλικτο από ένα στρωματοποιημένο σύστημα που διαθέτει έναν ελάχιστο πυρήνα (βλ. Τόμο II, Κεφ. 4.2). Η χρήση ενδιάμεσου λογισμικού για την κατασκευή κατανεμημένων συστημάτων είναι μία κοινή τεχνική αύξησης της ευελιξίας.