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

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

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

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

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

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

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

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

Χρήση των POSIX Threads

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Transcript:

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

Σύνοψη Τρία προβλήματα συγχρονισμού Χρήση νημάτων: Υλοποιήσεις με 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()

Δημιουργία νημάτων στα 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. Σχήμα συγχρονισμού ώστε for (Ν φορές) { } ++ n; for (Ν φορές) { } - - n; T INCREASE T DECREASE n

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

Ζ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_*() for (Ν φορές) { } ++ (*ip); for (Ν φορές) { } - - (*ip); T INCREASE T DECREASE n *ip

Ζ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_*() for (Ν φορές) { } ++ (*ip); for (Ν φορές) { } - - (*ip); T INCREASE T DECREASE n *ip

Ζ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: Ορισμός

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

The Mandelbrot Set: σχεδίαση Για κάθε σημείο c μιας περιοχής του μιγαδικού επιπέδου Επαναληπτικός υπολογισμός του z n+1 = z n 2 + 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: Παραλληλοποίηση

The Mandelbrot Set: Παραλληλοποίηση y_chars x_chars

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

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

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

The Mandelbrot Set: Παραλληλοποίηση Κατανομή του φορτίου ανά γραμμές Ξεκινώντας από το πρώτο νήμα, ανάθεση γραμμών με κυκλική επαναφορά Νήμα i από N: y_chars Τ 1 Τ 1 Τ 1 Τ 1 Τ 1 Τ 1 i, i + N, i + 2*N, i + 3*N κλπ Συγχρονισμός; x_chars Τ 1 Τ 1 Τ 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 verify() verify() verify() verify() exited exited exited exited T C T C T T T T Struct kindergarten_struct { /* */ };

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

Ζ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: Επίλυση προβλήματος συγχρονισμού Παιδιά: αναμονή για είσοδο Νηπιαγωγείο Παιδί Δάσκαλοι: αναμονή για έξοδο

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

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

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

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

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

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

Ζ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