Ζητήματα Σχεδίασης Λογισμικού Εξυπηρετητή

Σχετικά έγγραφα
ΗY335: Δίκτυα Υπολογιστών Χειμερινό Εξάμηνο Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Διδάσκουσα: Μαρία Παπαδοπούλη

Προγραμματισμός με BSD Sockets σε περιβάλλον Linux

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

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

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

(C) 2010 Pearson Education, Inc. All rights reserved.

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

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

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

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

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

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

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

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

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

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

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

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

ΚΕΦΑΛΑΙΟ 10. Δικτυακός προγραμματισμός Εισαγωγή

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

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

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

Τρίτη Πρόοδος [110 μονάδες] Απαντήσεις

Επίπεδο Μεταφοράς. (ανεβαίνουμε προς τα πάνω) Εργαστήριο Δικτύων Υπολογιστών Τμήμα Μηχανικών Η/Υ και Πληροφορικής

Web and HTTP. Βασικά Συστατικά: Web Server Web Browser HTTP Protocol

Ζητήματα Σχεδίασης Λογισμικού Πελάτη

Υποδοχείς (Sockets) Προγραμματισμός II 1

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

Δικτυακός Προγραμματισμός (Sockets Programming) Εργαστήριο Γ Εξάμηνο, Τμήμα Πληροφορικής Πανεπιστήμιο Θεσσαλίας

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

Διαφορές single-processor αρχιτεκτονικών και SoCs

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

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

Εργαστήριο Λειτουργικών Συστήματων 8ο εξάμηνο, Ακαδημαϊκή περίοδος

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

Προγραμματισμός συστημάτων UNIX/POSIX

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

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος

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

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

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

Ατομική Διπλωματική Εργασία ΕΠΕΚΤΑΣΗ ΚΑΤΑΝΕΜΗΜΕΝΟΥ ΣΥΣΤΗΜΑΤΟΣ ΑΡΧΕΙΩΝ ΚΑΙ ΔΗΜΙΟΥΡΓΙΑ ΔΙΕΠΑΦΗΣ ΧΡΗΣΤΗ. Σωτήρης Σωτηρίου ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ

Εξοικείωση με τις εντολές ipconfig και ping

50 Ketseo,Theoni Sarif,Omar 104

CloudBox!: Ένα εργαλείο cloud αποθήκευσης αρχείων με κατανεμημένο τρόπο

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

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

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

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

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος

Εργαστήριο Λειτουργικών Συστημάτων 8ο εξάμηνο, Ακαδημαϊκή περίοδος

Αρχές Δικτύων Επικοινωνιών. Επικοινωνίες Δεδομένων Μάθημα 4 ο

1. Εισαγωγή. Λειτουργικά Συστήματα Η/Υ. Διεργασίες. Ορισμός ΚΕΦΑΛΑΙΟ 3 - ΔΙΕΡΓΑΣΙΕΣ. Κεφάλαιο 3 «Διεργασίες»

ΙΚΤΥΑ ΕΠΙΚΟΙΝΩΝΙΩΝ Ασκήσεις για το φυσικό στρώμα. λ από τον ρυθμό μετάδοσής της. Υποθέτοντας ότι ο κόμβος A

Υποστήριξη Λ.Σ. ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

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

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

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

A. Να γράψετε τον αριθμό της κάθε μιας από τις παρακάτω προτάσεις και δίπλα. το γράμμα Σ, εάν είναι σωστή, ή το γράμμα Λ, εάν είναι λανθασμένη.

Διάλεξη 14: Ατομική ΚΚΜ Εγγραφής/Ανάγνωσης στην Παρουσία Σφαλμάτων. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

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

Διάλεξη 13: Κατανεμημένη Κοινόχρηστη Μνήμη. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Η γλώσσα προγραμματισμού C

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

Λειτουργικά Συστήματα Πραγματικού Χρόνου

Ένα αφαιρετικό πραγματικού χρόνου μοντέλο λειτουργικού συστήματος για MPSoC

10. Με πόσους και ποιους τρόπους μπορεί να αναπαρασταθεί ένα πρόβλημα; 11. Περιγράψτε τα τρία στάδια αντιμετώπισης ενός προβλήματος.

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

