Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων. Συγχρονισμός

Σχετικά έγγραφα
Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων. Συγχρονισμός

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

Παρουσίαση 5 ης Άσκησης:

Παρουσίαση 5 ης Άσκησης:

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

NIKOΛΑΟΣ ΝΤΙΡΛΗΣ 5ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΙΘΟΥΣΑ Β4

Προγραμματισμός με Κοινόχρηστο Χώρο Διευθύνσεων 4

ΝΗΜΑΤΑ - ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

Χρήση των POSIX Threads

ΣυγχρονισµόςσεΣυστήµατα ΠολλαπλώνΝηµάτων

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

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

Ε-85: Ειδικά Θέµατα Λογισµικού

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διαδιεργασιακή Επικοινωνία Εργαστηριακές Ασκήσεις

Συγχρονισμός Μέρος Α : Κρίσιμο τμήμα και κλειδώματα

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

ή α α POSIX Threads ( έ ος 1 ο )

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

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

ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ

Νήµατα. Πολύ σηµαντικό

Ελεγκτές/Παρακολουθητές (Monitors) Ταυτόχρονος Προγραμματισμός 1

Υ07 Παράλληλα Συστήματα & 29/3/2016 Προγραμματισμός συστημάτων κοινόχρηστης μνήμης (Ι)

Σηματοφόροι (Σηματοφορείς) Ταυτόχρονος Προγραμματισμός 1

Διεργασίες - Σύνοψη. Διακοπές, προνομιούχος κατάσταση Κλήσεις συστήματος. Ορισμός, μεταβάσεις κατάστασης κύκλος ζωής

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διεργασίες και Νήματα Εργαστηριακές Ασκήσεις

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

Εκφωνήσεις ασκήσεων εργαστηρίου 2 (pthreads)

26/3/2012 Προγραμματισμός συστημάτων κοινόχρηστης μνήμης (Ι) Β. Δημακόπουλος

Κεφάλαιο VΙΙ (λίγο διαφορετικό)

Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος

Συγχρονισμός. Συστήματα Παράλληλης Επεξεργασίας 9ο εξάμηνο ΣΗΜΜΥ ακ. έτος CSLab. Κορνήλιος Κούρτης

Σηματοφόροι (Σηματοφορείς) Ταυτόχρονος Προγραμματισμός 1

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

Αμοιβαίος αποκλεισμός με κοινή μνήμη. Ταυτόχρονος Προγραμματισμός 1

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

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

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

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

HY-486 Αρχές Κατανεμημένου Υπολογισμού

Σημειώσεις Εργαστηρίου - Ασκήσεις. Διδάσκων: Κωνσταντίνος Αντωνής Επίκουρος Καθηγητής Δρ. Μηχανικός Η/Υ & Πληροφορικής Πανεπιστημίου Πατρών

Διεργασίες (Processes)

ΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 2ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 26 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4

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

ΚΕΦΑΛΑΙΟ 9. Ταυτόχρονος προγραμματισμός και νήματα. 9.1 Εισαγωγή

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

Ελεγκτές/Παρακολουθητές (Monitors) Ταυτόχρονος Προγραμματισμός 1

Ε-85: Ειδικά Θέµατα Λογισµικού

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

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

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

3 η ΑΣΚΗΣΗ. Προηγμένα Θέματα Αρχιτεκτονικής Υπολογιστών

Ηρώων Πολυτεχνείου 9, Ζωγράφου, Αθήνα, Τηλ: , Fax: URL

Άρα, Τ ser = (A 0 +B 0 +B 0 +A 0 ) επίπεδο 0 + (A 1 +B 1 +A 1 ) επίπεδο 1 + +(B 5 ) επίπεδο 5 = 25[χρονικές µονάδες]

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

Υλοποίηση Σηματοφόρων

Μηχανισμοί και προγραμματιστικές δομές συγχρονισμού. Προβλήματα συγχρονισμού (και λύσεις)

Ειδικά Θέµατα. Αντικείµενα Ιδιοτήτων. Ε-85: Ειδικά Θέµατα Λογισµικού. Αντικείµενα ιδιοτήτων (attributes objects)

ΠΛΗΡΟΦΟΡΙΚΗ Ι JAVA Τμήμα θεωρίας με Α.Μ. σε 3, 7, 8 & 9 22/11/07

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

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

4 ο Εργαστήριο Τυχαίοι Αριθμοί, Μεταβλητές Συστήματος

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

Μέρος Ι: νήματα POSIX Κεφάλαιο 4 (νέο βιβλίο) Κεφάλαιο 7 (παλιές σημειώσεις)

Κρίσιμη Περιοχή Υπό Συνθήκη (Conditional Critical Regions) Ταυτόχρονος Προγραμματισμός 1

