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



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

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

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

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

Χρήση των POSIX Threads

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

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

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

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

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

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

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

FAIL PASS PASS οριακά

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

Sheet2. Σωστή, και µπράβο που µεριµνήσατε για λίστες διαφορετικών µεγεθών.

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

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

lab14grades ΑΕΜ ΒΑΘΜΟΣ ΣΧΟΛΙΑ

lab13grades 449 PASS 451 PASS PASS FAIL 1900 FAIL Page 1

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Αντικείμενα με πίνακες. Constructors. Υλοποίηση Στοίβας

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

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

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

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

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

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

Δείτε τώρα και πώς θα έπρεπε να ήταν το παραπάνω: Page 1

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

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

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

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

Sheet2 Α.Μ FAIL. οριακό PASS. - Έπρεπε να χρησιµοποιήσετε συναρτήσεις από τη string.h

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

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

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

Topic 6: Threads. *Ευχαριστίες στους Τάκη Σταµατόπουλο, Αλέξη ελή, και Αντώνη ελιγιαννάκη

Προγραμματισμός Ι (ΗΥ120)

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

Στόχοι και αντικείμενο ενότητας. Τύπος πίνακα. Τύπος πίνακα (συν.) #6. Πίνακες και Δείκτες

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

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

Πίνακας Περιεχοµένων Πρόλογος Κεφάλαιο Βασικές εισαγωγικές έννοιες

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

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

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

Νήµατα. ιεργασίες και νήµατα Υλοποίηση νηµάτων Ελαφριές διεργασίες Αξιοποίηση νηµάτων. Κατανεµηµένα Συστήµατα 10-1

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

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

ΠΡΟΓΡΑΜΜΑ synartisi_se_diadikasia ΜΕΤΑΒΛΗΤΕΣ ΑΚΕΡΑΙΕΣ: A[10], max, i, C, S, B, maxmax ΑΡΧΗ

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

Κεφάλαιο 10 ο Υποπρογράµµατα

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

ΑΡ Χ Ε Ι Α Κ Ε Ι Μ Ε Ν Ο Υ (text files)

I (JAVA) Ονοματεπώνυμο: Α. Μ.: Δώστε τις απαντήσεις σας ΕΔΩ: Απαντήσεις στις σελίδες των ερωτήσεων ΔΕΝ θα ληφθούν υπ όψην.

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος

Να το ξαναγράψετε χρησιμοποιώντας αντί για την εντολή Για Τέλος_επανάληψης: α. την εντολή Όσο Τέλος_επανάληψης

- Το πρόγραµµα σας δίνει τα αναµενόµενα αποτελέσµατα.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα Αναφορές

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

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

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

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

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

2 ΟΥ και 8 ΟΥ ΚΕΦΑΛΑΙΟΥ

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

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

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Πίνακες Κλάσεις και Αντικείμενα

Sheet1_2. - Δεν απελευθερώνεις τη δυναµικά δεσµευµένη µνήµη. - Η έξοδος του προγράµµατός σου δεν είναι ακριβώς όπως ζητούσε η άσκηση.

Να γράψετε τα αποτελέσματα αυτού του αλγόριθμου για Χ=13, Χ=9 και Χ=22. Και στις 3 περιπτώσεις το αποτέλεσμα του αλγορίθμου είναι 1

ΨΗΦΙΑΚΗ ΛΟΓΙΚΗ ΣΧΕ ΙΑΣΗ

ΑΠΟΛΥΤΗΡΙΕΣ ΕΞΕΤΑΣΕΙΣ Γ ΤΑΞΗΣ ΗΜΕΡΗΣΙΟΥ ΕΝΙΑΙΟΥ ΛΥΚΕΙΟΥ ΣΑΒΒΑΤΟ 4 ΙΟΥΝΙΟΥ 2005

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ ΔΙΑΓΩΝΙΣΜΑ ΠΡΟΣΟΜΟΙΩΣΗΣ 23/04/2012. Α. Να απαντήσετε με Σ ή Λ στις παρακάτω προτάσεις:

Προηγμένοι Μικροεπεξεργαστές. Εργαστήριο 4 - Editor

Παράδειγµα χρήσης perror, errno (πρόγραµµα errors_demo.c)

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C

Ψηφιακοί Υπολογιστές

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

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

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

Topic 6: Threads * K24: Systems Programming Instructor: Mema Roussopoulou

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

Μεταβλητές τύπου χαρακτήρα

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

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

