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

Σχετικά έγγραφα
Παράλληλη Επεξεργασία

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

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

Ορισµός Νήµα (thread) είναι µια ακολουθιακή ροή ελέγχου (δηλ. κάτι που έχει αρχή, ακολουθία εντολών και τέλος) σ ένα

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

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

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

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

Παράλληλη Επεξεργασία Εργαστηριακή Ασκηση Εαρινού Εξαµήνου 2008

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

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

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

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

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

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

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

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

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

Μάθημα 4 ο. Κρίσιμα Τμήματα και Αμοιβαίος Αποκλεισμός

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 6: Συναρτήσεις και Αναδρομή

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

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

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

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

Νήµαταστην Java. Συγχρονισµός νηµάτων Επικοινωνία νηµάτων Εκτελέσιµα αντικείµενα Νήµατα δαίµονες Οµάδες νηµάτων. Κατανεµηµένα Συστήµατα 11-1

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστηµάτων Βάσεων εδοµένων Εαρινό Εξάµηνο

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

Αντικειμενοστραφής Προγραμματισμός

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική

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

Εισαγωγή στον δομημένο προγραμματισμό

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

FAIL PASS PASS οριακά

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

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

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

Αμοιβαίος αποκλεισμός

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής

Οντοκεντρικός Προγραμματισμός

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Δυναμική Δέσμευση Μνήμης και Δομές Δεδομένων (Φροντιστήριο)

Προβλήματα Συγχρονισμού (με ελεγκτή) Ταυτόχρονος Προγραμματισμός 1

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών & Μηχανικών Υπολογιστών Τμήμα Πληροφορικής

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

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

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

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

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

2.4 Κλασσικά Προβλήματα IPC

Πληροφορική & Τηλεπικοινωνίες K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Χειμερινό Εξάμηνο M. Χατζόπουλος. Προθεσμία: 19/01/2015

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

Αρχή. Διάβασε Χ ΟΧΙ Χ < > 0 ΝΑΙ Α Α +1 Γ Β / Α ΝΑΙ ΟΧΙ. Εμφάνισε Γ. Τέλος

53 Χρόνια ΦΡΟΝΤΙΣΤΗΡΙΑ ΜΕΣΗΣ ΕΚΠΑΙΔΕΥΣΗΣ Σ Α Β Β Α Ϊ Δ Η Μ Α Ν Ω Λ Α Ρ Α Κ Η

Δείκτες (Pointers) Ένας δείκτης είναι μια μεταβλητή με τιμή μια διεύθυνση μνήμης. 9.8

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

Πληροφορική & Τηλεπικοινωνίες Υλοποίηση Συστημάτων Βάσεων Δεδομένων - Χειμερινό Εξάμηνο Καθηγητής Δ. Γουνόπουλος

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή

'Ασκηση 1: Στατικός Κατακερματισμός. Εισαγωγή. Ρουτίνες υλοποίησης κατακερματισμού. (Ημερομηνία Παράδοσης: Παρασκευή, 16/5/2008, 5μμ) HT_Init()

Εργαστήριο 02: Προγραμματισμός με Γενικούς Τύπους (JAVA Generics) ΕΠΛ231 Δομές Δεδομένων και Αλγόριθμοι

Υπολογιστικά & Διακριτά Μαθηματικά

ΣΕΤ ΑΣΚΗΣΕΩΝ 4. Προθεσµία: 8/1/12, 22:00

Βαθμός Σχόλια. lab5 PASS PASS PASS PASS PASS. Οριακά PASS - Καλή δουλειά

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

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

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

Εισαγωγή στην εφαρμογή Βασική Σελίδα (Activity) Αναζήτηση Πελάτη... 6 Προβολή Πελάτη... 7 Επεξεργασία Πελάτη... 10

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

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

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

Κεφάλαιο 10 Υποπρογράμματα. Καραμαούνας Πολύκαρπος

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

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

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

Εργαστήριο 4. Εαρινό Εξάμηνο ΠΡΟΣΟΧΗ: Αρχίστε νωρίς το Εργαστήριο 4. Οι ασκήσεις είναι πιο απαιτητικές από τα προηγούμενα εργαστήρια.

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 6 C & Assembly

Προγραμματισμός ΙI (Θ)

Προγραμματισμός ΙI (Θ)

Πληροφορική & Τηλεπικοινωνίες. K18 - Υλοποίηση Συστημάτων Βάσεων Δεδομένων Εαρινό Εξάμηνο

Χρήση των POSIX Threads

Transcript:

Παράλληλη Επεξεργασία Φροντιστήριο: Νήματα & Συγχρονισμός Μεταβλητές κλειδιά Φράγματα Εργαστήριο Πληροφοριακών Συστημάτων Υψηλής Επίδοσης Parallel and Distributed Systems Group

