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

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

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

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

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

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

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

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

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

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

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

OpenMP. Προγραµµατισµός Αρχιτεκτονικών Μοιραζόµενης Μνήµης. Συστήµατα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστηµάτων ΕΜΠ. OpenMP p.

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

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

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

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

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

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

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

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

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

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

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

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

Parallel Implementation of John Conway s Game of Life

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Συγχρονισμός & σηματοφόροι. Προγραμματισμός II 1

Συστήµατα Παράλληλης Επεξεργασίας. OpenMP

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

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

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

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

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

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

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

υναµική έσµευση Μνήµης (συν.) ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 2 Εφαρµογή

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

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

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

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

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

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

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

Διάλεξη Εισαγωγή στη Java, Μέρος Γ

Προχωρημένα Θέματα ΠΡΟΧΩΡΗΜΕΝΑ ΘΕΜΑΤΑ. Γεώργιος Παπαϊωάννου ( )

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128]

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

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

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

double sum(double a, double b) { return(a+b); } double my_avg(double a, double b) { return(sum(a, b)/2.0); }

Α Β Γ static; printf("%c\n", putchar( A +1)+2); B DB BD. int i = 0; while (++i); printf("*");

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

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

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

Συναρτήσεις. Εισαγωγή

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

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12)

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

ιαφάνειες παρουσίασης #6 (β)

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

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

Η γλώσσα προγραμματισμού C Συνδεδεμένες Λίστες

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

Κεφάλαιο , 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Εισαγωγή στον Προγραμματισμό

Μεθόδων Επίλυσης Προβλημάτων

Δομημένος Προγραμματισμός (ΤΛ1006)

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf("%u\n", x); Β. unsigned char

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

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

Εκφωνήσεις ασκήσεων εργαστηρίου 1

ΑΡΧΕΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ

Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Παραδείγματα με openmp

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

Φροντιστήριο 4 Σκελετοί Λύσεων

Υ- 07 Παράλληλα Συστήματα Συνχρονισμός, κρυφές μνήμες πολλαπλών επιπέδων

Εργαστήριο 4: Υλοποίηση Αφηρημένου Τύπου Δεδομένων: Ταξινομημένη Λίστα

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7

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

Προγραμματισμός Η/Υ (ΤΛ2007 )

Διάλεξη 22η: Επιπλέον στοιχεία της C

ΕΡΓΑΣΤΗΡΙΟ 5 ΣΗΜΕΙΩΣΕΙΣ

Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων. Προγραμματισμός II 1

Parallel Architectures

Transcript:

ΣυγχρονισµόςσεΣυστήµατα ΠολλαπλώνΝηµάτων Συστήµατα Παράλληλης Επεξεργασίας Εργαστήριο Υπολογιστικών Συστηµάτων ΕΜΠ Κορνήλιος Κούρτης kkourt@cslab.ece.ntua.gr p. 1

Περιβάλλον Πολλαπλών Νηµάτων Threads T0 T1 T2 T3 access access access access access R0 R1 Shared Resources p. 2

Παράδειγµα: Double Linked List struct list head { struct list head next, prev ; }; void list del ( struct list head prev, struct list head next ) { next >prev = prev ; prev >next = next ; } void list add ( struct list head new, struct list head prev, struct list head next ) { next >prev = new; new >next = next ; new >prev = prev ; prev >next = new; } p. 3

Παράδειγµα: Double Linked List ιαγραφή Στοιχείου(Ένα νήµα) A B C D A B C D A B C D p. 4

Παράδειγµα: Double Linked List ιαγραφή Στοιχείων( ύο νήµατα) A B C D A B C D A B C D p. 5

Παράδειγµα: Double Linked List ιαγραφή Στοιχείων( ύο νήµατα) A B C D A B C D A B C D Oops! p. 5

Περιβάλλον Εκτέλεσης Μοντέλο Εκτέλεσης: Πολλαπλά νήµατα που εκτελούν εντολές. εν µπορούν να γίνουν υποθέσεις για τη σειρά που θα εκτελεσθούν τα νήµατα στις επεξεργαστικές µονάδες. Μοντέλο Συνέπειας µνήµης: Εξαρτάται από την υποκείµενη αρχιτεκτονική(υλικού ή λογισµικού) και αφορά τις υποθέσεις που µπορεί να κάνει ένας προγραµµατιστής σχετικά µε το αποτέλεσµα(ταυτόχρονων) προσβάσεων στη µοιραζόµενη µνήµη(πχ. sequential consistency, processor consistency). Μοντέλων Νηµάτων: Σχέση µεταξύ νηµάτων του Λειτουργικού Συστήµατος και νηµάτων που χρησιµοποιεί ο προγραµµατιστής(γενικά: N-M, Στο Linux(NPTL): 1-1). p. 6