ιαδικτυακές Εφαρµογές

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

Εργαλεία ανάπτυξης εφαρμογών internet Ι

Δίκτυα Επικοινωνιών ΙΙ: Transmission Control Protocol

HY-335a Project: microtcp *, μία lightweight TCP βιβλιοθήκη

Χρονοδρομολογητής Κυκλικής Επαναφοράς

Διάλεξη 1: Εισαγωγή στον Κατανεμημένο Υπολογισμό. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Διάλεξη 8: Πρόβλημα Αμοιβαίου Αποκλεισμού. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

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

Δομημένος Προγραμματισμός

Διεργασίες και Νήματα (2/2)

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

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 4 - Editor

Κατανεμημένα Συστήματα. Javascript LCR example

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ

Διάλεξη 10: Αλγόριθμοι Αμοιβαίου Αποκλεισμού σε περιβάλλον ανταλλαγής μηνυμάτων. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

ΔΙΑΧΕΙΡΙΣΗ ΜΝΗΜΗΣ. Λειτουργικά Συστήματα Ι. Διδάσκων: Καθ. Κ. Λαμπρινουδάκης ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Ι

Διάλεξη 12: Διάχυση Μηνυμάτων. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

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

Προγραμματισμός Ι. Είσοδος/Έξοδος. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

ΤΕΙ Κρήτης, Παράρτηµα Χανίων

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ

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

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

Εγχειρίδιο Συναρτήσεων. Socket *sopen(const int type, const int protocol, const char *host, const char *service)

Improving the performance of TCP in the case of packet reordering. Στρατάκη Μαρία

Ιεραρχία Μνήμης. Εικονική μνήμη (virtual memory) Επεκτείνοντας την Ιεραρχία Μνήμης. Εικονική Μνήμη. Μ.Στεφανιδάκης

Ανάπτυξη και Σχεδίαση Λογισμικού

$./jms console -w <jms in> -r <jms out> -o <operations file> namedpipe. (standard input).

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

Transcript:

Ζητήματα Σχεδίασης Λογισμικού Εξυπηρετητή Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 1

Ταυτόχρονοι και Επαναληπτικοί Εξυπηρετητές Επαναληπτικός εξυπηρετητής: επεξεργάζεται μόνο μία αίτηση τη φορά. Ταυτόχρονος εξυπηρετητής: επεξεργάζεται παραπάνω από μία αιτήσεις τη φορά Δημιουργεί πολλαπλά νήματα καθένα από τα οποία χειρίζεται μία αίτηση. Μπορούν να υπάρξουν και άλλες «ταυτοχρονικές» λύσεις που εξαρτώνται από το πρωτόκολλο εφαρμογής. Οι περισσότεροι προγραμματιστές επιλέγουν ταυτόχρονους εξυπηρετητές. Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 2

Σημασιολογία TCP Επικοινωνία από άκρο σε άκρο Εγκατάσταση αξιόπιστης σύνδεσης Αξιόπιστη παράδοση Μεταφορά ελεγχόμενη από τη ροή Πλήρως αμφίδρομη φορά Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 3

Σημασιολογία UDP Επικοινωνία πολλά προς πολλά Επιτρέπει την εκμετάλλευση μεθόδων broadcast και multicast Μη αξιόπιστη υπηρεσία Έλλειψη ελέγχου ροής Παράδειγμα μηνύματος Παραδίδει ένα μόνο μήνυμα τη φορά, δηλώνοντας από την αρχή των αριθμό των bytes που θα σταλούν Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 4

Εξυπηρετητής connection - oriented Αναμετάδοση χαμένων δεδομένων Επαλήθευση ότι τα δεδομένα έφθασαν χωρίς λάθη Τοποθέτηση των πακέτων στη σωστή σειρά Ενημέρωση για κλείσιμο σύνδεσης Απαίτηση ξεχωριστής socket για κάθε αίτηση Το TCP δεν αποστέλλει δεδομένα μέσα από μια αδρανή σύνδεση Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 5

