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

Μέγεθος: px
Εμφάνιση ξεκινά από τη σελίδα:

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

Transcript

1 Ε-85: Ειδικά Θέµατα Λογισµικού Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων Χειµερινό Εξάµηνο «Προγραµµατισµός Νηµάτων Προτύπου POSIX» Παναγιώτης Χατζηδούκας (Π.Δ. 407/80) E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 1

2 Σχετικά αρχεία: Χρήσητων POSIX Threads #include <pthread.h> #include <sched.h> #include <semaphore.h> ηµιουργία εκτελέσιµου > gcc pthread -o hello hello.c lpthread > gcc D_REENTRANT -o hello hello.c lpthread Κανονική εκτέλεση προγράµµατος >./hello E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 2

3 ΑπλόΠαράδειγµα void *func ( ) { /* define local data */ /* function code */ pthread_exit(&exit_value); main ( ) { pthread_t tid; int exit_value; pthread_create (&tid, 0, func, NULL); pthread_join (tid, &exit_value); E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 3

4 Σύγκρισηµε ιεργασίες Σκοπός ιεργασίες Νήµατα Αναγνωριστικό ηµιουργία νέου νήµατος pid_t getpid() fork() pthread_t pthread_self() pthread_create() Εκκίνηση νέου νήµατος exec() Αναµονήεκτέλεσης νήµατος Έξοδοςκαι καταστροφή νήµατος wait() exit() pthread_join() pthread_exit() E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 4

5 ιεργασίες main ( ) { fork ( ); fork ( ); fork ( ); Νήµατα main() { Σύγκρισηκώδικα pthread_create(0,func(),0,0); pthread_create(0,func(),0,0); pthread_create(0,func(),0,0); E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 5

6 ηµιουργίανήµατος int pthread_create (pthread_t *thread, const pthread_attr_t *attr, void *(*routine)(void *), void *arg); Οι ιδιότητες του νήµατος (µέγεθος στοίβας, πολιτική δροµολόγησης) µπορούν να καθοριστούν ρητά ή να τροποποιηθούν Αν attr == NULL τότε χρησιµοποιούνται οι προκαθορισµένες τιµές Η κλήση επιστρέφει 0 για επιτυχία, έναν αριθµό σφάλµατος για αποτυχία EAGAIN: Έλλειψη διαθέσιµων πόρων EINVAL: Μη αποδεκτή ιδιότητα EPERM: Το πρόγραµµα δεν έχει τα απαραίτητα δικαιώµατα Όλες οι συναρτήσεις των POSIX threads επιστρέφουν τιµές σφάλµατος εν θέτουν κάποια τιµή στη µεταβλητή errno Ένα νέο νήµα εκτελεί τη συνάρτηση που ορίζεται από το όρισµα routine arg είναι το µοναδικό όρισµα σε αυτή τη συνάρτηση Το αναγνωριστικό του νήµατος αποθηκεύεται στο *thread E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 6

7 #include <pthread.h> ηµιουργίανήµατος pthread_t tid; int res; extern void *start_routine(void *arg); void *arg; res = pthread_create(&tid, NULL, start_routine, arg); E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 7

8 struct data { int i; float f; ΠέρασµαΠολλών Παραµέτρων void *routine(void *arg) { struct data *d = (struct data *) arg; d->i = ; return 0; int main() { pthread_t tid; struct data main_data; main_data.i = 6; pthread_create(&tid, NULL, routine, (void *) &main_data);... E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 8

9 ΑναµονήΤερµατισµού Νήµατος int pthread_join (pthread_t thread, void **status); Το πρώτο όρισµα της συνάρτησης είναι το αναγνωριστικό του νήµατος και όχι ένας δείκτης σε αυτό Η τιµή επιστροφής της συνάρτησης που εκτελέστηκε από το νήµα αποθηκεύεται στoν χώρο που ορίζεται από την µεταβλητή status Πρέπει οπωσδήποτε να οριστεί ένα νήµα Η κλήση pthread_join() είναι blocking, αφού αναστέλλεται η εκτέλεση του νήµατος που την καλεί έως ότου τερµατίσει το νήµα που έχει οριστεί E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 9

10 ΑναµονήΤερµατισµού Νήµατος #include <pthread.h> pthread_t tid; int res; int status; res = pthread_join(tid, &status); res = pthread_join(tid, NULL); E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 10

11 Παράδειγµαµε ιεργασία void *work(void *arg); int main(int argc, char **argv) { int i = 1; int pid, status; pid = fork(); if(pid == 0) { printf( Child\n ); work((void*) i); exit(0); printf( Father of %d\n, pid); waitpid(pid, &status, 0); return 0; E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 11

12 void *work(void *arg); Παράδειγµαµε Νήµα int main(int argc, char **argv) { int i = 1; pthread_t thread; pthread_create(&thread, NULL, work,(void *) i); pthread_join(thread, NULL); printf( Child ended, exiting \n ); return 0; E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 12

13 ΤερµατισµόςΝήµατος void pthread_exit (void *status); Ένα νήµα τερµατίζει όταν επιστρέψει η συνάρτηση που εκτελεί ή ρητά καλώντας την pthread_exit() Ένα αποδεσµευµένο νήµα που τερµατίζει απελευθερώνει αµέσως τους πόρους του Αν είναι το τελευταίο νήµα στη διεργασία τότε αυτή τερµατίζει Ένα µη αποδεσµευµένο νήµα που τερµατίζει θα ελευθερώσει κάποιουςπόρους µα το αναγνωριστικό του και η τιµή εξόδου θα παραµείνουν στο σύστηµα σε µια κατάσταση όπως οι zombie διεργασίες µέχρις ότου ένα άλλο νήµα απαιτήσει την τιµή εξόδου του καλώντας pthread_join() Αν κληθεί η exit() τότε όλα τα νήµατα καταστρέφονται και η διεργασία τερµατίζει Αν επιστρέψει το βασικό νήµα της διεργασίας (main), ισοδυναµεί µε κλήση της exit() int status; pthread_exit(&status); return((void *)&status); E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 13

14 Αποδέσµευσηνήµατος int pthread_detach(pthread_t tid); Αποδεσµεύει ένα νήµα Η κλήση pthread_join() δεν θα χρησιµοποιηθεί για το συγκεκριµένο νήµα Η κλήση χρησιµοποιείται για να ενηµερωθεί το λειτουργικό σύστηµαότι δεν χρειάζεται από το πρόγραµµα η τιµή που επιστρέφει ένα νήµα Η αποδέσµευση ενός νήµατος σηµαίνει ότι το νήµα και οι πόροι του (π.χ. η στοίβα που µπορεί να έχει µέγεθος 1MB) µπορούν να επαναχρησιµοποιηθούν µόλις αυτό τερµατίσει Το αναγνωριστικό του µπορεί να επαναχρησιµοποιηθεί άµεσα Τερµατισµός διεργασιών και κλήση wait Το αναγνωριστικό ενός αποδεσµευµένου νήµατος είναι ακαθόριστο Τα νήµατα αποδεσµεύονται µε την κλήση pthread_detach(), µετά από την κλήση pthread_join(), και όταν ένα νήµα τερµατίζει ενώ η ιδιότητα PTHREAD_CREATE_DETACHED είχε τεθεί κατά τη δηµιουργία του E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 14

15 ηµιουργίακαι Αναµονή Νηµάτων void * func(void * arg) { sleep(1); return NULL; int main(int argc, char * argv[]) { pthread_t id[4]; int i; for (i = 0; i < 4; i++) { pthread_create(&id[i], NULL, func, NULL); for (i = 0; i < 4; i++) { pthread_join(id[i], NULL); return 0; E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 15

16 ηµιουργίακαι Αναµονή Νηµάτων void * func(void * arg) { int sec = (int) arg + 1; sleep((int) sec); return arg; /* pthread_exit(arg); */ int main(int argc, char * argv[]) { pthread_t id[4]; int i, result; for (i = 0; i < 4; i++) { pthread_create(&id[i], NULL, func, (void *) i); for (i = 0; i < 4; i++) { pthread_join(id[i], (void *) &result); /* result == i */; return 0; E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 16

17 ιάφορεςκλήσεις pthread_t pthread_self (void); Επιστρέφει την ταυτότητα του τρέχοντος νήµατος int pthread_equal (pthread_t tid1, pthread_t tid2); Συγκρίνει τις ταυτότητες δύο νηµάτων. Επιστρέφει 0 αν είναι ίδια. Για τη σύγκριση δεν πρέπει να χρησιµοποιείται ο τελεστής ισότητας (==) int sched_yield(void); Ενηµερώνει το δροµολογητή του συστήµατος ότι το τρέχον νήµα θα ελευθερώσει τον επεξεργαστή εφόσον ένα άλλο νήµα βρίσκεται σε αναµονή για εκτέλεση int pthread_setconcurrency(int threads); Επιτρέπει σε µια διεργασία να απαιτήσει έναν συγκεκριµένο ελάχιστο αριθµό νηµάτων επιπέδου πυρήνα για την εκτέλεση των POSIX threads. Σε κάποιες αρχιτεκτονικές µπορεί να οδηγήσει σε αποδοτικότερη δροµολόγηση νηµάτων E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 17

18 ΑναγνωριστικόΝήµατος pthread_t pthread_self (void); int pthread_equal (pthread_t tid1, pthread_t tid2); ========================================================== #include <pthread.h> pthread_t tid, tid1, tid2; int res; tid = pthread_self(); res = pthread_equal(tid1, tid2); E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 18

19 ΑποδέσµευσηΝήµατος int pthread_detach (pthread_t tid1, pthread_t tid2); ========================================================== #include <pthread.h> pthread_t tid; int res; res = pthread_create(&tid, NULL, func, (void *) &arg); res = pthread_detach(tid); E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 19

20 Συγχρονισµός Έστω η εντολή ticket = next_ticket++; /* 0 1 */ Στη γενική περίπτωση αυτό που πραγµατοποιείται είναι το εξής: ticket = temp = next_ticket; /* 0 */ ++temp; /* 1, µη ορατό */ next_ticket = temp; /* 1 */ E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 20

21 Εκτέλεσηµε ύο Νήµατα Thread 0 tkt = tmp = n_tkt; (0) ++tmp; (1) n_tkt = tmp; (1) Thread 1 tkt = tmp = n_tkt; (1) ++tmp; (2) n_tkt = tmp; (2) E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 21

22 υνατόσενάριο Εκτέλεσης Thread 0 tkt = tmp = n_tkt; (0) ++tmp; (1) n_tkt = tmp; (1) Thread 1 tkt = tmp = n_tkt; (0) ++tmp; (1) n_tkt = tmp; (1) E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 22

23 ΜηχανισµοίΣυγχρονισµού Κλειδιά αµοιβαίου αποκλεισµού (Mutexes) Μεταβλητές συνθήκης (Condition variables) Σηµαφόροι (Semaphores) Κλειδιά πολλαπλών αναγνωστών (Reader-Writer locks) Κλειδιά ενεργού αναµονής (Spinlocks) Φράγµατα εκτέλεσης (Barriers) E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 23

24 ΚλειδιάΑµοιβαίου Αποκλεισµού Ένα Mutex (Mutual Exclusion) είναι ένα στοιχείο που επιτρέπει πολλαπλά νήµατα να συγχρονίζουν την πρόσβασή τους σε κοινούς πόρους (π.χ. µεταβλητές) Όπως οι δυαδικοί σηµαφόροι, ένα mutexέχει δύο καταστάσεις, lockedκαι unlocked Μόνο ένα νήµα µπορεί να κλειδώσει ένα mutex Εφόσον ένα mutexέχει κλειδωθεί, τα υπόλοιπα νήµατα θα µπλοκάρουνόταν προσπαθήσουν να κλειδώσουν το ίδιο mutex, µέχρις ότου το νήµα ξεκλειδώσει το mutex Στο σηµείο αυτό ένα από τα νήµατα που περίµεναν θα αποκτήσουν το mutex, συνεχίζοντας την εκτέλεση του κώδικα E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 24

25 ΣτατικήΑρχικοποίηση mutex ήλωση και αρχικοποίηση ενός mutex: pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIALIZER; Κλείδωµα του mutex: pthread_mutex_lock(&mymutex); Ξεκλείδωµα του mutexαφού η κρίσιµη περιοχή κώδικα έχει εκτελεστεί: pthread_mutex_unlock(&mymutex); E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 25

26 υναµικήαρχικοποίηση mutex ήλωση ενός mutex: pthread_mutex_t mymutex; Αρχικοποίηση του mutex: pthread_mutex_init(&mymutex, (pthread_mutex_attr_t *) NULL); Κλείδωµα του mutex: pthread_mutex_lock(&mymutex); Ξεκλείδωµα του mutexόταν η κρίσιµη περιοχή κώδικα έχει εκτελεστεί: pthread_mutex_unlock(&mymutex); E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 26

27 υναµικά έσµευση mutex ήλωση ενός δείκτη σε mutex: pthread_mutex_t * mymutex; έσµευση µνήµης για το mutex (mymutex = malloc ) Προαιρετικά µπορεί να χρησιµοποιηθεί και µια µεταβλητή ιδιοτήτων για το mutex pthread_mutexattr_t mymutex_attr; pthread_mutexattr_init(&mymutex_attr); Αρχικοποίηση του mutex: pthread_mutex_init(&mymutex, &mymutex_attr); Κλείδωµα και ξεκλείδωµα του mutex όπως πριν Καταστροφή του mutex pthread_mutex_destroy(&mymutex); E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 27

28 Κλείδωµαµε Έλεγχο int pthread_mutex_trylock(pthread_mutex_t * mutex); Επιτρέπει ένα νήµα να δοκιµάσει να κλειδώσει ένα mutex Αν το mutex είναι διαθέσιµο τότε το νήµα κλειδώνει το mutex Αν το mutexείναι ήδη κλειδωµένο τότε η συνάρτησηενηµερώνει τον χρήστη επιστρέφοντας µια ειδική τιµή (EBUSY) Με τον τρόπο αυτό µπορούν να υλοποιηθούν spinlocks while (pthread_mutex_trylock(&mut) == EBUSY) /*sched_yield()*/; E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 28

29 Σύνοψη - Mutexes pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; int pthread_mutex_init (pthread_mutex_t *mutex, pthread_mutexattr_t *attr); int pthread_mutex_destroy (pthread_mutex_t *mutex); ========================================================= #include <pthread.h> pthread_mutex_t static_mutex = PTHREAD_MUTEX_INITIALIZER; pthread_mutex_t *dynamic_mutex; dynamic_mutex = (pthread_mutex_t *) malloc(sizeof(pthread_mutex_t)); pthread_mutex_init (&dynamic_mutex, NULL); pthread_mutex_destroy (&dynamic_mutex); free(dynamic_mutex); E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 29

30 Σύνοψη - Mutexes int pthread_mutex_lock (pthread_mutex_t *mutex); int pthread_mutex_trylock (pthread_mutex_t *mutex); int pthread_mutex_unlock (pthread_mutex_t *mutex); ========================================================== pthread_mutex_t mutex1 = PTHREAD_MUTEX_INITIALIZER; void * func(void * arg) { int res; res = pthread_mutex_trylock(&mutex1); /* EBUSY */; return 0; int main() { pthread_t t; pthread_mutex_lock(&mutex1); pthread_create(&t, NULL, func, NULL); sleep(2); pthread_mutex_unlock(&mutex1); return 0; E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 30

31 #include <pthread.h> Παράδειγµα pthread_mutex_t pi_lock = PTHREAD_MUTEX_INITIALIZER; double pi = 0.0; void *work(void *arg) {... pthread_mutex_lock(&pi_lock); pi += localsum; pthread_mutex_unlock(&pi_lock);... E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 31

32 #include <pthread.h> Υπολογισµόςτου π (1/2) double pi = 0.0; pthread_mutex_t pi_lock; double intervals; void *process(void *arg) { double width, localsum = 0, x; int i, int iproc = (*((char *) arg) - '0'); width = 1.0 / intervals; for (i=iproc; i<intervals; i+=2) { x = (i + 0.5) * width; localsum += 4.0 / (1.0 + x * x); localsum *= width; pthread_mutex_lock(&pi_lock); pi += localsum; pthread_mutex_unlock(&pi_lock); return(null); E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 32

33 Υπολογισµόςτου π (2/2) int main(int argc, char **argv) { pthread_t thread0, thread1; void * retval; /* Get the number of intervals */ intervals = atoi(argv[1]); pthread_mutex_init(&pi_lock, NULL); pthread_create(&thread0, NULL, process, "0 ); pthread_create(&thread1, NULL, process, "1"); pthread_join(thread0, &retval); pthread_join(thread1, &retval); printf("estimation of pi is %f\n", pi); exit(0); E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 33

34 ΠροβλήµαταΣυγχρονισµού Αδιέξοδα (deadlocks) Αντιστροφή προτεραιότητας (Priority Inversion) E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 34

35 Αδιέξοδα Αδιέξοδοµπορεί να συµβεί όταν οι µεταβλητές συγχρονισµού (mutexes) δεν κλειδώνονται µε την ίδια σειρά. Κανένα νήµα δεν επιτρέπει το άλλο να συνεχίσει την εκτέλεσή του: Thread 0 Thread 1 pthread_mutex_lock(&mut1); pthread_mutex_lock(&mut2); pthread_mutex_lock(&mut2); pthread_mutex_lock(&mut1); Επίσης όταν ένα mutexκλειδώνεται από το ίδιο νήµα δύο φορές (αναδροµικά) pthread_mutex_lock(&mut1); pthread_mutex_lock(&mut1); E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 35

36 Πιθανό σενάριο ΑντιστροφήΠροτεραιότητας Ένα νήµα χαµηλής προτεραιότητας κλειδώνει το mutex m Ένα νήµα µεσαίας προτεραιότητας εκτελείται διακόπτοντας το νήµα χαµηλής προτεραιότητας Ένα νήµα υψηλής προτεραιότητας εκτελείται διακόπτοντας το νήµα µεσαίας προτεραιότητας, και πρέπει να κλειδώσει το mutex mώστε να προχωρήσει Αποτέλεσµα Το mutexείναι κλειδωµένο από το νήµα χαµηλής προτεραιότητας που όµως δεν εκτελείται Ουσιαστικά µπλοκάρει το νήµα υψηλής προτεραιότητας και δεν το επιτρέπει να πάρει το mutex και να προχωρήσει E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 36

37 ΛύσειςΑντιστροφής Προτεραιότητας Πρωτόκολλο κληρονοµικότητας προτεραιότητας για mutexes: Ένα νήµα κληρονοµεί την υψηλότερη προτεραιότητα όλων των νηµάτων που µπλοκάρουν επειδή αυτό έχει δεσµεύσει ένα mutex Στο προηγούµενο παράδειγµα, όταν το νήµα υψηλής προτεραιότητας µπλοκάρει στο mutex m που έχει κλειδωθεί από το νήµα χαµηλής προτεραιότητας, η προτεραιότητα του πρώτου µεταφέρεται προσωρινά στο δεύτερο αυξάνοντας τις πιθανότητες να δροµολογηθεί γρηγορότερα Πρωτόκολλο µέγιστης προτεραιότητας Συσχετίζει µια προτεραιότητα µε ένα mutex, η ελάχιστη τιµή της οποίας είναι ίση µε τη µεγαλύτερη προτεραιότητα νήµατος που µπορεί να κλειδώσει το mutex Όταν ένα νήµα κλειδώνει ένα mutex, η προτεραιότητά του αυξάνεται σε αυτή του mutex E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 37

38 ΠολυνηµατικήΑσφάλεια Μιασυνάρτηση είναι thread-safe αν µπορεί να κληθεί µε ασφάλεια ταυτόχρονα από πολλαπλά νήµατα Μια reentrant συνάρτηση µπορεί να έχει ταυτόχρονα πολλές ενεργές κλήσεις, σε διάφορα σηµεία εκτέλεσής της, χωρίς να επηρεάζονται µεταξύ τους. Μια thread-safe συνάρτηση είναι είτε re-entrant είτε προστατεύεται από πολλαπλές ταυτόχρονες εκτελέσεις της µε κάποια µορφή αµοιβαίου αποκλεισµού. Η χρήση της reentrant (thread safe)έκδοσης των καθιερωµένων συναρτήσεων πραγµατοποιείται µε ορισµό _REENTRANT E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 38

39 ΠολυνηµατικήΑσφάλεια Όλεςσχεδόν οι συναρτήσεις είναι thread-safe, µε ελάχιστες εξαιρέσεις ctime, asctime getenv, putenv getopt gethostbyname, gethostbyaddr, getservbyname, getservbyport rand strtok, strerror Συναρτήσεις που χρησιµοποιούν στατικά αντικείµενα δεν είναι thread-safe E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 39

40 ΕπίτευξηΑσφάλειας 1. Προστασίαόλου του κώδικα της συνάρτησης µε ένα mutex Αποτελεί την ευκολότερη λύση αλλά µπορεί να µειώσει την απόδοση λόγω της σειριακής εκτέλεσης του κώδικα 2. Πέρασµα στατικών ανά νήµα δεδοµένων ως όρισµα (π.χ. strtok_r) Αυτό είναι δύσχρηστο και εκθέτει την εσωτερική υλοποίηση της συνάρτησης (rand_r, malloc) 3. Χρήση ιδιωτικών δεδοµένων νηµάτων (pthread_key_t) Κάθε νήµα έχει τα δικά του προσωπικά δεδοµένα που µόνο αυτό µπορεί να προσπελάσει E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 40

41 Παράδειγµα Μια thread-safe έκδοση της συνάρτηση rand Επιστρέφει 0 σε επιτυχία, µη µηδενική τιµή σε περίπτωση σφάλµατος (αποτυχία κλειδώµατος / ξεκλειδώµατος του mutex) Το όρισµα ranp δείχνει σε έναν ακέραιο µεταξύ 0 και RAND_MAX #include <pthread.h> #include <stdlib.h> int rand_r(int *ranp){ static pthread_mutex_t = PTHREAD_MUTEX_INITIALIZER; int error; if (error = pthread_mutex_lock(&lock)) return error; *ranp = rand(); return pthread_mutex_unlock(&lock); E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 41

42 ΜεταβλητέςΣυνθήκης Μιαµεταβλητή συνθήκης (Condition variable) είναι ένας µηχανισµός συγχρονισµού που επιτρέπει πολλαπλά νήµατα να περιµένουν σε µια συνθήκη, µέχρι κάποιο χρονικό σηµείο πέρα από οποίο µπορούν να συνεχίσουν Οι µεταβλητές συνθήκης διαφέρουν από τα mutexesεπειδή δεν προστατεύουν κώδικα αλλά κάποια λειτουργία Ένα νήµα θα περιµένει σε µια µεταβλητή συνθήκης έως ότου η µεταβλητή το ενηµερώσει ότι µπορεί να συνεχίσει Κάποιο άλλο νήµα σηµατοδοτεί τη µεταβλητή συνθήκης, επιτρέποντας άλλα νήµατα να συνεχίσουν Κάθε µεταβλητή συνθήκης, ως διαµοιραζόµενο δεδοµένο, συσχετίζεται και µε ένα συγκεκριµένο mutex E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 42

43 ΜεταβλητέςΣυνθήκης Μετις µεταβλητές συνθήκης αποφεύγεται ο συνεχής έλεγχος της κατάστασης των δεδοµένων Ένα νήµα που τροποποιεί την τιµή των δεδοµένα ειδοποιεί τα ενδιαφερόµενα µέσω µιας µεταβλητής συνθήκης Παράδειγµα: Σχήµα παραγωγού καταναλωτή µε χρήση ουράς δεδοµένων Το νήµα-καταναλωτής εξάγει και επεξεργάζεται στοιχεία της ουράς εφόσον αυτή δεν είναι άδεια, διαφορετικά µπλοκάρει Το νήµατα-παραγωγός προσθέτει στοιχεία στην ουρά και ειδοποιεί µε τη µεταβλητή συνθήκης το νήµα καταναλωτή που περιµένει Η αλληλεπίδραση των νηµάτων βασίζεται στο πλήθος των στοιχείων που υπάρχουν στην ουρά E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 43

44 Ορισµόςκαι Αρχικοποίηση int pthread_cond_init(pthread_cond_t * cond); Μια µεταβλητή συνθήκης περιγράφεται µε τον τύπο pthread_cond_t Στατική αρχικοποίηση: pthread_cond_t condition = PTHREAD_COND_INITIALIZER; υναµική αρχικοποίηση: pthread_cond_init(&condition); Μια µεταβλητή συνθήκης συσχετίζεται πάντοτε µε ένα mutex E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 44

45 ΑναµονήΣυνθήκης int pthread_cond_wait(pthread_cond_t *condition, pthread_mutex_t *mutex); Το νήµα αναστέλλει την εκτέλεση του µέχρι να σηµατοδοτηθεί η µεταβλητή συνθήκης Το νήµα πρέπει να έχει ήδη κλειδώσει το συσχετιζόµενο mutex To νήµα αναστέλλεται ενώ το mutexξεκλειδώνεται αυτόµατα ώστε να επιτραπεί η χρήση του από άλλα νήµατα Όταν το νήµα ενεργοποιηθεί µε την ειδοποίηση του µέσω της µεταβλητής συνθήκης, αυτόµατα το mutexείναι κλειδωµένο από το ίδιο E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 45

46 Ειδοποίηση-Αφύπνιση Νήµατος int pthread_cond_signal(pthread_cond_t *cond); int pthread_cond_broadcast(pthread_cond_t *cond); Με την pthread_cond_signalένα νήµα ειδοποιεί κάποιο άλλο νήµα που περιµένει σε κάποια µεταβλητή συνθήκης Με την pthread_cond_broadcast, ένα νήµα ειδοποιεί όλα τα νήµατα που περιµένουν σε κάποια µεταβλητή συνθήκης Το νήµα που πρόκειται να σηµατοδοτήσει µια µεταβλητή συνθήκης συνήθως έχει κλειδώσει το mutexπου συσχετίζεται µε αυτή. Στην περίπτωση αυτή πρέπει να ελευθερώσει το mutex ώστε να συνεχιστεί η εκτέλεση της pthread_cond_wait E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 46

47 ΤρόποςΧρήσης 1. Ένανήµα κλειδώνει ένα mutexπου σχετίζεται µε µια µεταβλητή συνθήκης 2. Το νήµα ελέγχει τη συνθήκη για να δει αν µπορεί να συνεχίσει 3. Εφόσον µπορεί (η µεταβλητή συνθήκης είναι αληθής): 1. Το νήµα εκτελεί την δουλειά του και 2. Ξεκλειδώνει το mutex 4. Εφόσον δεν µπορεί (η µεταβλητή συνθήκης είναι ψευδής): 1. Το νήµα αναστέλλεται καλώντας την pthread_cond_wait(&c,&m), και το mutex ξεκλειδώνεται αυτόµατα από το σύστηµα 2. Κάποιο άλλο νήµα καλεί την pthread_cond_signal(&c) για να θέσει τη συνθήκη σε αληθή κατάσταση 3. Το νήµα ξυπνάει από την αναµονή έχοντας το mutexαυτόµατα κλειδωµένο και εκτελεί τη δουλειά του 4. Το νήµα ξεκλειδώνει το mutex όταν έχει ολοκληρώσει E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 47

48 Παράδειγµα 1 Thread 0 Thread 1 T1: pthread_mutex_lock(&m); T2: while(!condition_ok) T3:while(pthread_cond_wait(&c,&m)); T4: T5: T6: T7: T8: go_ahead_and_do_it(); T9: pthread_mutex_unlock(&m); pthread_mutex_lock(&m); condition_ok = TRUE; pthread_cond_signal(&c); pthread_mutex_unlock(&m); E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 48

49 Παράδειγµα 2 Thread 0 Thread 1 for(...) { pthread_mutex_lock(&mut); count++; if (count== N){ /* Wake-up thread 1 */ pthread_cond_signal(&cond); pthread_mutex_unlock(&mut); //Do work pthread_mutex_lock(&mut); while(count<n) { pthread_cond_wait(&cond, &mut); pthread_mutex_unlock(&mut); //Do work E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 49

50 Παράδειγµα 3 Threads 0,1,,N-1 Thread N for(...) { pthread_mutex_lock(&mut); count++; if (count== N){ /* Wake-up thread N */ pthread_cond_signal(&cond); pthread_mutex_unlock(&mut); //Do work pthread_mutex_lock(&mut); while(count<n) { pthread_cond_wait(&cond, &mut); pthread_mutex_unlock(&mut); //Do work E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 50

51 Thread 0 Παράδειγµα 4 Thread 1,2,,N for(...) { pthread_mutex_lock(&mut); count++; if (count== N){ /* Wake-up threads 1..N */ pthread_cond_broadcast(&cond); pthread_mutex_unlock(&mut); //Do work pthread_mutex_lock(&mut); while(count<n) { pthread_cond_wait(&cond, &mut); pthread_mutex_unlock(&mut); //Do work E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 51

52 Παρατηρήσεις Παρατηρήσεις Μια µεταβλητή συνθήκης συσχετίζεται πάντα µε ένα mutex (κοινό δεδοµένο µε αναγκαιότητα αµοιβαίου αποκλεισµού) Η αναµονή επιστρέφει πάντα µε το mutex κλειδωµένο Οι µεταβλητές συνθήκες είναι για σηµατοδότηση κι όχι για αµοιβαίο αποκλεισµό Μια µεταβλητή συνθήκης και η συνθήκη συνδέονται µεταξύ τους και πρέπει να διαχειρίζονται µε ανάλογο τρόπο Η συνθήκη πρέπει να ελέγχεται κάθε φορά αν είναι αληθής Αναχαιτισµένεςαφυπνίσεις: Πριν επιστρέψει η ρουτίνα αναµονής µε το mutexκλειδωµένο, ένα άλλο νήµα µπορεί να έχει κλειδώσει το mutexκαι να αλλάξει τη κατάσταση της συνθήκης Χαλαρές συνθήκες:ίσως είναι ευκολότερο να χρησιµοποιείται µια προσέγγιση της πραγµατικής κατάστασης (π.χ. ίσως υπάρχει δουλειά ) Ψευδείς αφυπνίσεις: Επιστροφή της wait χωρίς να έχει σηµατοδοτηθεί η µεταβλητή συνθήκης (π.χ. σε πολυεπεξεργαστικά συστήµατα) E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 52

53 ΜεταβλητέςΣυνθήκης υνατή η χρήση της µεταβλητής συνθήκης χωρίς συνθήκη Tο mutexπρέπει να κλειδωθεί πριν την κλήση της waitκαι να ελευθερωθεί µετά την επιστροφή της Παράδειγµα: pthread_mutex_lock(&mut); pthread_cond_wait(&cond, &mut); pthread_mutex_unlock(&mut); E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 53

54 ΜεταβλητέςΣυνθήκης Επέκταση pthread_cond_timedwait(&condition, &mutex, (struct timespec *)expiration); Αναµονή νήµατος σε µια µεταβλητή συνθήκης, θέτοντας κατάλληλο χρονικό περιορισµό. Αν συµβεί timeout, τότε η ρουτίνα επιστρέφει ETIMEDOUT. =========================================================== struct timespec timeout; /* Wait on the condition variable for 2 seconds */ timeout.tv_sec = time(null) + 2; timeout.tv_nsec = 0; pthread_cond_timedwait(&condition, &mutex, &timeout); E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων 54

Χρήση των POSIX Threads

Χρήση των POSIX Threads Ε-85: Ειδικά Θέµατα Λογισµικού Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων Χειµερινό Εξάµηνο 2009-10 «Προγραµµατισµός Νηµάτων Προτύπου POSIX» Παναγιώτης Χατζηδούκας (Π.Δ. 407/80) Χρήση των POSIX Threads

Διαβάστε περισσότερα

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

Νήµατα. Πολύ σηµαντικό Νήµατα Πολύ σηµαντικό 1 Νήµατα (συν.) Σηµαντικό 2 Νήµατα vs ιεργασίες Νήµατα ιεργασίες Χώρος εδοµένων Περιγραφητές Αρχείων fork exit exec Σήµατα Κοινός. Ότι αλλάζει το 1 νήµα το βλέπουν/ αλλάζουν και τα

Διαβάστε περισσότερα

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

Παράλληλη Επεξεργασία Παράλληλη Επεξεργασία Φροντιστήριο: Εισαγωγή στα Πολυεπεξεργαστικά Συστήματα Διερασίες και Νήματα σε Πολυεπεξεργαστικά Συστήματα Εργαστήριο Πληροφοριακών Συστημάτων Υψηλής Επίδοσης Parallel and Distributed

Διαβάστε περισσότερα

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

Εργαστήριο 14. Συγχρονισμός Νημάτων (χρήση pthread_mutex_t, pthread_cond_t) Εργαστήριο 14 Συγχρονισμός Νημάτων (χρήση pthread_mutex_t, pthread_cond_t) Να γράψετε πρόγραμμα που να δημιουργεί 1 νήμα Έτσι στο πρόγραμμα σας θα υπάρχουν 2 νήματα (το ένα νήμα είναι το αρχικό νήμα που

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Λειτουργικά Συστήματα Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Λειτουργικά Συστήματα Ενότητα: Πολυνηματικός Προγραμματισμός Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Προγραμματισμός με Κοινόχρηστο Χώρο Διευθύνσεων 4 Προγραμματισμός με Κοινόχρηστο Χώρο Διευθύνσεων 4 Με το κεφάλαιο αυτό, αλλάζουμε θεματολογία και μπαίνουμε στον χώρο του προγραμματισμού των παράλληλων συστημάτων. Σε αντίθεση με τους κλασικούς σειριακούς

Διαβάστε περισσότερα

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διεργασίες και Νήματα Εργαστηριακές Ασκήσεις ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Διεργασίες και Νήματα Εργαστηριακές Ασκήσεις Υλικό από: Modern Operating Systems Laboratory Exercises, Shrivakan Mishra Σύνθεση Κ.Γ. Μαργαρίτης, Τμήμα Εφαρμοσμένης Πληροφορικής, Πανεπιστήμιο

Διαβάστε περισσότερα

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

Λειτουργικά Συστήματα Τμήμα Μηχανικών Πληροφορικής & Τηλεπικοινωνιών Λειτουργικά Συστήματα Ενότητα: Πολυνηματικός Προγραμματισμός Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών

Διαβάστε περισσότερα

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

Εκφωνήσεις ασκήσεων εργαστηρίου 2 (pthreads) Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος 2016-2017 ΤΕΙ Ηπείρου - Άρτα Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Γκόγκος Χρήστος Εκφωνήσεις ασκήσεων εργαστηρίου

Διαβάστε περισσότερα

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

NIKOΛΑΟΣ ΝΤΙΡΛΗΣ 5ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΙΘΟΥΣΑ Β4 NIKOΛΑΟΣ ΝΤΙΡΛΗΣ 5ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΑΙΘΟΥΣΑ Β4 1 Ένα thread έχει: ID, program counter, register set, stack Μοιράζεται με τα άλλα threads της ίδιας διεργασίας τον κώδικα, τα δεδομένα και τους άλλους πόρους

Διαβάστε περισσότερα

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

Ε-85: Ειδικά Θέµατα Λογισµικού Ε-85: Ειδικά Θέµατα Λογισµικού Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων Χειµερινό Εξάµηνο 2009-10 «ιεργασίες και Νήµατα» Παναγιώτης Χατζηδούκας (Π.Δ. 407/80) E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων

Διαβάστε περισσότερα

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

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1 Δημιουργία & Τερματισμός Διεργασιών Προγραμματισμός II 1 lalis@inf.uth.gr Δημιουργία νέας διεργασίας pid_t fork() Η fork δεν έχει παραμέτρους Δημιουργεί μια νέα διεργασία που είναι ένα αντίγραφο της διεργασίας

Διαβάστε περισσότερα

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

ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΔΙΑΧΕΙΡΙΣΗ ΑΔΙΕΞΟΔΩΝ (DEADLOCKS) Γενικά, για τη διαχείριση των αδιεξόδων

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1 Δημιουργία & Τερματισμός Διεργασιών Προγραμματισμός II 1 lalis@inf.uth.gr Δημιουργία νέας διεργασίας pid_t fork() Η fork δεν έχει παραμέτρους Δημιουργεί μια νέα διεργασία που είναι ένα αντίγραφο της διεργασίας

Διαβάστε περισσότερα

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

Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ Εισαγωγή Σκοπός τόσο αυτού του εργαστηρίου, όσο και των εργαστηρίων που ακολουθούν, είναι να γνωρίσουμε τους τρόπους δημιουργίας και διαχείρισης των διεργασιών (processes)

Διαβάστε περισσότερα

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

Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος 2016-2017 ΤΕΙ Ηπείρου - Άρτα Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Παραδείγματα με pthreads Γκόγκος Χρήστος Παράδειγμα

Διαβάστε περισσότερα

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

Ε-85: Ειδικά Θέµατα Λογισµικού Ε-85: Ειδικά Θέµατα Λογισµικού Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων Χειµερινό Εξάµηνο 2009-10 «Ειδικά Θέµατα Προγραµµατισµού Νηµάτων» Παναγιώτης Χατζηδούκας (Π.Δ. 407/80) E-85: Ε.Θ.Λ: Προγραµµατισµός

Διαβάστε περισσότερα

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

Ειδικά Θέµατα. Αντικείµενα Ιδιοτήτων. Ε-85: Ειδικά Θέµατα Λογισµικού. Αντικείµενα ιδιοτήτων (attributes objects) Ε-85: Ειδικά Θέµατα Λογισµικού Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων Χειµερινό Εξάµηνο 2009-10 «Ειδικά Θέµατα Προγραµµατισµού Νηµάτων» Παναγιώτης Χατζηδούκας (Π.Δ. 407/80) Ειδικά Θέµατα Αντικείµενα

Διαβάστε περισσότερα

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

Κατηγορίες Νηµάτων. Νήµατα Επιπέδου Πυρήνα. Νήµατα Επιπέδου Χρήστη. «Νήµατα Επιπέδου Χρήστη» Ε-85: Ειδικά Θέµατα Λογισµικού Ε-85: Ειδικά Θέµατα Λογισµικού Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων Χειµερινό Εξάµηνο 2009-10 «Νήµατα Επιπέδου Χρήστη» Κατηγορίες Νηµάτων Υπάρχουν δύο κατηγορίες νηµάτων Νήµατα επιπέδου πυρήνα (kernel

Διαβάστε περισσότερα

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

Προγραµµατισµός Νηµάτων. Αρχικοποίηση µιας Φοράς pthread_once_t once_block = PTHREAD_ONCE_INIT; pthread_mutex_t mutex; Ε-85: Ειδικά Θέµατα Λογισµικού Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων Προγραµµατισµός Νηµάτων Χειµερινό Εξάµηνο 2009-10 «Επαναληπτικές Ασκήσεις» Παναγιώτης Χατζηδούκας (Π.Δ. 407/80) E-85: Ε.Θ.Λ: Προγραµµατισµός

Διαβάστε περισσότερα

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

Ε-85: Ειδικά Θέµατα Λογισµικού Ε-85: Ειδικά Θέµατα Λογισµικού Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων Χειµερινό Εξάµηνο 2009-10 «Επαναληπτικές Ασκήσεις» Παναγιώτης Χατζηδούκας (Π.Δ. 407/80) E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων

Διαβάστε περισσότερα

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact: ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact: nifantop@unipi.gr Περιεχόμενα ενότητας Διεργασίες Κλήσεις δημιουργίας και τερματισμού διεργασιών Επικοινωνία διεργασιών μέσω

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr Η έννοια της διεργασίας ιεργασία (process) είναι ο µηχανισµός εκτέλεσης ενός προγράµµατος σε ένα λειτουργικό σύστηµα. Η διεργασία είναι µια ενεργή

Διαβάστε περισσότερα

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

26/3/2012 Προγραμματισμός συστημάτων κοινόχρηστης μνήμης (Ι) Β. Δημακόπουλος Υ07 Παράλληλα Συστήματα 2011-12 26/3/2012 Προγραμματισμός συστημάτων κοινόχρηστης μνήμης (Ι) Β. Δημακόπουλος Από τα εισαγωγικά για να εκμεταλλευτούμε πολλαπλούς επεξεργαστές, έχουμε δύο βασικές τεχνικές:

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ No:11 Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων

Διαβάστε περισσότερα

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

Θέτοντας και επιστρέφοντας την τιµή της προτεραιότητας διεργασίας Θέτοντας και επιστρέφοντας την τιµή της προτεραιότητας διεργασίας Το επίπεδο προτεραιότητας µιας διεργασίας µπορεί να αλλάξει µε χρήση της συνάρτησης nice. Κάθε διεργασία διαθέτει µια τιµή που καλείται

Διαβάστε περισσότερα

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

Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας Συστήματα Παράλληλης και Κατανεμημένης Επεξεργασίας Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ No:10 Δρ. Μηνάς Δασυγένης mdasyg@ieee.org Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος 2011-2012. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Δυναμική Διαχείριση Μνήμης Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2011-2012 Ανάγκη για Δυναμική Μνήμη Στατική Μνήμη Μέχρι τώρα χρησιμοποιούσαμε

Διαβάστε περισσότερα

Περίληψη. Υπερυπολογιστές. Υπολογιστικά προβλήµατα. TOP 500 (Ιούνιος 2007) TOP 500 (Ιούνιος 2009) Ε-85: Ειδικά Θέµατα Λογισµικού

Περίληψη. Υπερυπολογιστές. Υπολογιστικά προβλήµατα. TOP 500 (Ιούνιος 2007) TOP 500 (Ιούνιος 2009) Ε-85: Ειδικά Θέµατα Λογισµικού Ε-85: Ειδικά Θέµατα Λογισµικού Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων Χειµερινό Εξάµηνο 2009-10 «Υπολογιστικά Συστήµατα Υψηλών Επιδόσεων και Εφαρµογές» Περίληψη Υπερυπολογιστές Πολυεπεξεργαστικά συστήµατα

Διαβάστε περισσότερα

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

Υ07 Παράλληλα Συστήματα & 29/3/2016 Προγραμματισμός συστημάτων κοινόχρηστης μνήμης (Ι) Υ07 Παράλληλα Συστήματα 2015-16 22 & 29/3/2016 Προγραμματισμός συστημάτων κοινόχρηστης μνήμης (Ι) Από τα εισαγωγικά για να εκμεταλλευτούμε πολλαπλούς επεξεργαστές, έχουμε δύο βασικές τεχνικές: Πολλαπλές

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Προγραμματισμός Ι (ΗΥ120) Προγραμματισμός Ι (ΗΥ120) Διάλεξη 9: Συναρτήσεις Ορισμός συναρτήσεων () { /* δήλωση μεταβλητών */ /* εντολές ελέγχου/επεξεργασίας */ o Μια συνάρτηση ορίζεται δίνοντας

Διαβάστε περισσότερα

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

ΝΗΜΑΤΑ - ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ ΕΘΝΙΚΟ ΚΑΙ ΚΑΠΟΔΙΣΤΡΙΑΚΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΑΘΗΝΩΝ ΤΜΗΜΑ ΠΛΗΡΟΦΟΡΙΚΗΣ & ΤΗΛΕΠΙΚΟΙΝΩΝΙΩΝ ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ 2017-2018 ΧΕΙΜΕΡΙΝΟ ΕΞΑΜΗΝΟ ΜΑΘΗΜΑ: ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Νήματα (Threads) ΝΗΜΑΤΑ - ΕΡΓΑΣΤΗΡΙΟ 1 - ΣΗΜΕΙΩΣΕΙΣ

Διαβάστε περισσότερα

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

Ε-85: Ειδικά Θέµατα Λογισµικού Ε-85: Ειδικά Θέµατα Λογισµικού Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων Χειµερινό Εξάµηνο 2009-10 «Υπολογιστικά Συστήµατα Υψηλών Επιδόσεων και Εφαρµογές» Παναγιώτης Χατζηδούκας (Π.Δ. 407/80) E-85: Ε.Θ.Λ:

Διαβάστε περισσότερα

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

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ. Διαδιεργασιακή Επικοινωνία Εργαστηριακές Ασκήσεις ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Διαδιεργασιακή Επικοινωνία Εργαστηριακές Ασκήσεις Υλικό από: Modern Operating Systems Laboratory Exercises, Shrivakan Mishra Σύνθεση Κ.Γ. Μαργαρίτης, Τμήμα Εφαρμοσμένης Πληροφορικής,

Διαβάστε περισσότερα

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής

Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής Πανεπιστήμιο Θεσσαλίας Τμήμα Πληροφορικής ΕΥ311-Διαδικτυακός και Ταυτόχρονος Προγραμματισμός Εργαστήριο: Παραδείγματα δημιουργίας διεργασιών στο Linux Ένα πρόγραμμα (το στιγμιότυπο της εκτέλεσης του οποίου

Διαβάστε περισσότερα

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

Ιδιοκτησία Αντικειµένου Software Transactional Memory H STM υποστηρίζει την εκτέλεση δοσοληψιών από τις διεργασίες, οι οποίες περιέχουν λειτουργίες που ο χρήστης θέλει να εκτελέσει στα διαµοιραζόµενα αντικείµενα. H STM εγγυάται

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Δυναμική Κατανομή Μνήμης Δυναμική εκχώρηση μνήμης Σωρός Συναρτήσεις malloc(), calloc(), realloc(), free() Δυναμικές δομές

Διαβάστε περισσότερα

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

Ανάπτυξη και Σχεδίαση Λογισμικού Ανάπτυξη και Σχεδίαση Λογισμικού Η γλώσσα προγραμματισμού C Γεώργιος Δημητρίου Συναρτήσεις της C Τα Λοιπά Στοίβα και μηχανισμός κλήσης Αναδρομικές συναρτήσεις Στατικές μεταβλητές Άλλα θέματα Μηχανισμός

Διαβάστε περισσότερα

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

ή α α POSIX Threads ( έ ος 1 ο ) ι ο ι ά σ ή α α ο ισ η ια ή ό η α # 3 : ισα ω ή σ α ή α α POSIX Threads ( έ ος 1 ο ) ή α: οφο ι ής η α ο ό ηση ο α ό αι ι ό ι ό έχ ι α α χθ ί σ α αίσια ο αι ι ού έ ο ο ι άσ ο α. ο έ ο «Α οι ά Α α η αϊ

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

Λειτουργικά Συστήματα Λειτουργικά Συστήματα Ενότητα: ΕΡΓΑΣΤΗΡΙΑΚΗ ΑΣΚΗΣΗ N:08 Δρ. Μηνάς Δασυγένης mdasyg@ieee.rg Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών Εργαστήριο Ψηφιακών Συστημάτων και Αρχιτεκτονικής Υπολογιστών

Διαβάστε περισσότερα

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

Εκφωνήσεις ασκήσεων εργαστηρίου 1 Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος 2016-2017 ΤΕΙ Ηπείρου - Άρτα Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Γκόγκος Χρήστος Εκφωνήσεις ασκήσεων εργαστηρίου

Διαβάστε περισσότερα

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

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ IΙ Λύβας Χρήστος chrislibas@ssl-unipi.gr Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος >_ ΔΙΕΡΓΑΣΙΕΣ +- Με τον όρο διεργασία στο UNIX εννοούμε τη δυναμικη πράξη της

Διαβάστε περισσότερα

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

Λειτουργικά Συστήματα 7ο εξάμηνο, Ακαδημαϊκή περίοδος ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ ΣΧΟΛΗ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ KΑΙ ΜΗΧΑΝΙΚΩΝ ΥΠΟΛΟΓΙΣΤΩΝ ΤΟΜΕΑΣ ΤΕΧΝΟΛΟΓΙΑΣ ΠΛΗΡΟΦΟΡΙΚΗΣ ΚΑΙ ΥΠΟΛΟΓΙΣΤΩΝ ΕΡΓΑΣΤΗΡΙΟ ΥΠΟΛΟΓΙΣΤΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ http://www.cslab.ece.ntua.gr Λειτουργικά

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Ενότητα 14 Δυναμική διαχείριση μνήμης Πανεπιστήμιο Αιγαίου Τμήμα Μηχανικών Πληροφοριακών και Επικοινωνιακών Συστημάτων Στατική δέσμευση μνήμης Με τη δήλωση απλών μεταβλητών

Διαβάστε περισσότερα

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

Προγραμματισμός Η/Υ (ΤΛ2007 ) Τμήμα Ηλεκτρονικών Μηχανικών Τ.Ε.Ι. Κρήτης Προγραμματισμός Η/Υ (ΤΛ2007 ) Δρ. Μηχ. Νικόλαος Πετράκης (npet@chania.teicrete.gr) Ιστοσελίδα Μαθήματος: https://eclass.chania.teicrete.gr/ Εξάμηνο: Εαρινό 2014-15

Διαβάστε περισσότερα

ΠΛΗ111. Ανοιξη Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης

ΠΛΗ111. Ανοιξη Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C. Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης ΠΛΗ111 οµηµένος Προγραµµατισµός Ανοιξη 2005 Μάθηµα 1 ο Ανασκόπηση της Γλώσσας Προγραµµατισµού C Τµήµα Ηλεκτρονικών Μηχανικών και Μηχανικών Υπολογιστών Πολυτεχνείο Κρήτης Ανασκόπηση της C είκτες Πίνακες

Διαβάστε περισσότερα

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi Προϋποθέσεις για Αµοιβαίο Αποκλεισµό Μόνο µία διεργασία σε κρίσιµο τµήµασεκοινό πόρο Μία διεργασία που σταµατά σε µη κρίσιµο σηµείο δεν πρέπει να επιρεάζει τις υπόλοιπες διεργασίες εν πρέπει να υπάρχει

Διαβάστε περισσότερα

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

Λύβας Χρήστος Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ IΙ Λύβας Χρήστος chrislibas@ssl-unipi.gr Αρχική επιµέλεια Πιτροπάκης Νικόλαος και Υφαντόπουλος Νικόλαος >_ ΣΥΝΑΡΤΗΣΕΙΣ ΣΤΗ C (1/3) +- Στη C χρησιμοποιούμε συχνα τις συναρτήσεις (functions),

Διαβάστε περισσότερα

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

Α. unsigned int Β. double. Γ. int. unsigned char x = 1; x = x + x ; x = x * x ; x = x ^ x ; printf(%u\n, x); Β. unsigned char ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Β Περιόδου 2015 (8/9/2015) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

Διαβάστε περισσότερα

Η βασική συνάρτηση προγράμματος main()

Η βασική συνάρτηση προγράμματος main() Η βασική συνάρτηση προγράμματος main() HEADER FILES main(){ ΔΗΛΩΣΕΙΣ ΜΕΤΑΒΛΗΤΩΝ ΕΝΤΟΛΕΣ (σειριακές, επιλογής ή επανάληψης) ΕΠΙΣΤΡΕΦΟΜΕΝΟΣ ΤΥΠΟΣ (return 0;) Συναρτήσεις Η συνάρτηση είναι ένα υποπρόγραμμα

Διαβάστε περισσότερα

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

Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II. ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II ( ιάλεξη 12) ιδάσκων: ηµήτρης Ζεϊναλιπούρ 12-1 Ανασκόπηση οµής Προγράµµατος µε Συναρτήσεις #include 1 void PrintMessage (); Πρότυπο ( ήλωση) Συνάρτησης (

Διαβάστε περισσότερα

Προγραμματισμός συστημάτων UNIX/POSIX. Διεργασίες (processes)

Προγραμματισμός συστημάτων UNIX/POSIX. Διεργασίες (processes) Προγραμματισμός συστημάτων UNIX/POSIX Διεργασίες (processes) Δομή αρχείου προγράμματος Πρόγραμμα (program) ονομάζεται το εκτελέσιμο αρχείο που βρίσκεται αποθηκευμένο στο δίσκο (π.χ. το a.out, ή το ls ή

Διαβάστε περισσότερα

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

Κεφάλαιο VΙΙ (λίγο διαφορετικό) Κοινόχρηστος χώρος διευθύνσεων Κεφάλαιο VΙΙ (λίγο διαφορετικό) «Οντότητες» εκτέλεσης κώδικα Σειριακό πρόγραμμα για υπολογισμό του π = 3.141592 #define N 512 float pi = 0.0, W = 1.0/Ν; main() int i; for

Διαβάστε περισσότερα

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011 Εισαγωγή στον Προγραµµατισµό Διάλεξη 2 η : Βασικές Έννοιες της γλώσσας προγραµµατισµού C Χειµερινό Εξάµηνο 2011 Hello World /* Αρχείο hello.c * Εµφανίζει στην οθόνη το * µήνυµα hello world */ #include

Διαβάστε περισσότερα

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

#include <stdlib.h> Α. [-128,127] Β. [-127,128] Γ. [-128,128] ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Εξετάσεις Α Περιόδου 2017 (27/1/2017) ΟΝΟΜΑΤΕΠΩΝΥΜΟ:................................................................................ Α.Μ.:...............................................

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός ΕΛΛΗΝΙΚΗ ΔΗΜΟΚΡΑΤΙΑ Ανώτατο Εκπαιδευτικό Ίδρυμα Πειραιά Τεχνολογικού Τομέα Δομημένος Προγραμματισμός Ενότητα: Συναρτήσεις θεωρία Δ. Ε. Μετάφας Τμ. Ηλεκτρονικών Μηχ. Τ.Ε. Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

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

Μεθόδων Επίλυσης Προβλημάτων ΕΠΛ 032.3: 3: Προγραμματισμός Μεθόδων Επίλυσης Προβλημάτων Αχιλλέας Αχιλλέως, Τμήμα Πληροφορικής, Πανεπιστήμιο Κύπρου Email: achilleas@cs.ucy.ac.cy Κεφάλαιο 9 Συναρτήσεις Μέρος II Θέματα ιάλεξης Μη- ομημένος

Διαβάστε περισσότερα

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

Ε-85: Ειδικά Θέµατα Λογισµικού Ε-85: Ειδικά Θέµατα Λογισµικού Προγραµµατισµός Συστηµάτων Υψηλών Επιδόσεων Χειµερινό Εξάµηνο 2009-10 «Νήµατα Επιπέδου Χρήστη» Παναγιώτης Χατζηδούκας (Π.Δ. 407/80) E-85: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων

Διαβάστε περισσότερα

Εισαγωγή στον Προγραμματισμό (με. τη C)

Εισαγωγή στον Προγραμματισμό (με. τη C) Υποχρεωτικό Μάθημα 3 ου Εξαμήνου Χειμερινό Εξάμηνο Ακ. Έτους 20 Τμήμα Επιστήμης Υπολογιστών Πανεπιστήμιο Κρήτης Εισαγωγή στον Προγραμματισμό (με τη C) Διδάσκουσα: Φατούρου Παναγιώτα faturu [at] csd.uoc.gr

Διαβάστε περισσότερα

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

Εργαστήριο 5 fork(), exec(), signals Εργαστήριο 5 fork(), exec(), signals Στο εργαστήριο θα μελετηθούν: Παραδείγματα χρήσης των συναρτήσεων fork και exec Συνάρτηση waitpid Συνάρτηση WIFEXITED Συνάρτηση WEXITSTATUS Παράδειγμα χρήσης σημάτων

Διαβάστε περισσότερα

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

Κεφάλαιο , 3.2: Συναρτήσεις II. (Διάλεξη 12) Κεφάλαιο 3.5-3.6, 3.2: Συναρτήσεις II (Διάλεξη 12) 12-1 Ανασκόπηση Δομής Προγράμματος με Συναρτήσεις 1 void PrintMessage (); Πρότυπο (Δήλωση) Συνάρτησης (Δηλώνουν τι επιπλέον συναρτήσεις θα χρησιμοποιήσουμε

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα

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

ΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 2ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 26 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4 ΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 2ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 26 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4 1 Διαχείριση εργασιών fork(), exit(), exec() Επικοινωνία διεργασιών signals, sockets και client/server, shared memory Συγχρονισμός

Διαβάστε περισσότερα

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

Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Διάλεξη 3η: Τύποι Μεταβλητών, Τελεστές, Είσοδος/Έξοδος Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μεταβλητές,

Διαβάστε περισσότερα

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C Οι συναρτήσεις τι είναι Πρόκειται για ανεξάρτητα τμήματα ενός προγράμματος (υποπρογράμματα) που επιτελούν συγκεκριμένες εργασίες. Καλούνται από το κυρίως

Διαβάστε περισσότερα

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

Π. Σταθοπούλου ή Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Π. Σταθοπούλου pstath@ece.upatras.gr ή pstath@upatras.gr Οµάδα Α (Φοιτητές µε µονό αριθµό Μητρώου ) ιδασκαλία : Παρασκευή 11πµ-13µµ ΗΛ7 Φροντιστήριο : ευτέρα 11πµ-12πµ ΗΛ4 ❶ Προετοιµασία για το 1 ο Εργαστήριο

Διαβάστε περισσότερα

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

Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΚΤΑ ΑΚΑΔΗΜΑΪΚΑ ΜΑΘΗΜΑΤΑ Προγραμματισμός Υπολογιστών & Υπολογιστική Φυσική Ενότητα 7: Συναρτήσεις Νικόλαος Στεργιούλας Τμήμα Φυσικής Άδειες Χρήσης Το παρόν εκπαιδευτικό

Διαβάστε περισσότερα

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

Εισαγωγή εκτελέσιμου κώδικα σε διεργασίες 0x375 - Thessaloniki Tech Talks Sessions Event 0x2 19 Μαρτίου 2010 Περιεχόμενα 1 Εισαγωγή 2 Η κλήση συστήματος ptrace 3 Νήματα 4 Το πρόγραμμα εισαγωγής κώδικα prez 5 Επίλογος Γιατί; Πολλές φορές θέλουμε

Διαβάστε περισσότερα

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

Λειτουργικά Συστήματα Η/Υ Λειτουργικά Συστήματα Η/Υ Κεφάλαιο 5 «Αμοιβαίος Αποκλεισμός» Διδάσκων: Δ Λιαροκάπης Διαφάνειες: Π. Χατζηδούκας 1 Αμοιβαίος Αποκλεισμός 1. Εισαγωγή 2. Κρίσιμα τμήματα (Critical Sections) 3. Υλοποίηση του

Διαβάστε περισσότερα

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

Συγχρονισμός & σηματοφόροι. Προγραμματισμός II 1 Συγχρονισμός & σηματοφόροι Προγραμματισμός II 1 lalis@inf.uth.gr Ταυτόχρονη εκτέλεση Οι διεργασίες εκτελούνται ταυτόχρονα μεταξύ τους Ο προγραμματιστής δεν ελέγχει την εναλλαγή Τι γίνεται αν δύο ή περισσότερες

Διαβάστε περισσότερα

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

Ελεγκτές/Παρακολουθητές (Monitors) Ταυτόχρονος Προγραμματισμός 1 Ελεγκτές/Παρακολουθητές (Monitors) 1 lalis@inf.uth.gr Ελεγκτές Αμοιβαίος αποκλεισμός στο πλαίσιο ενός τμήματος λογισμικού που προσπελάζεται με δομημένο τρόπο, μέσω προκαθορισμένης διασύνδεσης (API) Ο συγχρονισμός

Διαβάστε περισσότερα

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( )

Κλήση Συναρτήσεων ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ. Γεώργιος Παπαϊωάννου ( ) ΚΛΗΣΗ ΣΥΝΑΡΤΗΣΕΩΝ Γεώργιος Παπαϊωάννου (2013-16) gepap@aueb.gr Περιγραφή: Μορφές μεταβίβασης ορισμάτων σε συναρτήσεις (και μεθόδους) και οι επιπτώσεις τους Επιστροφή τιμών από κλήση συναρτήσεων Υπερφόρτωση

Διαβάστε περισσότερα

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

Παράλληλη Επεξεργασία Παράλληλη Επεξεργασία Φροντιστήριο: Εισαγωγή στο OpenMP Εργαστήριο Πληροφοριακών Συστημάτων Υψηλής Επίδοσης Parallel and Distributed Systems Group Τι είναι το OpenMP Πρότυπο Επέκταση στη C/C++ και τη Fortran

Διαβάστε περισσότερα

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής

ΗΥ-150. Προγραµµατισµός. Εντολές Ελέγχου Ροής ΗΥ-150 Εντολές Ελέγχου Ροής Σειριακή εκτέλεση εντολών Όλα τα προγράµµατα «γράφονται» χρησιµοποιώντας 3 είδη εντολών: Σειριακές εντολές (sequential built in C) Εντολές απόφασης (if, if/else, switch) Περιλαµβάνει

Διαβάστε περισσότερα

Διαδικασιακός Προγραμματισμός

Διαδικασιακός Προγραμματισμός Τμήμα ΜΗΧΑΝΙΚΩΝ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕ ΤΕΙ ΔΥΤΙΚΗΣ ΕΛΛΑΔΑΣ Διαδικασιακός Προγραμματισμός Διάλεξη 14 η Διαχείριση Μνήμης και Δομές Δεδομένων Οι διαλέξεις βασίζονται στο βιβλίο των Τσελίκη και Τσελίκα C: Από τη

Διαβάστε περισσότερα

Η γλώσσα προγραμματισμού C

Η γλώσσα προγραμματισμού C Η γλώσσα προγραμματισμού C Οι συναρτήσεις στη C Οι συναρτήσεις τι είναι Πρόκειται για ανεξάρτητα τμήματα ενός προγράμματος (υποπρογράμματα) που επιτελούν συγκεκριμένες εργασίες. Καλούνται από το κυρίως

Διαβάστε περισσότερα

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

ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής ΕΡΓΑΣΤΗΡΙΟ 9: Συμβολοσειρές και Ορίσματα Γραμμής Εντολής Στο εργαστήριο αυτό θα δούμε πώς ορίζονται και πώς χρησιμοποιούνται οι συμβολοσειρές στην C. Επίσης, θα μελετήσουμε κάποιες από τις συναρτήσεις

Διαβάστε περισσότερα

Η πολυνηματική γλώσσα προγραμματισμού Cilk

Η πολυνηματική γλώσσα προγραμματισμού Cilk Η πολυνηματική γλώσσα προγραμματισμού Cilk Β Καρακάσης Ερευνητικά Θέματα Υλοποίησης Γλωσσών Προγραμματισμού Μεταπτυχιακό Μάθημα (688), ΣΗΜΜΥ Νοέμβριος 2009 Β Καρακάσης (CSLab, NTUA) ΣΗΜΜΥ, Μετ/κό 688 9/2009

Διαβάστε περισσότερα

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

Εισαγωγή στην C. Μορφή Προγράµµατος σε γλώσσα C Εισαγωγή στην C Μορφή Προγράµµατος σε γλώσσα C Τµήµα Α Με την εντολή include συµπεριλαµβάνω στο πρόγραµµα τα πρότυπα των συναρτήσεων εισόδου/εξόδου της C.Το αρχείο κεφαλίδας stdio.h είναι ένας κατάλογος

Διαβάστε περισσότερα

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

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Προγραμματισμός Ι Προχωρημένα Θέματα Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ανακατεύθυνση Εισόδου/Εξόδου Συνήθως η τυπική είσοδος ενός προγράμματος (stdin) προέρχεται

Διαβάστε περισσότερα

Εργαστήριο 1: Επανάληψη Βασικών Εννοιών στη Γλώσσα C

Εργαστήριο 1: Επανάληψη Βασικών Εννοιών στη Γλώσσα C Εργαστήριο 1: Επανάληψη Βασικών Εννοιών στη Γλώσσα C Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Εισαγωγή στις έννοιες: - Συναρτήσεις - Εξωτερικές μεταβλητές - Κανόνες εμβέλειας - Διάρκεια

Διαβάστε περισσότερα

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

Εισαγωγή στον Προγραμματισμό Εισαγωγή στον Προγραμματισμό Πίνακες Δημήτρης Μιχαήλ Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο Ακ. Έτος 2012-2013 Πίνακες Πολλές φορές θέλουμε να κρατήσουμε στην μνήμη πολλά αντικείμενα

Διαβάστε περισσότερα

είκτες και Πίνακες (2)

είκτες και Πίνακες (2) είκτες και Πίνακες (2) Στην ενότητα αυτή θα µελετηθούν τα εξής θέµατα: Πολυδιάστατοι πίνακες Πέρασµα παραµέτρων σε προγράµµατα C ΕΠΛ 132 Αρχές Προγραµµατισµού ΙΙ 1-1 Πίνακες εικτών Πίνακας δεικτών είναι

Διαβάστε περισσότερα

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων

Δομημένος Προγραμματισμός. Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων Δομημένος Προγραμματισμός Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr Τμήμα Επιχειρηματικού Σχεδιασμού και Πληροφοριακών Συστημάτων www.bpis.teicrete.gr 2 Ορισμός

Διαβάστε περισσότερα

Ηβασικήσυνάρτηση προγράμματος main()

Ηβασικήσυνάρτηση προγράμματος main() Ηβασικήσυνάρτηση προγράμματος main() HEADER FILES main(){ ΔΗΛΩΣΕΙΣ ΜΕΤΑΒΛΗΤΩΝ ΕΝΤΟΛΕΣ (σειριακές, επιλογής ή επανάληψης) ΕΠΙΣΤΡΕΦΟΜΕΝΟΣ ΤΥΠΟΣ (return 0;) Συναρτήσεις Ησυνάρτησηείναι ένα υποπρόγραμμα που

Διαβάστε περισσότερα

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

Δομημένος Προγραμματισμός (ΤΛ1006) Τεχνολογικό Εκπαιδευτικό Ίδρυμα Κρήτης Σχολή Εφαρμοσμένων Επιστημών Τμήμα Ηλεκτρονικών Μηχανικών Τομέας Αυτοματισμού και Πληροφορικής Δομημένος Προγραμματισμός (ΤΛ1006) Δρ. Μηχ. Νικόλαος Πετράκης, Καθηγητής

Διαβάστε περισσότερα

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

Αμοιβαίος αποκλεισμός Αμοιβαίος αποκλεισμός 1. Εισαγωγή 2. Κρίσιμα τμήματα (Critical Sections) 3. Υλοποίηση του αμοιβαίου αποκλεισμού I. Προσεγγίσεις λογισμικού II. Υποστήριξη εκ μέρους του υλικού III. Σηματοφορείς 4. Κλασσικά

Διαβάστε περισσότερα

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

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

Διαβάστε περισσότερα