Αμοιβαίος αποκλεισμός με κοινή μνήμη. Ταυτόχρονος Προγραμματισμός 1

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη)

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

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

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

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

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

Ηρώων Πολυτεχνείου 9, Ζωγράφου, Αθήνα, Τηλ: , Fax: URL

Προσπέλαση σύνθετων δομών δεδομένων χωρίς καθολικό κλείδωμα

Προγραµµατισµός Νηµάτων. Αρχικοποίηση µιας Φοράς pthread_once_t once_block = PTHREAD_ONCE_INIT; pthread_mutex_t mutex;

Ε-85: Ειδικά Θέµατα Λογισµικού

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

Κατηγορίες Νηµάτων. Νήµατα Επιπέδου Πυρήνα. Νήµατα Επιπέδου Χρήστη. «Νήµατα Επιπέδου Χρήστη» Ε-85: Ειδικά Θέµατα Λογισµικού

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη)

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

HY-486 Αρχές Κατανεμημένου Υπολογισμού Εαρινό Εξάμηνο

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

ΑΤΜ PROJECT ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Άννα Τριανταφύλλου ΑΕΜ : 456. επιβλέπων καθηγητής: Μηνάς Δασυγένης

Καρακασίδης Αλέξανδρος Καστίδου Γεωργία Παπαφώτη Μαρία Πέτσιος Κων/νος Στέφανος Σαλτέας Καλογεράς Παναγιώτης. Threads in Java ΝΗΜΑΤΑ ΣΤΗ JAVA

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

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

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

Αμοιβαίος αποκλεισμός με κοινή μνήμη. Ταυτόχρονος Προγραμματισμός 1

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη)

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

Ιδιοκτησία Αντικειµένου

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

Ε-85: Ειδικά Θέµατα Λογισµικού

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

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

Παράλληλος προγραμματισμός: Σχεδίαση και υλοποίηση παράλληλων προγραμμάτων

ΠΙΝΑΚΑΣ ΠΕΡΙΕΧΟΜΕΝΩΝ

Θέματα Προγραμματισμού Η/Υ

ΠΛΕ-006 ΠΑΡΑΛΛΗΛΗ ΕΠΕΞΕΡΓΑΣΙΑ Project

Transcript:

Εθνικό Μετσόβιο Πολυτεχνείο Σχολή Ηλεκτρολόγων Μηχ. και Μηχανικών Υπολογιστών Εργαστήριο Υπολογιστικών Συστημάτων 3 η Εργαστηριακή Άσκηση: Συγχρονισμός Λειτουργικά Συστήματα Υπολογιστών 7ο Εξάμηνο, 2016-2017

Σύνοψη Τρία προβλήματα συγχρονισμού Χρήση νημάτων: Υλοποιήσεις με POSIX Threads Μηχανισμοί συγχρονισμού: POSIX Mutexes και Spinlocks POSIX Semaphores POSIX Condition Variables GCC atomic operations

Σύνοψη Ζ1: Συγχρονισμός σε υπάρχοντα κώδικα (κρίσιμο τμήμα) simplesync.c Με POSIX mutexes (ή spinlocks) και GCC atomic ops Ζ2: Παραλληλοποίηση υπάρχοντα κώδικα (ανάγκη σειριοποίησης) Συγχρονισμός νημάτων για παράλληλο υπολογισμό Ζ3: Επίλυση προβλήματος συγχρονισμού Με δεδομένους περιορισμούς για τα νήματα

Σύνοψη Τρία προβλήματα συγχρονισμού Χρήση νημάτων: Υλοποιήσεις με POSIX Threads Μηχανισμοί συγχρονισμού: POSIX Mutexes and Spinlocks POSIX Semaphores POSIX Condition Variables GCC atomic operations

Δημιουργία νημάτων στα POSIX Threads Δημιουργία με pthread_create() int pthread_create(pthread_t * thread, pthread_attr_t * attr, void * (*start_routine)(void *), void * arg); π.χ. pthread_create(&tid, &attr, thread_fn, arg) Αναμονή για τερματισμό (pthread_exit()) με pthread_join() thread1 pthread_create thread1 pthread_join thread1 thread2 Compute thread2 thread2 (stopped) pthread_exit

Σύνοψη Τρία προβλήματα συγχρονισμού Χρήση νημάτων: Υλοποιήσεις με POSIX Threads Μηχανισμοί συγχρονισμού: POSIX Mutexes και Spinlocks POSIX Semaphores POSIX Condition Variables GCC atomic operations