Μοντέλο Εκτέλεσης: Πολλαπλά Νήµατα, 1 Επεξεργαστής T0 t0-cmd0 t0-cmd1 t0-cmd2... T1 t1-cmd0 t1-cmd1 t1-cmd2... T2 t2-cmd0 t2-cmd1 t2-cmd2... OS(Scheduler) P0 t2-cmd0 t2-cmd1 t0-cmd0 t1-cmd0... p. 7

Μοντέλο Εκτέλεσης: Μοιραζόµενη Μνήµη T0 t0-cmd0 t0-cmd1 t0-cmd2... T1 t1-cmd0 t1-cmd1 t1-cmd2... T2 t2-cmd0 t2-cmd1 t2-cmd2... OS(Scheduler) P0 $ Memory P1 $ p. 8

Προβλήµατα Race Condition: Συνθήκη κατά την οποία η έξοδος και/ή το αποτέλεσµά µιας διεργασίας εξαρτάται απροσδόκητα και σε σηµαντικό βαθµό από τον χρονισµό των γεγονότων. Deadlock: Κατάσταση κατά την οποία η εκτέλεση ενός συνόλου διεργασιών αδυνατεί να προχωρήσει εξαιτίας εκκρεµών αλληλεξαρτήσεων p. 9

Συγχρονισµός ιαδικασίες που εξασφαλίζουν την ορθή λειτουργία και συνεργασία των νηµάτων. Πρωτογενείς ιαδικασίες Συγχρονισµού: atomic operations spinlocks mutexes barriers semaphores p. 10

Atomic Operations Εντολές οι οποίες είναι εγγυηµένο ότι εκτελούνται ατοµικά. Συνήθως υλοποιούνται από το υλικό(hardware). Παραδείγµατα: atomic {add,sub} atomic {inc,dec} atomic {inc,dec} and test cmpxchg(compare-and-swap) p. 11

spinlocks lock()/unlock() Εξασφαλίζουν τη σειριοποίηση των νηµάτων σε ένα συγκεκριµένο κοµµάτι κώδικα, όπου µόνο ένα νήµα µπορεί να εκτελεί κάθε φορά. Υλοποιούνται χρησιµοποιώντας busy-wait loops και atomic operations Παράδειγµα: spin lock(&lock ); / critical section /... spin unlock(&lock ); p. 12

Spinlock Implementation spin lock : 1: lock ; decl [ lock ] # Atomically decreament lock ( in memory) jns 2f # If not negative jump to 2 ( forward ) 3: rep ; nop # relax the processor cmpl $0, [ lock ] # compare lock with zero jle 3b # lock s t i l l less than zero jmp 1b # try again to get the lock 2: # got the lock spin unlock : movl $1, [ lock ] p. 13

Mutexes και Barriers MUTual EXclusion Αντίστοιχη Λειτουργία µε τα spinlocks: Εξασφαλίζει αποκλειστική πρόσβαση σε κάθε νήµα σε µια κρίσιµη περιοχή κώδικα(critical section) Γενικά δεν υλοποιείται µε busy-wait loops, αλλά αναστέλλει την εκτέλεση του νήµατος Barrier Αρχικοποιείται σε έναν αριθµό νηµάτων Κάθε νήµα που φθάνει στο barrier, αναστέλλει τη λειτουργία του έως ότου φθάσουν όλα. p. 14

Semaphores(Σηµατοφορείς) Επινοήθηκε από τον Dijkstra Λειτουργίες: Αρχικοποιείται σε µία ακέραιη τιµή. Μετά την αρχικοποίηση µόνο δύο λειτουργίες επιτρέπονται η waitκαιηsignal wait(): Ο ακέραιος αριθµός µειώνεται. Αν γίνει αρνητικός τότε το νήµα σταµατάει την λειτουργία του και περιµένει signal(): Ο ακέραιος αριθµός αυξάνεται. Αν υπάρχουν νήµατα που περιµένουν, ένα από αυτά συνεχίζει την λειτουργία του p. 15

Semaphores(Σηµατοφορείς) Ένανήµαδενµπορείναξέρειτηντιµήτουσηµατοφορέα και συγκεκριµένα δεν ξέρει αν θα χρειαστεί να περιµένει ή όχι σε περίπτωση που καλέσει την wait() εν υπάρχει κάποιος κανόνας για το ποιο νήµα, από αυτά που περιµένουν, θα συνεχίσει την λειτουργία του µετά από κλήση της signal() Ένα MUTEX µπορεί να υλοποιηθεί µε έναν σηµατοφορέα αρχικοποιηµένο στο 1(unlocked) p. 16

Dining Philoshopers Problem 5 Φιλόσοφοι, που κατά διαστήµατα πεινάνε 5 Πιρούνια ανάµεσά τους σε ένα κυκλικό τραπέζι Οκάθεφιλόσοφοςγιαναφάειχρειάζεται 2 πιρούνια εν µπορούν δύο φιλόσοφοι να χρησιµοποιούν το ίδιο πιρούνι εν θα πρέπει να υπάρχει περίπτωση να δηµιουργηθεί deadlock εν θα πρέπει να υπάρχει περίπτωση ένας φιλόσοφος να περιµένει για πάντα για ένα πιρούνι Θα πρέπει να επιτρέπεται να τρώνε περισσότεροι του ενός ταυτόχρονα p. 17

