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

Σχετικά έγγραφα
4 η ιάλεξη: Signals UDP Sockets

Δικτυακός προγραμματισμός

Προγραμματισμός συστημάτων UNIX/POSIX. Σήματα (signals)

Ντίρλης Νικόλαος- ΕΤΥ 2 ο Φροντιστήριο Παρασκευή, 18/10/2013 Β4. Λειτουργικά Συστήματα- Φροντιστήριο 2

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

Εργαστήριο Δικτύων Υπολογιστών

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

Εργαστήριο 7 fork(), exec(), signals

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

Εργαστήριο 5 fork(), exec(), signals

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

Διαχείριση Διεργασιών και Διαδιεργασιακή Επικοινωνία

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

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

Θέτοντας και επιστρέφοντας την τιµή της προτεραιότητας διεργασίας

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

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

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

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

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

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

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής

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

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

HY-335a Project: microtcp, μία lightweight TCP βιβλιοθήκη. Deadline πρώτης ϕάσης : 19/11/ :59

Διαχείριση Διεργασιών και Διαδιεργασιακή Επικοινωνία

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

Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ

UNIX System Programming

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

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

Παράλληλη Επεξεργασία

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

Εργαστήριο Δικτύων Υπολογιστών

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

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

Προγραμματισμός συστημάτων UNIX/POSIX. Διεργασίες (processes)

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

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

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

Δίκτυα Υπολογιστών. Το επίπεδο εφαρμογής (application layer) Κ. Βασιλάκης

Δίκτυα Υπολογιστών. Το επίπεδο εφαρμογής (application layer) Κ. Βασιλάκης

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

Δίκτυα Επικοινωνιών ΙΙ: Network Programming Εισαγωγή, TCP, UDP, Ports

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

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

Περιγραφή και Έλεγχος ιεργασιών

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

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

Σήματα (Signals) Προγραμματισμός II 1

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

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

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

Τµήµα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Σεπτέµβριος 2013

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

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

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

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

Λειτουργικά Συστήματα (ΗΥ-345) Χειμερινό Εξάμηνο

Εισαγωγή Επανάληψη. ΤΕΙ Στερεάς Ελλάδας. ΣT Εξάμηνο, Κατεύθυνση Μηχανικών Δικτύων Τ.Ε. Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Διαδικτυακός Προγραμματισμός

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

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

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

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

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

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

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

Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1

Σήματα (Signals) Προγραμματισμός II 1

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

Σήματα (Signals) Προγραμματισμός II 1

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

2η Εργαστηριακή Άσκηση

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

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

Εργαστήριο 14. Συγχρονισμός Νημάτων (χρήση pthread_mutex_t, pthread_cond_t)

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

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

Δίκτυα Επικοινωνιών ΙΙ: Πληροφορίες σχετικά με το μάθημα

Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1

Δίκτυα Υπολογιστών Το επίπεδο μεταφοράς (transport layer)

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

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

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

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

Άσκηση 2 η Πρωτόκολλο επικοινωνίας TCP/IP

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

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

1.2.2 Το μοντέλο δικτύωσης TCP/IP 1 / 26

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

Ουρές Μηνυμάτων (Message Queues in System V) Προγραμματισμός II 1

HTTP API v1.6 SMSBOX.GR HTTP API v

Συστήματα Παράλληλης & Κατανεμημένης Επεξεργασίας

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

Διάλεξη 14: Διεργασίες: Έλεγχος & Σήματα (Processes: Control & Signals)

Διαδικασιακός Προγραμματισμός

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

Δίκτυα Η/Υ στην Επιχείρηση

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

Transcript:

Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals Δρ. Απόστολος Γκάμας Διδάσκων 407/80 gkamas@uop.gr Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 1 1

UDP vs TCP Το UDP είναι ένα connectionless, μη αξιόπιστο, datagram transport protocol Δεν μπορεί να χειριστεί διπλά πακέτα ή πακέτα σε λάθος σειρά Δεν παρέχει flow control και congestion avoidance μηχανισμούς Έχει ελάχιστο overhead Εφαρμογές που χρησιμοποιούν το UDP: DNS, NFS, SNMP, TFTP, real-time multiplayer games, voice conferencing, broadcasting Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 2 2