Μηχανισμοί (POSIX) POSIX Threads <pthread.h> pthread_create(), pthread_join() POSIX Mutexes <pthread.h> pthread_mutex_init(), pthread_mutex_lock, pthread_mutex_unlock POSIX Spinlocks <pthread.h> pthread_spin_init(), pthread_spin_lock, pthread_spin_unlock POSIX (unnamed) Semaphores <semaphore.h> Manpages: sem_overview(7), sem_init(3), sem_post(3), sem_wait(3). POSIX condition variables: pthread_cond_init(), pthread_cond_wait(), pthread_cond_signal(), pthread_cond_broadcast() Εγκαταστήστε τα πακέτα manpages-posix, manpages-posix-dev: man a sem_post

Μηχανισμοί (GCC atomic operations) GCC atomic operations http://gcc.gnu.org/onlinedocs/gcc-4.1.2/gcc/atomic- Builtins.html Ειδικές εντολές (builtins) / συναρτήσεις για ατομική εκτέλεση σύνθετων εντολών sync_add_and_fetch(), sync_sub_and_fetch(),

Σύνοψη Ζ1: Συγχρονισμός σε υπάρχοντα κώδικα (κρίσιμο τμήμα) simplesync.c Με POSIX mutexes και GCC atomic ops Ζ2: Παραλληλοποίηση υπάρχοντα κώδικα (ανάγκη σειριοποίησης) Συγχρονισμός νημάτων για παράλληλο υπολογισμό Ζ3: Επίλυση προβλήματος συγχρονισμού Με δεδομένους περιορισμούς για τα νήματα

Ζ1: Συγχρονισμός σε υπάρχοντα κώδικα Δύο νήματα: T INCREASE, T DECREASE Αυξάνουν/μειώνουν το κοινό n, N φορές, αντίστοιχα Αρχική τιμή n = 0. Σχήμα συγχρονισμού ώστε Το n να παραμείνει 0 μετά το τέλος της εκτέλεσής τους. enter exit for (Ν φορές) { } ++ n; for (Ν φορές) { } - - n; T INCREASE T DECREASE n

Ζ1: Συγχρονισμός στο simplesync.c Δύο υλοποιήσεις Ζ1α. POSIX mutexes Ζ1β. GCC atomic operations: sync_*() enter exit for (Ν φορές) { } ++ (*ip); for (Ν φορές) { } - - (*ip); T INCREASE T DECREASE n *ip

Ζ1: Συγχρονισμός σε υπάρχοντα κώδικα Ζ1α. POSIX mutexes/semaphores Κώδικας μόνο στα σημεία enter, exit Κατάλληλα αρχικοποιημένα mutexes ή σημαφόροι wait(), signal() σε αυτούς Χωρίς αλλαγή του κώδικα που πειράζει τη μεταβλητή Ζ1β. GCC atomic operations Αλλαγή του τρόπου πρόσβασης στη μεταβλητή Απαιτείται πλέον κώδικας στα enter, exit ;

Ζ1: Συγχρονισμός στο simplesync.c Δύο υλοποιήσεις Ζ1α. POSIX mutexes Ζ1β. GCC atomic operations: sync_*() enter exit for (Ν φορές) { } ++ (*ip); for (Ν φορές) { } - - (*ip); T INCREASE T DECREASE n *ip

Σύνοψη Ζ1: Συγχρονισμός σε υπάρχοντα κώδικα (κρίσιμο τμήμα) simplesync.c Με POSIX mutexes και GCC atomic ops Ζ2: Παραλληλοποίηση υπάρχοντα κώδικα (ανάγκη σειριοποίησης) Συγχρονισμός νημάτων για παράλληλο υπολογισμό Ζ3: Επίλυση προβλήματος συγχρονισμού Με δεδομένους περιορισμούς για τα νήματα

Ζ2: Παραλληλοποίηση: the Mandelbrot Set

The Mandelbrot Set: Ορισμός

The Mandelbrot Set: σχεδίαση Για κάθε σημείο c μιας περιοχής του μιγαδικού επιπέδου Επαναληπτικός υπολογισμός του z n+1 = z n2 + c, z 0 = 0, μέχρι να ξεφύγει το z n Κάθε pixel χρωματίζεται ανάλογα με τον αριθμό των επαναλήψεων που χρειάστηκαν, ή n max Υπάρχουν κι άλλοι αλγόριθμοι

The Mandelbrot Set: κώδικας Σας δίνεται κώδικας (mandel.c) που ζωγραφίζει εικόνες από το σύνολο Mandelbrot Στο τερματικό, με χρωματιστούς χαρακτήρες Κάθε εικόνα είναι πλάτους x_chars, ύψους y_chars Η σχεδίαση γίνεται επαναληπτικά, για κάθε γραμμή Συναρτήσεις compute_and_output_mandel_line(fd, line) mandel_iterations_at_point(x, y, MAX) set_xterm_color(fd, color)