Dining Philoshopers Problem Παράδειγµα Deadlock: Ο Κάθε φιλόσοφος έχει πάρειτοπιρούνιπουβρίσκεταιδεξιάτουκαιπεριµένει το πιρούνι που βρίσκεται αριστερά του. p. 17

Dining Philoshopers Problem Λύση 1: Χρησιµοποιείται ένα Semaphore, αρχικοποιηµένο στην τιµή 4, ώστε σε κάθε περίπτωση να µην διεκδικούν και οι 5 φιλόσοφοι τα πιρούνια. p. 17

Dining Philoshopers Problem Λύση2:Σεπερίπτωσηπουοιέναςαπότουςφιλόσοφους ξεκινάει να πάρει ένα πιρούνι µε διαφορετική σειρά από ότι οι υπόλοιποι, τότε δεν µπορεί να δη- µιουργηθεί deadlock. p. 17

Pthreads POSIX standard for Threads Linux 2.6: Native Posix Thread Library("1-1", futexes) Twins: older linuxthreads version Επισκόπηση ιεπαφής: pthread t ηµιουργία και έλεγχος νηµάτων: pthread {create,exit,join,cancel} Mutexes: pthread mutex {init,destroy}, pthread mutex {lock,trylock,unlock} Conditional Variables: pthread cond {init,destroy}, pthread cond {signal,broadcast,wait,timedwait} p. 18

Pthreads: Αρχικοποίηση και Έλεγχος int pthread create ( pthread t thread, pthread attr t attr, void ( start routine )( void ), void arg ); void pthread exit (void retval ); int pthread join ( pthread t th, void thread return ); int pthread cancel ( pthread t thread ); p. 19

Pthreads: Παράδειγµα #include <stdio.h> #include <pthread.h> #define NUM THREADS 8 #define pcreate pthread create #define pjoin pthread join void hello (void arg ) { int id = ( int )arg ; printf ( "[%d] Hello World! \n", id ); return NULL; } int main( int argc, char argv ) { pthread t tids [NUM THREADS ]; int i, ids [NUM THREADS ]; for ( i =0; i<num THREADS; i ++){ ids [ i ] = i ; pcreate ( tids+i,null, hello, ids+i ); } for ( i =0; i<num THREADS; i ++){ pjoin ( tids [ i ], NULL ); } return 0; } p. 20

Pthreads: Παράδειγµα $ gcc Wall O2 lpthread o hello hello. c $./ hello [0] Hello World! [2] Hello World! [3] Hello World! [5] Hello World! [6] Hello World! [1] Hello World! [7] Hello World! [4] Hello World! p. 21

Pthreads: Συγχρονισµός Mutexes: int pthread mutex init ( pthread mutex t mutex, pthread mutexattr t a ); int pthread mutex destroy ( pthread mutex t mutex ); int pthread mutex lock ( pthread mutex t mutex ); int pthread mutex trylock ( pthread mutex t mutex ); int pthread mutex unlock ( pthread mutex t mutex ); Conditional Variables: int pthread cond init ( pthread cond t cond, pthread condattr t a ); int pthread cond destroy ( pthread cond t cond ); int pthread cond wait ( pthread cond t cond, pthread mutex t mutex ); int pthread cond signal ( pthread cond t cond ); int pthread cond broadcast ( pthread cond t cond ); p. 22

Pthreads: Συγχρονισµός Η συνάρτηση pthread cond wait δέχεται ως όρισµα ένα mutex Μετά από"ξύπνηµα" του νήµατος θα πρέπει πάντα να ελέγχεται η συνθήκη(spurious wakeup) Για αναλυτική περιγραφή των συναρτήσεων χρησιµοποιήστε την τεκµηρίωση του συστήµατος(man) p. 23

Pthreads: Λοιπές Συναρτήσεις #define GNU SOURCE int pthread barrier init ( pthread barrier t barrier, pthread barrierattr t a, unsigned int count ); int pthread barrier destroy ( pthread barrier t barrier ); int pthread barrier wait ( pthread barrier t barrier ); int pthread spin init ( pthread spinlock t lock, int pshared ); int pthread spin destroy ( pthread spinlock t lock ); int pthread spin lock ( pthread spinlock t lock ); int pthread spin trylock ( pthread spinlock t lock ); int pthread spin unlock ( pthread spinlock t lock ); p. 24

Lock-free and Wait-free algorithms Αλγόριθµοι που δεν χρησιµοποιούν κλήσεις συγχρονισµού (mutexes,barriers,...) Transactional Memory Read-Copy-Update(RCU) p. 25