Εξυπηρετητής connectionless Δεν υπάρχει θέμα εξάντλησης των πόρων Η αξιοπιστία της σύνδεσης πρέπει να αναληφθεί από τον ένα εκ των δύο Εάν ο εξυπηρετητής χρειάζεται να διαιρέσει την απάντηση σε πολλαπλά πακέτα, τότε μπορεί να χρειαστεί την υλοποίηση ενός μηχανισμού επαναμέταδοσης πακέτων Υπάρχει χρονικό περιθώριο αναμονής (timeout) Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 6

hash(ip addr, port) Προσωρινή αποθήκευση για το αρχείο Υ ξεκινάει στο byte 1024 Βελτιστοποίηση stateless εξυπηρετητών Όνομα Αρχείου: Χ Θέση: 512 Δείκτης προσωρινής αποθήκευσης: Όνομα Αρχείου: Υ Θέση: 1024 Δείκτης προσωρινής αποθήκευσης: Πίνακας πληροφοριών για τα αρχεία που χρησιμοποιούν οι πελάτες Προσωρινή αποθήκευση για το αρχείο Χ ξεκινάει στο byte 512 Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 7

Βελτιστοποίηση stateless εξυπηρετητών (2) Χρήση πληροφοριών για τα αρχεία που χρησιμοποιούν οι πελάτες Σύγκριση σε κάθε αίτηση αν το αρχείο που χρησιμοποιεί ο πελάτης είναι το ίδιο και της θέσης των δεδομένων Τι συμβαίνει όταν ένας πελάτης «κρεμάσει» και κάνει νέα αίτηση; Μήπως ο εξυπηρετητής δημιουργήσει νέα εγγραφή στον πίνακα πληροφοριών; Χρήση πίνακα σταθερού μεγέθους και αντικατάσταση των παλιών εγγραφών από νέες με ένα αλγόριθμο (π.χ. LRU) Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 8

Βασικοί τύποι εξυπηρετητών Επαναληπτικοί χωρίς σύνδεση Επαναληπτικοί με σύνδεση Ταυτόχρονοι χωρίς σύνδεση Ταυτόχρονοι με σύνδεση Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 9

Χρόνος Επεξεργασίας της Αίτησης Χρόνος επεξεργασίας αίτησης: ο συνολικός χρόνος που χρειάζεται ο εξυπηρετητής για να χειριστεί μια αίτηση Αντιληπτός χρόνος απόκρισης: η συνολική καθυστέρηση μεταξύ του χρόνου αποστολής και του χρόνου στον οποίο αποκρίνεται ο εξυπηρετητής Μέσος αντιληπτός χρόνος απόκρισης για ένα επαναληπτικό εξυπηρετητή: Ν/2+1, όπου Ν το μέσο μήκος της ουράς Οι επαναληπτικοί εξυπηρετητές περιορίζουν το Ν σε μικρό ακέραιο αριθμό (π.χ. 5) Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 10

Επαναληπτικοί εξυπηρετητές Ο επαναληπτικός εξυπηρετητής είναι πιο εύκολος στο σχεδιασμό, τον προγραμματισμό, την αποσφαλμάτωση και την τροποποίηση Είναι κατάλληλοι μόνο για τα πιο απλά πρωτόκολλα εφαρμογών γιατί αναγκάζουν τους πελάτες να περιμένουν στην ουρά. Ένας εξυπηρετητής που δέχεται Κ πελάτες, εκ των οποίων ο καθένας στέλνει R αιτήσεις το δευτερόλεπτο, δεν μπορεί να έχει χρόνο επεξεργασίας λιγότερο από 1/KR, αλλιώς υπερχειλίζει. Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 11

Αλγόριθμος επαναληπτικού εξυπηρετητή με σύνδεση 1. Δημιούργησε μια υποδοχή και δέσμευσέ την στην προκαθορισμένη διεύθυνση για την υπηρεσία 2. Θέσε την υποδοχή σε κατάσταση παθητικής λειτουργίας 3. Αποδέξου την επόμενη αίτηση για σύνδεση και απόκτησε μία νέα υποδοχή για τη σύνδεση 4. Διάβασε επαναληπτικά αιτήσεις πελατών, σχημάτισε μια απάντηση και στείλε τη πίσω στον πελάτη 5. Όταν τελειώσεις με τον πελάτη κλείσε τη σύνδεση και πήγαινε στο βήμα 3 Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 12