Συγχρονισμός μεταξύ νημάτων Πολύ συχνά, στις διάφορες παράλληλες εφαρµογές δηµιουργείται η ανάγκη για συγχρονισµό µεταξύ τωνδιαφόρωννηµάτων Για την προσπέλαση από τα διάφορα νήµατα κάποιας κοινής µεταβλητής Γιαναειδοποιήσεικάποιονήµα κάποιο άλλο όταν συµβεί κάποιο γεγονός Νήµατα που υλοποιούν ένα pipeline Νήµατα που δουλεύουν µε τοµοντέλο producer consumer Όταν τα νήµατα πρέπει να λειτουργήσουν σαν µια οµάδα Όταν όλα τα νήµαταπρέπειναξεκινήσουνταυτόχρονανα εκτελέσουν µια εργασία (π.χ. παράλληλο βρόχο)

Προσπέλαση κοινής μεταβλητής χωρίς προστασία Τ0 Νήμα 1 Νήμα 2 Α Β Διάβασε Α=100 Τ1 Διάβασε Α=100 Τ2 Διάβασε Α=100 Α=100 Τ3 Διάβασε Α=100 Α=100 Τ4 Πρόσθεσε Α=Α+Β Α=110 Τ5 Πρόσθεσε Α=Α+Β Α=110 Αποτέλεσμα Α=110 Συμπέρασμα: Απαιτείται συγχρονισμός για την προσπέλαση στην κοινή μεταβλητή!

Αμοιβαίος Αποκλεισμός Όταν δύο νήµατα ανανεώνουν την ίδια µεταβλητή θα πρέπει να συγχρονίζονται κατά την διαδικασία εγγραφής Αυτό ονοµάζεται αµοιβαίος αποκλεισµός Οαµοιβαίος αποκλεισµός επιτυγχάνεται µε την χρήση κλειδιών Ένα κλειδί µπορεί να είναι κλειδωµένο ή ελεύθερο Ένα νήµα πριν ανανεώσει µια κοινή µεταβλητή θα πρέπει να κλειδώσει ένα κλειδί, το οποίο θα ελευθερώσει αµέσως µετά την εγγραφή

Προσπέλαση κοινής μεταβλητής με χρήση κλειδιού Νήμα 1 Νήμα 2 Α Β Τ0 Διάβασε Α=100 Τ1 Τ2 Τ3 Τ4 Τ5 Τ6 Τ7 Τ8 Πάρε το κλειδί Περίμενε το κλειδί Περίμενε το κλειδί Διάβασε Α=110 Πρόσθεσε Α=Α+Β Άσε το κλειδί Διάβασε Πάρε το κλειδί Διάβασε Α=100 Πρόσθεσε Α=Α+Β Άσε το κλειδί Α=100 Α=100 Α=100 Α=110 Α=110 Α=110 Α=120 Α=120 Με αμοιβαίο αποκλεισμό μέσω κλειδιού επιτυγχάνεται συγχρονισμός μεταξύ των νημάτων και η κοινή μεταβλητή Α έχει την σωστή τιμή Α=120

Μεταβλητές κλειδιά - Δημιουργία Το πρότυπο POSIX παρέχει τον τύπο pthread_mutex_t, οποίος ορίζει µια µεταβλητή τύπου κλειδί Οι µεταβλητές αυτού του τύπου θα πρέπει να αρχικοποιηθούν πριν χρησιµοποιηθούν: Στατική αρχικοποίηση: pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; υναµική αρχικοποίηση χρησιµοποιώντας την κλήση: int pthread_mutex_init(&mutex, NULL); Ένα αρχικοποιηµένο κλειδί αρχικά είναι στην κατάσταση ελεύθερο.

Μεταβλητές κλειδιά - Κλείδωμα Ένα νήµα ελέγχου µπορεί να κλειδώσει µια µεταβλητή κλειδί χρησιµοποιώντας την κλήση: pthread pthread_mutex_lock (&mutex); Μόλις η συνάρτηση αυτή επιστρέψει το κλειδί θα είναι σε κατάσταση κλειδωµένο Αν το κλειδί είναι ήδη κλειδωµένοτότετονήµα πουκαλεί την παραπάνω κλήση µπλοκάρετε µέχρι το κλειδί να ξαναγίνει ελεύθερο Όταν πολλά νήµατα καλούν ταυτόχρονα την κλήση αυτή, τότε µόνο ένα από αυτά θα καταφέρει να κλειδώσει το κλειδί

Μεταβλητές κλειδιά-απελευθέρωση Ένα νήµα ελέγχου µπορεί να απελευθερώσει µια µεταβλητή κλειδί χρησιµοποιώντας την κλήση: pthread_mutex_unlock (mutex); Μόλις η συνάρτηση αυτή επιστρέψει το κλειδί θα είναι σε κατάσταση ελεύθερο Μόλις το νήµα που έχει κλειδώσει το κλειδί καλέσει την παραπάνω συνάρτηση τότε ένα από τα υπόλοιπα νήµατα που έχουν µπλοκάρει (περιµένοντας το κλειδί) ξεµπλοκάρεται Και πάλι ένα µόνο από τα μπλοκαρισμένα νήµατα θα καταφέρει να ξανακλειδώσει το κλειδί