UDP vs TCP (client/server) 3 UDP O client στέλνει πακέτα (datagram) στον server Τα πακέτα αποθηκεύονται σε μια ουρά και επεξεργάζονται απο τον server TCP O client επικοινωνεί με έναν «αφοσιωμένο» αντίγραφο του server, ενώ ο «αρχικός» server μπορεί να δέχεται νέες κλήσεις σύνδεσης Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 3

UDP Client/Server interaction (Datagram Communication) Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 4 4

UDP Sockets - Connectionless Server create endpoint (socket()) bind address (bind()) transfer data (sendto() recvform()) Client create endpoint (socket()) transfer data (sendto() recvform()) Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 5 5

Πρωτογενείς κλήσεις για τα sockets Οι οδηγίες (#include) που χρησιμοποιούνται για αυτές τις κλήσεις είναι οι : #include <sys/types.h> #include <sys/socket.h> Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 6 6

Η κλήση recvfrom Σύνταξη: ssize_t recvfrom (int sockfd, void *buff, size_t nbytes, int flags, struct sockaddr *from, socklen_t *addrlen); Περιμένει μέχρι να φτάσουν δεδομένα (blocking) Επιστρέφει το size των δεδόμένων (datagram) που έλαβε Στο void *buff αποθηκεύει τα δεδομένα (datagram) με μέγιστο μέγεθος nbytes Στην δομή sockaddr *from επιστρέφει την διεύθυνση του αποστολέα Δεν υπάρχει καμία σύνδεση (connection) με τον αποστολέα Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 7 7

Η κλήση sendto Σύνταξη: ssize_t sendto (int sockfd, void *buff, size_t nbytes, int flags, const struct sockaddr *to, socklen_t *addrlen); Στέλνει τα δεδομένα (datagram) που βρίσκονται στη παράμετρο void *buff με μέγεθος nbytes στον προορισμό (δηλώνεται μέσω της δομής const struct sockaddr *to) Δεν υπάρχει καμία σύνδεση (connection) με τον παραλήπτη Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 8 8

Ένας απλός UDP Server Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 9 9

Ένας απλός UDP Server Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 10 10

Ένας απλός UDP Client Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 11 11

Ένας απλός UDP Client Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 12 12

Signals Μέσω των signals μία διεργασία μπορεί να ειδοποιηθεί για διάφορα γεγονότα Τα signals ονομάζονται και software interrupts Signals μπορούν να σταλούν από μία διεργασία σε μία άλλη διεργασία ή από τον kernel σε μία διεργασία Signals μπορούν να σταλούν με την εντολή kill: Απο την γραμμή εντολών: kill sigid pid Σε ένα C πρόγραμμα: int kill(pid_t pid, int sigid); Kάθε signal έχει εξ ορισμού του μία (προ)καθορισμένη συμπεριφορά Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 13 13

Signal ids και προκαθορισμένη συμπεριφορά Signal id default SIGKILL 9 Terminate SIGALR M 14 Terminate SIGSYS 12 Core SIGCHL D 20 Ignore Όταν μια διεργασία-παιδί τερματίζεται στέλνει ένα σήμα SIGCHLD (id=20) στον πατέρα της Το σήμα αυτό αγνοείται (προκαθορισμένη συπεριφορα: ignore) Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 14 14

Καθορισμός συμπεριφοράς ενός Signal Πρωτογενείς κλήσεις: signal() και sigaction() Στο πρόγραμμα μας μπορούμε να καθορίσουμε επ ακριβώς την συμπεριφορά μίας διεργασίας, ύστερα από την λήψη ενός signal: Εκτέλεση μίας συνάρτησης (signal handler) Καμία ενέργεια (SIG_IGN) Προκαθορισμένη συμπεριφορά (SIG_DFL) Τα σήματα SIGKILL και SIGSTOP δεν μπορούν ούτε να «αγνοηθούν» (SIG_IGN) ούτε να «πιαστούν» από μία συνάρτηση (signal handler) -> εκτελείται πάντοτε η default ενέργεια Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 15 15

Οι πρωτογενείς κλήσεις για τα signals Οι οδηγίες (#include) που χρησιμοποιούνται για αυτές τις κλήσεις είναι οι : #include <signal.h> Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 16 16

Η κλήση signal Σύνταξη: signal (int sig, void (*disp)(int)); Kαθορίζει την συμπεριφορά της διεργασίας, μέσα στην οποία καλείται, ύστερα από την λήψη ενός signal sig Το όρισμα *disp ορίζει αυτή την συμπεριφορά Το *disp μπορεί να είναι η διεύθυνση του signal handler (pointer σε συνάρτηση), SIG_IGN ή SIG_DFL Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 17 17

Zombie processes Για τον σωστό τερματισμό μιας διεργασίας-παιδί πρέπει ο πατέρας να «ειδοποιηθεί» (η «ειδοποίηση» γίνεται όταν ο πατέρας εκτελέσει την πρωτογεννή κλήση wait ή waitpid) Μία διεργασία-παιδί η οποία έχει τερματιστεί και της οποίας η διεργασία-πατέρας δεν έχει λάβει ακόμα ειδοποίηση του τερματισμού της ονομάζεται zombie (defunct) διεργασία Μία zombie διεργασία υπάρχει μόνο σαν μία καταχώρηση στο process table, όπου διατηρούνται πληροφορίες σχετικά με αυτήν Μία zombie διεργασία μπορούμε να την σκοτώσουμε από την γραμμή εντολών με την εντολή kill Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 18 18

Handling zombie processes Όταν σε μία διεργασία-πατέρας κάνουμε fork (γεννάμε διεργασίες-παιδιά), θα πρέπει να καλέσουμε για τις διεργασίες-παιδιά την wait ή την waitpid, έτσι ώστε να τις εμποδίσουμε από το να γίνουν zombie processes Για το σκοπό αυτό στην διεργασία-πατέρα εγκαθιστούμε έναν signal handler στο signal SIGCHLD, και μέσα σε αυτόν τον signal handler καλούμε την wait ή την waitpid Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 19 19

Οι πρωτογενείς κλήσεις για wait, waitpid Οι οδηγίες (#include) που χρησιμοποιούνται για αυτές τις κλήσεις είναι οι : #include <sys/wait.h> Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 20 20

Η κλήση wait Σύνταξη: pid_t wait(int *statloc); Επιστρέφει το process id του τερματιζόμενου παιδιού Στον δείκτη statloc επιστρέφεται το termination status του παιδιού Η wait είναι blocking συνάρτηση Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 21 21

Η κλήση waitpid Σύνταξη: pid_t waitpid(pid_t pid, int *statloc, int options); Επιστρέφει το process id του τερματιζόμενου παιδιού Δίνεται η δυνατότητα καθορισμού, μέσω του pid, του παιδιού για το οποίο θα εκτελεστεί η συνάρτηση αυτή Στον δείκτη statloc επιστρέφεται το termination status του παιδιού Δίνεται η δυνατότητα καθορισμού επιπλέον επιλογών. Η πιο συνηθισμένη επιλογή είναι η WNOHANG, η οποία εμποδίζει την waitpid να γίνει blocked αν δεν υπάρχουν τερματιζόμενα παιδιά Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 22 22

wait vs waitpid Υποθέτουμε ότι έχουμε καθορίσει σαν signal handler για το signal SIGCHLD την συνάρτηση sig_chld (e.g. signal(sigchld, sig_chld); ) Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 23 23

wait vs waitpid Τα signals δεν αποθηκεύονται σε ουρά Με την wait υπαρχει πρόβλημα όταν δημιουργηθούν ταυτόχρονα σήματα: ο signal handler θα εκτελεστεί μια φορά και τα υπόλοιπα signals θα χαθούν Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 24 24

wait vs waitpid Υποθέτουμε ότι έχουμε καθορίσει σαν signal handler για το signal SIGCHLD την συνάρτηση sig_chld (e.g. signal(sigchld, sig_chld); ) waitpid with WHOHANG option: non blocking call Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 25 25

Handling interrupted system calls Όταν ένα blocking system call (π.χ. accept) διακοπεί από ένα signal, τότε μετά την επιστροφή από τον signal handler το system call θέτει την μεταβλητή errno ίσο με EINTR Το system call δεν είναι σίγουρο ότι θα επανακκινηθεί αυτόματα από τον kernel Για το λόγο αυτό θα πρέπει ο προγραμματιστής να φροντίζει για την επανεκκίνηση του system call Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 26 26

Handling interrupted system calls Δίκτυα Επικοινωνιών ΙΙ Διαφάνεια 27 27