S, (5, -3, 34, -23, 7) ( *, _

Η Γλώσσα Προγραµµατισµού C++ (The C++ Programming Language)

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

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

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

Α1. 1-Λάθος 2-Λάθος 3-Σωστό 4-Σωστό 5-Λάθος

for for for for( . */

Προγραμματισμός Ι (ΗΥ120)

φροντιστήρια Θέματα Ανάπτυξης Εφαρμογών σε Προγραμματιστικό Περιβάλλον Γ λυκείου Προσανατολισμός Σπουδών Οικονομίας και Πληροφορικής

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

Μονοδιάστατοι πίνακες Πολυδιάστατοι πίνακες Μέθοδοι Μέθοδοι Recursive Overloading

ÔÏÕËÁ ÓÁÑÑÇ ÊÏÌÏÔÇÍÇ

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

Οι εντολές ελέγχου της ροής ενός προγράμματος.

ΤΕΧΝΙΚΕΣ ΑΝΤΙΚΕΙΜΕΝΟΣΤΡΑΦΟΥΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ. Κλάσεις και Αντικείμενα

Transcript:

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

Νήµατα (συν.) Σηµαντικό 2

Νήµατα vs ιεργασίες Νήµατα ιεργασίες Χώρος εδοµένων Περιγραφητές Αρχείων fork exit exec Σήµατα Κοινός. Ότι αλλάζει το 1 νήµα το βλέπουν/ αλλάζουν και τα άλλα (πχ malloc/free) Κοινοί. 2 νήµατα χρησιµοποιούν ίδιο περιγραφητή. Αρκεί 1 close σε αυτόν Ξεχωριστός. Ξεχωριστός χώρος διευθύνσεων µετά το fork Αντίγραφα. 2 διεργασίες χρησιµοποιούν αντίγραφα του περιγραφητή. Μόνο το νήµα που κάλεσε fork αντιγράφεται. Όλα τα νήµατα πεθαίνουν µαζί (pthread_exit για τερµατισµό µόνο ενός νήµατος) Όλα τα νήµατα εξαφανίζονται (αντικαθίσταται ο κοινός χώρος διευθύνσεων) Περίπλοκο. Κοιτάξτε κεφάλαιο 13.5 ebook. Κάποια στο νήµα που τα προκάλεσε, κάποια στο πρώτο που δεν το έχει µπλοκάρει 3

ηµιουργία και Τερµατισµός Νηµάτων Χαρακτηριστικό νήµατος. (Μπορεί να γίνει join) Αποφύγετε επιστροφή δείκτη σε αυτόµατες µεταβλητές. Προτιµήστε δείκτη σε δεδοµένα δηµιουργηµένα από malloc (κεφάλαιο 12.3.4 ebook) 4

Συναρτήσεις pthread_join, pthread_detach, pthread_self Θυµίζει την waitpid σε διεργασίες Έλεγχος ισότητας pthread_t µε pthread_equal Σηµαντικό: ΕΝ τερµατίζεται το νήµα. Απλά δηλώνει ότι θα αποδεσµευτούν οι πόροι του ΌΤΑΝ τερµατίσει 5

Χρήση pthread_create, pthread_exit, pthread_join και pthread_self ΛΑΘΟΣ ΤΡΟΠΟΣ: είτε Επόµενη ιαφάνεια, παράδειγµα 12.14 του ebook 6

Παράδειγµα 12.14 ebook Ποια από τα παρακάτω µπορούν να χρησιµοποιηθούν ως τιµή επιστροφής? 1. Όχι. Απαιτείται δείκτης 2. Όχι. Το n είναι αυτόµατη µεταβλητή 3. Όχι. Μετατροπή ακεραίου σε δείκτη και το αντίστροφο είναι ασφαλές ΜΟΝΟ για το 0. 4. Όχι. Ίδιο µε 2. 5. Σωστό. υναµική µνήµη 6. Όχι. Ίδιο µε 2. 7. Όχι. Ίδιο µε 2. 8. Σωστό. Σταθερά string έχουν static αποθήκευση 9. Όχι. Μη εγγυηµένο ότι το αποτέλεσµα του strerror θα υπάρχει αφού τερµατίσει το νήµα 7

Χρήση pthread_detach Τυπώνεται. Η pthread_detach δεν τερµατίζει το νήµα 8

Όχι σωστό. Όµοιο πρόβληµα µε πρόγραµµα create_a_thread.c 9

Εκτέλεση προγράµµατος 10

υαδικοί Σηµατοφορείς static pthread_mutex_t koko = PTHREAD_MUTEX_INITIALIZER Αρχικοποίηση ΠΑΝΤΑ, ΑΚΡΙΒΩΣ 1 φορά 11

υαδικοί Σηµατοφορείς (συν) Υπάρχει και pthread_mutex_trylock 12

ΠΡΟΣΟΧΗ ΣΕ Η pthread_mutex_trylock επιστρέφει EBUSY αν ο σηµατοφορέας είναι ήδη κλειδοµένος από άλλο νήµα Κάθε δυαδικός σηµατοφορέας πρέπει να αρχικοποιηθεί ΑΚΡΙΒΩΣ 1 φορά Η pthread_mutex_unlock να καλείται ΜΟΝΟ από το νήµα που έχει κλειδωµένο το δυαδικό σηµατοφορέα ΠΟΤΕ να µην καλείτε τη pthread_mutex_lock απότονήµα που έχει Η Η κλειδώσει το σηµατοφορέα (στο είδος σηµατοφορέων που αναφέραµε προκαλεί αδιέξοδο) Αν λάβετε σφάλµα EINVAL σε προσπάθεια κλειδώµατος, τότε δεν έχετε αρχικοποιήσει το σηµατοφορέα ΠΟΤΕ κλήση της pthread_mutex_destroy σε κλειδωµένο σηµατοφορέα (EBUSY) 13

14

15

16

17

Ελεγχοι Συνθήκης??? Τι πρόβληµα έχει το παρακάτω: flag = 1 while (flag) { pthread_mutex_lock(&mut); if (x == y) { flag = 0; commands. } pthread_mutex_unlock(&mut); } 18

Μεταβλητές Συνθήκης 19

Συνάρτηση pthread_cond_wait 20

21

ιαδικασία Χρήσης Μεταβλητών Συνθήκης Χρήση ΕΝΌΣ ΜΟΝΟ mutex µε κάθε µεταβλητή συνθήκης Απόκτηση mutex πριν ελέγξετε κάποια συνθήκη Σε αποτυχία, pthread_cond_wait Μετά από την επιστροφή της pthread_cond_wait επανέλεγχος συνθήκης (µπορεί να επιστρέψει λανθασµένα, πχ από σήµα) Χρήση πάντα του ίδιου mutex για αλλαγές των µεταβλητών στη συνθήκη Να κρατάτε το mutex για µικρό µόνο διάστηµα Απελευθέρωση στο τέλος µε pthread_mutex_unlock 22

23

24

25

26

Εκτέλεση Προγράµµατος 27

Ασφάλεια Νηµάτων Πρόβληµα επειδή πολλά νήµατα µπορούν να καλέσουν συναρτήσεις που δεν είναι ασφαλείς Αποτέλεσµα πολλών συναρτήσεων συστήµατος όχι ασφαλές 28

Ασφάλεια Νηµάτων (2) Μπορείτε εύκολα να µετατρέψετε τις συναρτήσεις αυτές σε ασφαλείς µε χρήση δυαδικών σηµατοφορέων (παράδειγµα 13.17 του ebook) 29

Παράδειγµα Παραγωγού Καταναλωτή (κεφ. 16 ebook) Παραγωγοί (Π) εισάγουν δεδοµένα σε καταχωρητή Καταναλωτές (Κ) διαβάζουν δεδοµένα από καταναλωτή Τι να αποφύγουµε? Κ να διαβάσει αντικείµενο που ο Π δεν έχει ολοκληρώσει την εισαγωγή του Κ αφαιρεί αντικείµενο που δεν υπάρχει Κ αφαιρεί αντικείµενο που έχει ήδη αφαιρεθεί Π προσθέτει αντικείµενο ενώ ο καταχωρητής δεν έχει χώρο Π γράφει πάνω σε αντικείµενο που δεν έχει αφαιρεθεί 30

Χρήση Κυκλικού Καταχωρητή Περιορισµένου Μεγέθους 31

Προστασία µε υαδικούς Σηµατοφορείς Πόσα υπάρχουν στο buffer? Χρειάζεται? Τι επιστρέφει αν δεν υπάρχουν δεδοµένα? 32

Προστασία µε Μεταβλητές Συνθήκης (1) 33

Προστασία µε Μεταβλητές Συνθήκης (2) 34