Δέσμευση Υποδοχής στη Διεύθυνση Αναμονής (bind()) retcode = bind ( socket, localaddr, addrlen ); socket int Περιγραφέας υποδοχής που δημιουργείται από τη socket() localaddr &sockaddr Η διεύθυνση μιας δομής που προσδιορίζει μια διεύθυνση IP και τον αριθμό θύρας πρωτοκόλλου addrlen int Μέγεθος του δεύτερου ορίσματος σε bytes Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 13

Δέσμευση με χρήση της INADDR_ANY INADDR_ANY: Μπορεί να χρησιμοποιηθεί στη θέση μιας IP διεύθυνσης. Καθορίζει μια γενική διεύθυνση η οποία ταιριάζει με καθεμία από τις διευθύνσεις IP του κόμβου. Έτσι μπορεί ένας κόμβος να διαθέτει περισσότερες της μιας IP διευθύνσεις. Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 14

Τοποθέτηση υποδοχής σε παθητική κατάσταση retcode = listen( socket, queuelen ); socket int Ένας περιγραφέας υποδοχής που έχει δημιουργηθεί από την κλήση socket() queuelen int Το μέγεθος της ουράς των εισερχόμενων αιτήσεων σύνδεσης (εξορισμού 5) Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 15

accept() I int accept( int s, struct sockaddr *addr, socklen_t *addrlen ); Η accept() δέχεται ως ορίσματα: την υποδοχή που αναμένει για αιτήσεις σύνδεσης μια δομή διεύθυνσης που συμπληρώνει με τα στοιχεία του πελάτη τη διεύθυνση ακεραίου (socklen_t) που: αρχικά έχει το μέγεθος της δομής διεύθυνσης στην επιστροφή έχει το μέγεθος που χρησιμοποιήθηκε Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 16

accept() II int accept(int s, struct sockaddr *addr, socklen_t *addrlen); Επιστρέφει μια νέα υποδοχή! Η αρχική συνεχίζει να χρησιμοποιείται για την αναμονή αιτήσεων και τη δημιουργία συνδέσεων Η νέα χρησιμοποιείται για την ανταλλαγή δεδομένων για τη συγκεκριμένη σύνδεση Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 17

accept() ΙII Από την στιγμή που η accept() επιστρέφει τη νέα υποδοχή, η σύνδεση µε τον πελάτη έχει εγκατασταθεί Μέχρι να ξανακληθεί η accept(), o εξυπηρετητής δεν ικανοποιεί αιτήσεις Οι κλήσεις που γίνονται όσο ο εξυπηρετητής δεν βρίσκεται στην accept() τοποθετούνται σε μια ουρά (εξορισμού μεγέθους 5 μπορεί να αλλάξει µε την listen()) Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 18

Αλγόριθμος επαναληπτικού εξυπηρετητή χωρίς σύνδεση 1. Δημιούργησε μια υποδοχή και δέσμευσέ την στην προκαθορισμένη θύρα για την υπηρεσία 2. Διάβασε επαναληπτικά αιτήσεις πελατών, σχημάτισε μια απάντηση και στείλε τη πίσω στον πελάτη Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 19

Γιατί Ταυτόχρονοι Εξυπηρετητές; Κατασκευάζονται για να μειωθούν οι χρόνοι απόκρισης. Μείωση στο χρόνο απόκρισης μπορούμε να έχουμε εφόσον: Ο σχηματισμός μιας απάντησης απαιτεί σημαντική Ε/Ε. Ο χρόνος επεξεργασίας που απαιτείται διαφέρει αρκετά από αίτηση σε αίτηση. Ο εξυπηρετητής εκτελείται σε υπολογιστικό σύστημα με πολλούς επεξεργαστές. Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 20

Masters και Slaves Χρησιμοποιούνται πολλαπλά νήματα επεξεργασίας. Ένα master νήμα ξεκινά να εκτελείται. Για κάθε νέα αίτηση, το master νήμα δημιουργεί ένα slave νήμα, πιθανώς σε νέα διεργασία. Το slave νήμα αφού εξυπηρετήσει τον πελάτη, τερματίζει Το master νήμα δεν επικοινωνεί ποτέ απ ευθείας με πελάτη, η ανάθεση γίνεται σε νήμα slave. Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 21