Μεταβλητές κλειδιά- Κλείδωμα με έλεγχο Ένα νήµα ελέγχου µπορεί να δοκιµάσει να κλειδώσει µια µεταβλητή κλειδιού χρησιµοποιώντας την κλήση: pthread_mutex_trylock (&mutex); Αν το κλειδί είναι σε κατάσταση ελεύθερο τότε το νήµα που έκανε την κλήση θα κλειδώσει το κλειδί Αν το κλειδί είναι σε κατάσταση κλειδωµένο τότε η κλήση αυτή επιστρέφει έναν ειδικό κωδικό που ενηµερώνει τον χρήστη για την κατάσταση

Μεταβλητές κλειδιά - Καταστροφή Για κάθε κλήση pthread_mutex_lock που υπάρχει στο πρόγραµµα µας, θα πρέπει να υπάρχει και η αντίστοιχη κλήση pthread_mutex_unlock για την ίδια µεταβλητή κλειδί Αλλιώς το πρόγραµµα µας µπορεί να ανασταλεί μόνιμα (deadlock) Όταν µια µεταβλητή κλειδί δεν χρησιµοποιείται πια, τότε αυτή µπορεί να καταστραφεί µε τηνκλήση: pthread_mutex_destroy(&mutex);

Μεταβλητές κλειδιά Παράδειγμα... pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; int Global;... void work_function(void * arg); {... pthread_mutex_lock(&mutex);... // Read/Write Access Global // ( Critical Section )... pthread_mutex_unlock(&mutex); }...

Συγχρονισμός με χρήση Φράγματος Συγχρονισμός (κυριολεκτικά) των νημάτων σε συγκεκριμένα σημεία του προγράμματος Κατά τον ορισμό ενός φράγματος ορίζεται ο αριθμός των νημάτων που πρόκειται να το χρησιμοποιήσουν Όποτε κάποιο νήμα συναντήσει ένα φράγμα αναστέλλει την εκτέλεση του έως ότου να συναντήσουν το συγκεκριμένο φράγμα όλα τα υπόλοιπα νήματα που έχει οριστεί να το χρησιμοποιήσουν (πλήθος νημάτων) Όταν το τελευταίο νήμα συναντήσει το φράγμα, ειδοποιούνται και όλα τα υπόλοιπα να συνεχίσουν την εκτέλεση τους. Με αυτό τον τρόπο όλα τα νήματα συγχρονίζονται με το πιο αργό νήμα Απλός και σε αρκετούς αλγορίθμους απαραίτητος τρόπος συγχρονισμού Η επίδραση του είναι μικρή όταν το φορτίο είναι ισοκατανεμημένο (the load is balanced)

Προσπέλαση κοινής μεταβλητής με χρήση κλειδιού Τ0 Τ1 Τ2 Τ3 Νήμα 1 Εκτέλεση Υπολογισμού Συνάντηση φράγματος Αναμονή στο φράγμα Αναμονή στο φράγμα Νήμα 2 Εκτέλεση Υπολογισμού Εκτέλεση Υπολογισμού Εκτέλεση Υπολογισμού Εκτέλεση Υπολογισμού Γύρος Ν Ν Ν Ν Τ4 Αναμονή στο φράγμα Συνάντηση φράγματος - Τ5 Έξοδος από το φράγμα Έξοδος από το φράγμα - Τ6 Τ7 Εκτέλεση Υπολογισμού Εκτέλεση Υπολογισμού Ν+1 Το ταχύτερο σε αυτή τη συγκυρία νήμα 1 συγχρονίζεται με το αργότερο νήμα 2. Παράδειγμα χρήσης: όταν δεδομένα που παράγονται στο γύρο Ν είναι απαραίτητα για τον υπολογισμό κατά τον γύρο Ν+1 κ.ο.κ.

Υλοποίηση Φραγμάτων στα PThreads Αρχικά δεν προβλεπόταν η υποστήριξη τους Ορίστηκαν σε μεταγενέστερη έκδοση του προτύπου Ηυλοποίησητουςσταδιάφοραλειτουργικάσυστήματα αυτή τη στιγμή είναι προαιρετική Ωστόσο στο linux διατίθεται πλέον υλοποίηση τους. Οι κυριότερες συναρτήσεις για χρήση φραγμάτων είναι: Τύπος: pthread_barrier_t bar; int pthread_barrier_init(&bar, NULL, numofthreads); int pthread_barrier_wait&bar); int pthread_barrier_destroy(&bar);

Απορίες και συζήτηση μέσω του forum του μαθήματος στο My.CEID e-mail επικοινωνίας kik@hpclab.ceid.upatras.gr Ανακοίνωση ασκήσεων και υλικό στην ιστοσελίδα του μαθήματος http://parallel.hpclab.ceid.upatras.gr/