The Mandelbrot Set: Παραλληλοποίηση Κατανομή του φορτίου ανά γραμμές Ξεκινώντας από το πρώτο νήμα, ανάθεση γραμμών με κυκλική επαναφορά Νήμα i από N: y_chars Τ 0 Τ 1 Τ 0 Τ 1 Τ 0 Τ 1 Τ 0 Τ 1 Τ 0 Τ 1 Τ 0 Τ 1 Τ 0 i, i + N, i + 2*N, i + 3*N κλπ Συγχρονισμός; x_chars Τ 1 Τ 0 Τ 1 Τ 0 Τ 1

Σύνοψη Ζ1: Συγχρονισμός σε υπάρχοντα κώδικα (κρίσιμο τμήμα) simplesync.c Με POSIX mutexes και GCC atomic ops Ζ2: Παραλληλοποίηση υπάρχοντα κώδικα (ανάγκη σειριοποίησης) Συγχρονισμός νημάτων για παράλληλο υπολογισμό Ζ3: Επίλυση προβλήματος συγχρονισμού Με δεδομένους περιορισμούς για τα νήματα

Ζ3: Επίλυση προβλήματος συγχρονισμού Ένα νηπιαγωγείο (Kindergarten) Δάσκαλοι και παιδιά. Καθορισμένη μέγιστη αναλογία παιδιών ανά δάσκαλο: R παιδιά ανά δάσκαλο, π.χ. 3:1. Δεδομένη υλοποίηση N νήματα: C νήματα προσομοιώνουν παιδιά, τα υπόλοιπα N - C δασκάλους. Σας δίνεται κώδικας, που αποτυγχάνει.

Ζ3: Επίλυση προβλήματος συγχρονισμού entering entering entering entering C_ENTER() C_ENTER() T_ENTER() T_ENTER() verify() verify() verify() verify() C_EXIT() C_EXIT() T_EXIT() T_EXIT() exited exited exited exited T C T C T T T T Struct kindergarten_struct { /* */ };

Ζ3: Επίλυση προβλήματος συγχρονισμού Συνθήκες αλλαγής κατάστασης: Παιδί: Μπαίνει -> υπάρχουν τουλάχιστον (C+1)/R δάσκαλοι για να με υποστηρίξουν; Βγαίνει -> άνευ όρων (ενημερώνει αν θέλει κάποιος δάσκαλος να βγει αν (N - C - 1) * R >= C) Δάσκαλος: Μπαίνει -> αν περιμένουν παιδιά, μπορούν να μπούν μέχρι R Βγαίνει -> υπάρχουν αρκετοί δάσκαλοι για να υποστηρίξουν τα παιδιά; (N - C - 1) * R >= C.

Ζ3: Επίλυση προβλήματος συγχρονισμού Δάσκαλος Παιδί Παιδιά: αναμονή για είσοδο Δάσκαλος Νηπιαγωγείο Παιδί Δάσκαλοι: αναμονή για έξοδο

Ζ3: Επίλυση προβλήματος συγχρονισμού condition variables pthread_mutex_t Lock; pthread_cond_t cond; int counter = 0; /* Thread A */ pthread_mutex_lock(&lock); if (counter < 10) pthread_cond_wait(&cond, &Lock); pthread_mutex_unlock(&lock); /* Thread B */ pthread_mutex_lock(&lock); counter++; pthread_cond_signal(&cond); pthread_mutex_unlock(&lock); Σωστό! αλλά γιατί να κάνω signal σε κάθε αύξηση του counter;

Ζ3: Επίλυση προβλήματος συγχρονισμού condition variables pthread_mutex_t Lock; pthread_cond_t cond; int counter = 0; /* Thread A */ pthread_mutex_lock(&lock); if (counter < 10) pthread_cond_wait(&cond, &Lock); pthread_mutex_unlock(&lock); /* Thread B */ pthread_mutex_lock(&lock); counter++; if (counter == 10) pthread_cond_signal(&cond); pthread_mutex_unlock(&lock); Σωστό MONO για 2 νήματα (Δες: The lost wakeup problem )

Ζ3: Επίλυση προβλήματος συγχρονισμού condition variables pthread_mutex_t Lock; pthread_cond_t cond; int counter = 0; /* Thread Χ */ pthread_mutex_lock(&lock); while (counter < 10) pthread_cond_wait(&cond, &Lock); pthread_mutex_unlock(&lock); /* Thread Υ */ pthread_mutex_lock(&lock); counter++; if (counter == 10) pthread_cond_broadcast(&cond); pthread_mutex_unlock(&lock); Σωστό για Ν νήματα

Ερωτήσεις; και στη λίστα: OS@lists.cslab.ece.ntua.gr