Αλγόριθμος ταυτόχρονου εξυπηρετητή χωρίς σύνδεση Master νήμα 1. Δημιούργησε μια μη συνδεδεμένη υποδοχή και δέσμευσέ την στην προκαθορισμένη διεύθυνση για την υπηρεσία 2. Επαναληπτικά κάλεσε τη recvfrom για να λάβεις την επόμενη αίτηση πελάτη και δημιούργησε ένα slave νήμα για το χειρισμό της (ίσως και σε νέα διεργασία) Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 22

Αλγόριθμος ταυτόχρονου εξυπηρετητή χωρίς σύνδεση 2 Slave νήμα 1. Ξεκίνησε με μια καθορισμένη αίτηση από το master νήμα, καθώς και με πρόσβαση στην υποδοχή 2. Σχημάτισε μια απάντηση σύμφωνα με το πρωτόκολλο εφαρμογής και στείλε τη στον πελάτη με τη sendto. 3. Τερμάτισε μετά το τέλος της αίτησης. Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 23

Master νήμα Αλγόριθμος ταυτόχρονου εξυπηρετητή με σύνδεση 1. Δημιούργησε μια υποδοχή και δέσμευσέ την στην προκαθορισμένη διεύθυνση για την υπηρεσία 2. Τοποθέτησε την υποδοχή σε παθητική κατάσταση 3. Κάλεσε επαναληπτικά την accept για να λάβεις την επόμενη αίτηση από ένα πελάτη και δημιούργησε ένα νήμα slave για να τη χειριστεί. Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 24

Slave νήμα Αλγόριθμος ταυτόχρονου εξυπηρετητή με σύνδεση 2 1. Ξεκίνησε με τη σύνδεση που προήλθε από το master νήμα. 2. Αλληλεπίδρασε με τον πελάτη χρησιμοποιώντας τη σύνδεση: διάβασε την/τις αίτηση(σεις) και στείλε πίσω απάντηση(σεις). 3. Κλείσε τη σύνδεση και τερμάτισε. Το slave νήμα τερματίζει, αφού εξυπηρετήσει όλες τις αιτήσεις του πελάτη. Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 25

Linux Υλοποιήσεις Ταυτοχρονισμού Εξυπηρετητών 1. Δημιουργία από τον εξυπηρετητή πολλαπλών διεργασιών, η καθεμία από τις οποίες περιέχει ένα απλό νήμα που εκτελείται. 2. Δημιουργία από τον εξυπηρετητή πολλαπλών νημάτων που εκτελούνται σε μία διεργασία Σε κάποιες περιπτώσεις είναι προτιμότερο η slave διεργασία/νήμα να εκτελέσει τον κώδικα από ένα ανεξάρτητο πρόγραμμα με κλήση exec Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 26

Εικονική ταυτόχρονη επεξεργασία με χρήση ενός νήματος Συμβαίνει όταν το λειτουργικό σύστημα κάνει τη δημιουργία νέων διεργασιών ή νημάτων πολύ ακριβή. Μερικά πρωτόκολλα εφαρμογών απαιτούν από τον εξυπηρετητή να κατανέμει πληροφορίες μεταξύ όλων των συνδέσεων Παράδειγμα: X Windows Server Χρησιμοποιεί ένα διαμοιραζόμενο συνεχόμενο τμήμα μνήμης που ονομάζεται display buffer Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 27

Η συνάρτηση select int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *errorfds, struct timeval *timeout); nfds the maximum file descriptor across all the sets, plus 1 readfds writefds errorfds timeout fd_set type holding the file descriptors to be checked for being ready to read, and on output indicates which file descriptors are ready to read. Can be NULL. fd_set type holding the file descriptors to be checked for being ready to write, and on output indicates which file descriptors are ready to write. Can be NULL. fd_set type holding the file descriptors to be checked for error conditions pending, and on output indicates which file descriptors have error conditions pending. Can be NULL. structure of type struct timeval that specifies a maximum interval to wait for the selection to complete. If the timeout argument points to an object of type struct timeval whose members are 0, select() does not block. If the timeout argument is NULL, select() blocks until an event causes one of the masks to be returned with a valid (non-zero) value. Linux will update the timeout in place to indicate how much time was elapsed, though this behavior is not shared by most other Unix systems. Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 28

Αλγόριθμος μονονηματικού εξυπηρετητή με πολλές ταυτόχρονες συνδέσεις 1. Δημιούργησε μια υποδοχή και δέσμευσέ την στην προκαθορισμένη θύρα για την υπηρεσία. Πρόσθεσε την υποδοχή στη λίστα αυτών από τις οποίες είναι δυνατή η Ε/Ε 2. Χρησιμοποίησε τη select για αναμονή για Ε/Ε στις υπάρχουσες υποδοχές 3. Αν η αρχική υποδοχή είναι έτοιμη, χρησιμοποίησε την accept για να λάβεις την επόμενη σύνδεση, και πρόσθεσε τη νέα υποδοχή στη λίστα αυτών από τις οποίες είναι δυνατή η Ε/Ε. 4. Αν κάποια υποδοχή, εκτός από την αρχική, είναι έτοιμη χρησιμοποίησε τη read ή τη recv για να λάβεις την επόμενη αίτηση, σχημάτισε μία απάντηση και στείλε τη με τη send ή τη write στον πελάτη 5. Συνέχισε από το βήμα 2 Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 29

Σύγκριση επαναληπτικού και ταυτόχρονου εξυπηρετητή Επαναληπτικός εξυπηρετητής Πιο εύκολος στη σχεδίαση, την υλοποίηση και τη συντήρηση Ταυτόχρονος εξυπηρετητής Προσφέρει πιο γρήγορες απαντήσεις στις αιτήσεις των πελατών Αν ο χρόνος επεξεργασίας της αίτησης είναι μικρός χρησιμοποιούμε επαναληπτική υλοποίηση Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 30

Πραγματική έναντι εικονικής ταυτόχρονης επεξεργασίας Μονονηματικός εξυπηρετητής: βασίζεται στην ασύγχρονη Ε/Ε, ώστε να μπορεί να διαχειρίζεται πολλαπλές συνδέσεις Πολυνηματική υλοποίηση (με πολλαπλές μονονηματικές διεργασίες ή με μία πολυνηματική διεργασία): προσφέρει αυτόματα ταυτόχρονη επεξεργασία Εάν το κόστος για τη δημιουργία ή την εναλλαγή των νημάτων είναι μεγάλο χρησιμοποιούμε μονονηματικές λύσεις. Αλλιώς πολυνηματικές λύσεις Αν κάθε slave νήμα μπορεί να λειτουργήσει και απομονωμένο ή για να επιτευχθεί η μέγιστη δυνατή ταυτόχρονη επεξεργασία προτιμάμε πολυδιεργασικές λύσεις. Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 31

Εξυπηρετητής με σύνδεση έναντι εξυπηρετητή χωρίς σύνδεση Αν έχουμε τοπικό δίκτυο που η απώλεια δεδομένων είναι πολύ μικρή και τα πακέτα δεν αλλάζουν σειρά χρησιμοποιούμε εξυπηρετητή χωρίς σύνδεση Αν το πρωτόκολλο εφαρμογής μπορεί να χειριστεί το θέμα της αξιοπιστίας χρησιμοποιούμε εξυπηρετητή χωρίς σύνδεση Εάν έχουμε δίκτυο ευρείας περιοχής τότε χρησιμοποιούμε εξυπηρετητή με σύνδεση Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 32

Αδιέξοδα σε ένα εξυπηρετητή Ένας πελάτης που λειτουργεί εσφαλμένα μπορεί να προκαλέσει αδιέξοδο σε ένα μονονηματικό εξυπηρετητή Σε ένα ταυτοχρονικό εξυπηρετητή με πολλαπλά νήματα μόνο το slave νήμα θα μπλοκαριστεί από τον εσφαλμένο πελάτη Διαδικτυακός και Ταυτόχρονος Προγραμματισμός 33