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

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

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

Transcript

1 Κοινόχρηστος χώρος διευθύνσεων Κεφάλαιο VΙΙ (λίγο διαφορετικό)

2 «Οντότητες» εκτέλεσης κώδικα Σειριακό πρόγραμμα για υπολογισμό του π = #define N 512 float pi = 0.0, W = 1.0/Ν; main() int i; for (i = 0; i < N; i++) pi += 4*W / (1 + (i+0.5)*(i+0.5)*w*w); printf( π = %f\n, pi); Όταν φορτωθεί και εκτελείται το πρόγραμμα γίνεται διεργασία (process). Κάθε διεργασία εκτελείται σε έναν επεξεργαστή Το λειτουργικό σύστημα φροντίζει για αυτό #2

3 Διεργασίες & νήματα Μία διεργασία αποτελείται (κατ ελάχιστο) από δεδομένα, κώδικα (εντολές), μία στοίβα (stack) και έναν μετρητή προγράμματος (program counter) #define N 512 Ο μετρητής προγράμματος (PC): δείχνει στην επόμενη εντολή του κώδικα που θα εκτελεστεί Η στοίβα χρειάζεται για: αποθήκευση των τοπικών μεταβλητών (τα «δεδομένα» της διεργασίας που είπαμε παραπάνω είναι οι global μεταβλητές) float pi = 0.0, W = 1.0/Ν; main() int i; for (i = 0; i < N; i++) pi += 4*W / (1 + (i+0.5)*(i+0.5)*w*w); printf( π = %f\n, pi); Ο συνδυασμός PC + στοίβα λέγεται νήμα εκτέλεσης (thread) Δηλαδή η διεργασία αποτελείται από (global) δεδομένα, από κώδικα και από ένα νήμα εκτέλεσης που περνάει από τις εντολές του κώδικα Το νήμα είναι αυτό που εκτελείται όταν λέμε ότι εκτελείται η διεργασία! Το νήμα αυτό λέγεται αρχικό νήμα της διεργασίας #3

4 Διεργασίες & νήματα Μία διεργασία μπορεί να δημιουργήσει κι άλλα πολλά νήματα εκτέλεσης: Δημιουργώντας τίποτε άλλο εκτός από πολλές στοίβες και PCs Όλα θα τρέχουν εντολές από τον ίδιο κώδικα (δεν δημιουργείται άλλο αντίγραφό του) και τέλος Όλα θα έχουν τα ίδια global δεδομένα! Δηλαδή οι καθολικές μεταβλητές της διεργασίας είναι ΑΥΤΟΜΑΤΩΣ ΚΟΙΝΕΣ μεταξύ των νημάτων της. Στην κάθε στοίβα το κάθε νήμα θα έχει τις δικές του τοπικές μεταβλητές Κάθε νήμα εκτελείται σε έναν επεξεργαστή Το λειτουργικό σύστημα φροντίζει για αυτό (εκτός από μερικές περιπτώσεις) #4

5 Παράλληλα προγράμματα Επομένως, για να εκμεταλλευτούμε πολλαπλούς επεξεργαστές, έχουμε δύο βασικές τεχνικές: Πολλαπλές διεργασίες Η διεργασία μας «γεννά» κι άλλες διεργασίες και κάθε μία εκτελείται στον δικό της επεξεργαστή (π.χ. fork()) Πολλαπλά νήματα σε μία διεργασία Το αρχικό νήμα εκτέλεσης «γεννά» κι άλλα νήματα και κάθε ένα εκτελείται στον δικό του επεξεργαστή Υπάρχουν διαφορές σε ταχύτητα δημιουργίας, απαιτήσεις σε πόρους (π.χ. μνήμη) κλπ αλλά η πιο σημαντική διαφορά είναι ότι: Ανάμεσα στις πολλαπλές διεργασίες ΔΕΝ ΥΠΑΡΧΕΙ καμία κοινή μεταβλητή. Πρέπει να δημιουργηθούν «με το χέρι», ενώ μεταξύ των πολλαπλών νημάτων όλες οι global μεταβλητές είναι κοινές είτε το θέλουμε είτε όχι. #5

6 Shared address space / shared variables Τι χρειάζεται κανείς για να προγραμματίσει σε αυτό το μοντέλο: Οντότητες εκτέλεσης (νήματα, διεργασίες) Δημιουργία, διαχείριση Κοινές μεταβλητές μεταξύ των οντοτήτων Ορισμός μεταβλητών (τι είναι κοινό και πως ορίζεται) Τις διαβάζουν και τις τροποποιούν όλες οι διεργασίες Αμοιβαίος αποκλεισμός Π.χ. κλειδαριές Συγχρονισμός Π.χ. κλήσεις φραγής (barrier calls) #6

7 Γιατί αμοιβαίος αποκλεισμός; Αρχικά η κοινή μεταβλητή A είναι 0 Νήμα Τ1 Νήμα Τ2 A = Α+1; Α = Α-1; Λεπτομέρεια εκτέλεσης της εντολής Α = Α±1 σε έναν επεξεργαστή: α. Ο επεξεργαστής μεταφέρει από τη μνήμη την τιμή της Α β. Αυξάνει/μειώνει κατά 1 γ. Αποθηκεύει στην μνήμη την νέα τιμή. Χρονική στιγμή Τι κάνει ο επεξεργαστής 1 Τι κάνει ο επεξεργαστής 2 t α - t + 1 β α t + 2 γ β t γ Α = -1 Χρονική στιγμή Τι κάνει ο επεξεργαστής 1 Τι κάνει ο επεξεργαστής 2 t - α t + 1 α β t + 2 β γ t + 3 γ Α = 1 Χρονική στιγμή Εντολή που εκτελεί ο επεξεργαστής 1 Εντολή που εκτελεί ο επεξεργαστής 2 t - α t β t γ t + 3 t + 4 t + 5 α β γ Α = 0 #7

8 Δημιουργία οντοτήτων εκτέλεσης fork() για διεργασίες int x = 2; (α)... x = fork(); (β) if (x == 0) /* παιδί */ (γ) κώδικας Α; (δ) else /* γονέας */ (ε) κώδικας Β; (η) κώδικας Γ;... main() fork(); fork(); fork(); main() int y = 0; y = 1; if (fork()) x = x+y; else x = x-y; printf( %d\n, x); Τι θα τυπωθεί; Πόσες θα φτιαχτούν; #8

9 Δημιουργία διεργασιών Αντιγράφονται τα πάντα: Καθολικές μεταβλητές Σωρός (ότι έχει γίνει malloc()) Ο κώδικας της διεργασίας (ίσως να μη χρειαστεί αυτή η αντιγραφή) Στοίβα (στην κατάσταση που βρίσκεται εκείνη τη στιγμή) Καταχωρητές (p.x. program counter) Άρα, η διεργασία παιδί εκτελεί αμέσως μετά το fork() Άρα, τίποτε κοινό οι διεργασίες μεταξύ τους Ιδιαίτερα χρονοβόρο Με τεχνικές όπως το copy-on-write μπορεί το ΛΣ να μην αντιγράψει τα πάντα (π.χ. τις καθολικές μεταβλητές) παρά μόνο όταν χρειαστεί (δηλαδή πότε??), γλιτώνοντας κάποιον χρόνο #9

10 Δημιουργία οντοτήτων εκτέλεσης νήματα (posix) Διαφορετική λογική στα νήματα Δεν δημιουργείται αντίγραφο από τίποτε Δεν ξεκινάει η εκτέλεση του νήματος από το σημείο δημιουργίας του Το νήμα θα εκτελέσει μια συνάρτηση που θα του δοθεί και θα τερματίσει capitalize(char *strings[100]) pthread_create(&thrid, NULL, capfunc, (void*) string[5]);... void *capfunc(void *str)... #10

11 Προσοχή Πάντα #include <pthread.h> Μετάφραση: gcc <file.c> -D_REENTRANT -lpthread #11

12 Δημιουργία νημάτων pthread_create(&thrid, attributes, function_to_call, function_parameter); Η συνάρτηση του νήματος παίρνει πάντα μόνο ένα όρισμα Το νήμα «ζει» μέχρι να τελειώσει (επιστρέψει) η συνάρτηση. Φυσικά η συνάρτηση αυτή μπορεί να καλεί κι άλλες συναρτήσεις Μόλις επιστρέψει το νήμα καταστρέφεται Ο γονέας (αρχικό νήμα), αφού δημιουργήσει το νήμα συνεχίζει κανονικά την εκτέλεσή του main() pthread_create(&thrid, NULL, func, NULL); capitalize(char *strings[100]) pthread_create(&thrid, NULL, func, NULL); pthread_create(&thrid, NULL, func, NULL); for (i = 0; i < 100; i++) pthread_create(&thrid, NULL, capfunc, (void*) string[i]);... Πόσα θα φτιαχτούν; #12

13 Πώς μπορώ να περάσω > 1 παραμέτρους; struct manyparams int x; int y; double z; ; main() struct manyparams myargs;... /* Pass a pointer to the structure */ pthread_create(&thrid, NULL, threadfunc, (void*) &myargs);... void *threadfunc(void *ptr) struct manyparams *s = ptr; /* Cast the pointer */... s->x += s->y;... #13

14 Τερματισμός νήματος Δύο τρόποι: είτε επιστρέφει από τη συνάρτηση που του δόθηκε να εκτελέσει είτε καλεί την pthread_exit(&returnvalue) και τερματίζει αμέσως. Τιμή επιστροφής: είτε αυτό που γίνεται return από τη συνάρτηση του νήματος είτε το όρισμα της pthread_exit(). και στις δύο περιπτώσεις, είναι δείκτης στην τιμή αυτή (void *). #14

15 Αναμονή τερματισμού νήματος main() pthread_t tids[5]; int i; for (i = 0; i < 5 i++) pthread_create(&tids[i], NULL, thrfunc, (void*) i); for (i = 0; i < 5; i++) pthread_join(tids[i], NULL); printf( All threads done.\n ); Το cast αυτό θέλει πολύ προσοχή!! void *thrfunc(void *x) int id = (int) x; printf( Hi! I am thread %d\n, id); return (NULL); #15

16 Αμοιβαίος αποκλεισμός - κλειδαριές Από τους διάφορους τρόπους για αμοιβαίο αποκλεισμό, ο συχνότερα χρησιμοποιούμενος είναι οι κλειδαριές (locks). Η κλειδαριά είναι είτε ανοιχτή είτε κλειδωμένη. Όταν ένα νήμα κλειδώσει την κλειδαριά, οποιοδήποτε άλλο νήμα προσπαθήσει να την κλειδώσει θα αποτύχει και θα αναγκαστεί να περιμένει. Όταν το νήμα ολοκληρώσει τη δουλειά του, ξεκλειδώνει την κλειδαριά και ένα από τα νήματα που περιμένουν θα κατορθώσει να την κλειδώσει. Επομένως, μία κρίσιμη περιοχή του προγράμματος μπορεί να προστατευθεί (αμοιβαίος αποκλεισμός) με μία κλειδαριά:... lock(kleidaria); <critical section> unlock(kleidaria);... #16

17 Κλειδαριές στα pthreads: mutexes main() pthread_mutex_t mymutex; pthread_mutex_init(&mymutex, NULL); pthread_mutex_lock(&mymutex);... /* Κρίσιμη περιοχή */ pthread_mutex_unlock(&mymutex); Αντί για pthread_mutex_init(), μπορούμε να κάνουμε και στατική αρχικοποίηση (αρχικοποίηση χρειάζεται πάντα): pthread_mutex_t mymutex = PTHREAD_MUTEX_INITIALIZER; #17

18 Υπολογισμός του π = 3,14 Αριθμητική ολοκλήρωση π x 2 4 3,5 3 2,5 2 1,5 1,5 1 0,5 0, ,1 0,2 0,3 0,4 0,5 0,6 0,7 0,8 0,9 1 διάστημα i (π λάτος διαστημάτων x W = 0,1) N 1 i 0 1 (i 4W 1 2) W 2 #define N double pi = 0.0, W = 1.0/N; main() int i; for (i = 0; i < N; i++) pi += 4*W / (1 + (i+0.5)*(i+0.5)*w*w); printf("pi = %.10lf\n", pi); #18

19 Υπολογισμός του π = 3,14... με 1 νήμα ανά επανάληψη #define N double pi = 0.0, W = 1.0/N; main() int i; for (i = 0; i < N; i++) pi += 4*W / (1 + (i+0.5)*(i+0.5)*w*w); printf("pi = %.10lf\n", pi); /* 1 νήμα ανά επανάληψη */ #define N double pi = 0.0, W = 1.0/N; pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; void *thrfunc(void *iter) int i = (int) iter; pthread_mutex_lock(&lock); pi += 4*W / (1 + (i+0.5)*(i+0.5)*w*w); pthread_mutex_unlock(&lock); main() int i; pthread_t tids[n]; /* Remember the tread ids */ for (i = 0; i < N; i++) pthread_create(&tids[i], NULL, thrfunc, (void *) i); for (i = 0; i < N; i++) pthread_join(tids[i], NULL); printf("pi = %.10lf\n", pi); #19

20 Προβλήματα Υπερβολικά πολλά νήματα (πολλά συστήματα δεν επιτρέπουν πάνω από λίγες χιλιάδες) και επομένως υπερβολικά «λεπτόκοκκος» παραλληλισμός (fine grain) Ακόμα και αν επιτρέπονταν τόσα πολλά νήματα, ο συναγωνισμός για την κλειδαριά είναι τεράστιος. Αποτέλεσμα: αργή εκτέλεση και μόνο για μη ακριβή προσέγγιση του π. Μάθημα: η καλύτερη τακτική είναι συνήθως να δημιουργούμε τόσα νήματα όσοι είναι και οι επεξεργαστές του συστήματος #20

21 Μοίρασμα της δουλειάς σε λίγα νήματα #define NPROCS 2 /* dual core */ #define N /* Για ακρίβεια (ίδια με σειριακό) */ #define WORK N/NPROCS double pi = 0.0, W = 1.0/N; pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; void *thrfunc(void *iter) int i, me = (int) iter; for (i = me*work; i < (me+1)*work; i++) pthread_mutex_lock(&lock); pi += 4*W / (1 + (i+0.5)*(i+0.5)*w*w); pthread_mutex_unlock(&lock); main() int i; pthread_t tids[nprocs]; for (i = 0; i < NPROCS; i++) /* νήματα = # επεξεργατών */ pthread_create(&tids[i], NULL, thrfunc, (void *) i); for (i = 0; i < NPROCS; i++) pthread_join(tids[i], NULL); printf("pi = %.10lf\n", pi); Τι πάει στραβά; #21

22 Λίγα νήματα αποφυγή συναγωνισμού #define NPROCS 2 /* dual core */ #define N /* Για ακρίβεια (ίδια με σειριακό) */ #define WORK N/NPROCS double pi = 0.0, W = 1.0/N; pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; void *thrfunc(void *iter) int i, me = (int) iter; double mysum = 0.0; for (i = me*work; i < (me+1)*work; i++) mysum += 4*W / (1 + (i+0.5)*(i+0.5)*w*w); pthread_mutex_lock(&lock); pi += mysum; pthread_mutex_unlock(&lock); main() int i; pthread_t tids[nprocs]; for (i = 0; i < NPROCS; i++) /* νήματα = # επεξεργατών */ pthread_create(&tids[i], NULL, thrfunc, (void *) i); for (i = 0; i < NPROCS; i++) pthread_join(tids[i], NULL); printf("pi = %.10lf\n", pi); #22

23 Πίνακας επί πίνακα for (i = 0; i < Ν; i++) for (j = 0; j < Ν; j++) for (k = sum = 0; k < N; k++) sum += Α[i][k]*B[k][j]; C[i][j] = sum; Παραλληλοποίηση: Ενός βρόχου (i) μοίρασμα των επαναλήψεων του πρώτου for σε νήματα Δεν δουλεύει καλά πάντα, π.χ. τι γίνεται αν # επεξεργαστών > Ν?? Δύο βρόχων (i και j) Checkerboard partitioning: παραλληλοποίηση και των δύο βρόχων Μπορώ εναλλακτικά να παραλληλοποιήσω τον βρόχο j και k? #23

24 Διαχωρισμός σκακιέρας c 00 c 01 c 0(S-1) c 0S c 0(N-1) c 10 c 11 c 1(S-1) c 1S c 1(N-1) C 00 C 01 C 0(M-1) c 20 c 21 c 2(S-1) c 2S c 2(N-1) Υποπίνακες διάστασης S S c S0 c S1 c S(S-1) c SS c S(N-1) C 10 C 11 C 1(M-1) Άρα M = N/S υποπίνακες οριζόντια / κάθετα: M 2 υποπίνακες C (M-1)0 C (M-1)1 C (M-1)(M-1) c (N-1)0 c (N-1)1 c (N-1)S #24

25 Διαχωρισμός σκακιέρας αρίθμηση υποπινάκων C 00 C 01 C 0(M-1) C 10 C 11 C 1(M-1) Αν τους αριθμήσουμε από 0 έως Μ 2-1, ο i-οστός υποπίνακας είναι ο C xy όπου: x = i / M y = i % M C xy C (M-1)0 C (M-1)1 C (M-1)(M-1) #25

26 Διαχωρισμός σκακιέρας το πρόγραμμα #define N 50 /* Πίνακας 50x50 */ #define NPROCS 25 /* Αριθμός επεξεργαστών/διεργασιών */ #define M 5 /* Η ρίζα του 25 */ #define S N/M /* S = N / M */ double A[N][N], B[N][N], C[N][N]; void *thrfunc(void *arg) int i, j, k, x, y, myid = (int) arg; double sum; x = myid / M; y = myid % M; for (i = x*s; i < (x+1)*s; i++) /* υπολογίζει τα στοιχεία του Cxy */ for (j = y*s; j < (y+1)*s; j++) for (k = 0, sum = 0.0; k < N; k++) sum += A[i][k]*B[k][j]; C[i][j] = sum; ; Δεν υπάρχει ανάγκη αμοιβαίου αποκλεισμού Embarrassingly parallel main() int i; pthread_t tids[nprocs]; for (i = 0; i < NPROCS; i++) pthread_create(&tids[i], NULL, thrfunc, (void *) i); for (i = 0; i < NPROCS; i++) pthread_join(tids[i], NULL); #26

27 Πίνακας επί διάνυσμα πιο απλό? float A[N][N], v[n], res[n]; for (i = 0; i < Ν; i++) res[i] = 0.0; for (j = 0; j < Ν; j++) res[i] += Α[i][j]*v[j]; Παραλληλοποίηση του βρόχου i, μοιράζοντας τις επαναλήψεις στα νήματα #27

28 Πίνακας επί διάνυσμα παράλληλα (Ι) main() int i; pthread_t tids[nprocs]; for (i = 0; i < NPROCS; i++) pthread_create(&tids[i], NULL, thrfunc, (void *) i); for (i = 0; i < NPROCS; i++) pthread_join(tids[i], NULL); #define N 8000 #define NPROCS 8 #define RPT N/NPROCS /* "Rows Per Thread" */ double A[N][N], v[n], res[n]; void *thrfunc(void *arg) int i, j, myid = (int) arg; Καλός κώδικας, όταν NPROC < N. Τι γίνεται όταν, όμως, έχουμε NPROC > N? for (i = myid*rpt; i < (myid+1)*rpt; i++) res[i] = 0.0; for (j = 0; j < N; j++) res[i] += A[i][j]*v[j]; Η παραλληλοποίηση του βρόχου, τότε, δεν θα δουλεύει καλά. Θα υπάρχουν διεργασίες που δεν κάνουν τίποτε! παραλληλοποίηση και των δύο βρόχων (i και j) μαζί #28

29 Πίνακας επί διάνυσμα παράλληλα (ΙΙ) #define N 100 #define NPROCS 200 #define RPT N/NPROCS /* "Rows Per Thread" */ double A[N][N], v[n], res[n]; pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; void *thrfunc(void *arg) int i, j, myid = (int) arg; double sum = 0.0; main() int i; pthread_t tids[nprocs]; for (i = 0; i < N; i++) res[i] = 0.0; for (i = 0; i < NPROCS; i++) pthread_create(&tids[i], NULL, thrfunc, (void *) i); for (i = 0; i < NPROCS; i++) pthread_join(tids[i], NULL); i = myid / 2; /* Γραμμή που αναλαμβάνω */ myhalf = (N/2)*(myid % 2); /* Οι μισές επαναλήψεις του j */ for (j = myhalf; j < myhalf + N/2; j++) sum += A[i][j]*v[j]; pthread_mutex_lock(&lock); res[i] += sum; pthread_mutex_unlock(&lock); Παράλληλη αρχικοποίηση; Κάθε ζεύγος νημάτων να αρχικοποιεί το δικό του res[i] Π.χ. το ζυγό νήμα (myid%2 == 0) να κάνει res[i] = 0.0. Υπάρχει κάποιο πρόβλημα; Απαιτείται, πλέον, αμοιβαίος αποκλεισμός. Προσοχή στην αρχικοποίηση του res[]. #29

30 Συγχρονισμός! Οι οντότητες εκτέλεσης πρέπει μερικές φορές να συγχρονίζονται. Θα πρέπει να περιμένουν μέχρι να συμβεί κάποιο γεγονός Συνήθης μηχανισμός: φράγματα (barriers) κάποιο νήμα που καλεί μία συνάρτηση φράγματος, μπλοκάρει και περιμένει όλα τα υπόλοιπα νήματα να φτάσουν στο φράγμα πριν προχωρήσει παρακάτω. Μόλις φτάσει και το τελευταίο, «ξεμπλοκάρουν» όλα και συνεχίζουν την εκτέλεσή τους. pthread_barrier_wait() Δεν είναι μέρος του «κλασικού» στάνταρ. Αποτελεί επέκταση. Για να χρησιμοποιηθεί στα συστήματα που το υποστηρίζουν, πρέπει στον κώδικα να μπει #define _XOPEN_SOURCE 600 #30

31 Σωστή παράλληλη αρχικοποίηση #define N 100 #define NPROCS 200 #define RPT N/NPROCS /* "Rows Per Thread" */ double A[N][N], v[n], res[n]; pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; pthread_barrier_t *bar; void *thrfunc(void *arg) int i, j, myid = (int) arg; double sum = 0.0; i = myid / 2; /* Γραμμή που αναλαμβάνω */ myhalf = (N/2)*(myid % 2); /* Οι μισές επαναλήψεις του j */ for (j = myhalf; j < myhalf + N/2; j++) sum += A[i][j]*v[j]; if (myid % 2 == 0) res[i] = 0.0; pthread_barrier_wait(bar); Όλα τα νήματα στον ίδιο barrier! pthread_mutex_lock(&lock); res[i] += sum; pthread_mutex_unlock(&lock); Άλλη ιδέα; Το άρτιο νήμα να δημιουργεί το περιττό, αμέσως μετά την αρχικοποίηση (άρα => παράλληλη δημιουργία νημάτων) #31

32 Μεταβλητές συνθήκης Ο βασικός μηχανισμός συγχρονισμού στα νήματα Posix. Ένα νήμα θα περιμένει σε μια μεταβλητή συνθήκης έως ότου η μεταβλητή το ενημερώσει ότι μπορεί να συνεχίσει Κάποιο άλλο νήμα σηματοδοτεί τη μεταβλητή συνθήκης, επιτρέποντας άλλα νήματα να συνεχίσουν Κάθε μεταβλητή συνθήκης, ως διαμοιραζόμενο δεδομένο, συσχετίζεται και με ένα συγκεκριμένο mutex Με τις μεταβλητές συνθήκης αποφεύγεται ο συνεχής έλεγχος (busy waiting) της κατάστασης των δεδομένων Ένα νήμα που τροποποιεί την τιμή των δεδομένων ειδοποιεί τα ενδιαφερόμενα μέσω μιας μεταβλητής συνθήκης Παράδειγμα: Σχήμα παραγωγού καταναλωτή με χρήση ουράς δεδομένων Το νήμα-καταναλωτής εξάγει και επεξεργάζεται στοιχεία της oυράς εφόσον αυτή δεν είναι άδεια, διαφορετικά μπλοκάρει Το νήματα-παραγωγός προσθέτει στοιχεία στην ουρά και ειδοποιεί με τη μεταβλητή συνθήκης το νήμα καταναλωτή που περιμένει #32

33 Χρήση Στατική αρχικοποίηση: pthread_cond_t condition = PTHREAD_COND_INITIALIZER; Δυναμική αρχικοποίηση: pthread_cond_init(&condition); Μια μεταβλητή συνθήκης συσχετίζεται πάντοτε με ένα mutex Αναμονή με: pthread_cond_wait(&condition, &mutex); Το νήμα αναστέλλει την εκτέλεση του μέχρι να σηματοδοτηθεί η μεταβλητή συνθήκης Το νήμα πρέπει να έχει ήδη κλειδώσει το συσχετιζόμενο mutex Το νήμα αναστέλλεται ενώ το mutex ξεκλειδώνεται αυτόματα ώστε να επιτραπεί η χρήση του από άλλα νήματα Όταν το νήμα ενεργοποιηθεί με την ειδοποίηση του μέσω της μεταβλητής συνθήκης, αυτόματα το mutex είναι κλειδωμένο από το ίδιο #33

34 Σηματοδότηση pthread_cond_signal(&condition); pthread_cond_broadcast(&condition); Με την pthread_cond_signal ένα νήμα ειδοποιεί κάποιο άλλο νήμα που περιμένει σε κάποια μεταβλητή συνθήκης Με την pthread_cond_broadcast, ένα νήμα ειδοποιεί όλα τα νήματα που περιμένουν σε κάποια μεταβλητή συνθήκης Το νήμα που πρόκειται να σηματοδοτήσει μια μεταβλητή συνθήκης συνήθως έχει κλειδώσει το mutex που συσχετίζεται με αυτή. Στην περίπτωση αυτή πρέπει να ελευθερώσει το mutex ώστε να συνεχιστεί η εκτέλεση της pthread_cond_wait #34

35 Διαδικασία Υπάρχει κάποια συνθήκη ή κάποιο γεγονός που θέλουμε να ελέγξουμε (έστω π.χ. εάν count >= N). Απαιτείται μία condition variable (cond) και μια κλειδαριά (mut) Ο έλεγχος του γεγονότος γίνεται μόνο αφού πρώτα το νήμα κλειδώσει το mut. Αν το γεγονός/συνθήκη ισχύει (π.χ. count >= N) τότε Το νήμα ξεκλειδώνει το mut και Συνεχίζει την εκτέλεσή του Αν το γεγονός/συνθήκη δεν ισχύει τότε Το νήμα αναστέλλεται καλώντας την pthread_cond_wait(&cond,&mut) το mut ξεκλειδώνεται αυτόματα από το σύστημα Κάποιο άλλο νήμα θα καλέσει την pthread_cond_signal(&cond) όταν η συνθήκη γίνει αληθής Το πρώτο νήμα ξυπνάει από την αναμονή έχοντας το mutex αυτόματα κλειδωμένο και εκτελεί τη δουλειά του Το νήμα ξεκλειδώνει το mutex όταν έχει ολοκληρώσει #35

36 Παραδείγματα #36

37 Παραδείγματα #37

38 Ορθός τρόπος χρήσης /* THREAD A * Wait for the flag to become TRUE */ pthread_mutex_lock(&lock); while (flag == FALSE) pthread_cond_wait(&condvar, &lock); pthread_mutex_unlock(&lock); /* THREAD B */ if (something_happens) pthread_mutex_lock(&lock); flag = TRUE; pthread_cond_signal(&condvar); pthread_mutex_unlock(&lock); Γιατί η κλειδαριά; Διότι το pthread_cond_signal() είναι memoryless: αν ένα signal σταλεί αλλά δεν υπάρχει κάποιο νήμα που κάνει wait(), τότε το σήμα χάνεται. Αν αμέσως μετά το while και πριν προλάβει να κάνει wait(), το νήμα Β κάνει singal(), τότε το σήμα θα χαθεί και το νήμα Α θα περιμένει για πάντα. Γιατί το while; Διότι μπορεί μετά το flag = TRUE να ξύπνησε το νήμα Α, αλλά να πρόλαβε ένα άλλο νήμα να το έκανε πάλι FALSE. Επίσης μπορεί μερικές φορές κάποιο νήμα να ξυπνήσει από το wait() απρόσμενα, οπότε πριν προχωρήσει θα πρέπει να ξαναελέγξει αν όντως το flag είναι TRUE. #38

39 Δύο ακόμα θέματα με τα νήματα Πώς μπορώ να εξασφαλίσω ότι κάτι θα γίνει από μόνο ένα νήμα; Π.χ. Έχουν ήδη δημιουργηθεί τα νήματα και θέλω να αρχικοποιήσω μία κοινή μεταβλητή. Πώς μπορώ να έχω ιδιωτικές global μεταβλητές στα νήματα; Π.χ. Θέλω να έχω μία μεταβλητή global ώστε να μην την περνάω από συνάρτηση σε συνάρτηση, αλλά δεν θέλω να είναι κοινή μεταξύ των νημάτων. thread local storage - TLS #39

40 pthread_once: Εκτέλεση μιας φοράς pthread_once_t once_block = PTHREAD_ONCE_INIT pthread_mutex_t mutex; /* It is guaranteed that this will be called only once */ void routine(void) pthread_mutex_init(&mutex, NULL); /* Thread */ void *threadfunc(void *arg) pthread_once(&once_block, routine); /* Κλήση ρουτίνας */... int main() pthread_create(&t, NULL, threadfunc, NULL); /* Νέο νήμα */ pthread_once(&once_block, routine); /* Κλήση ρουτίνας */... #40

41 pthread specifics: Ιδιωτικά (Καθολικά) Δεδομένα Νημάτων Τρόπος 1 ος (εύκολος, γρήγορος, όμως δουλεύει μόνο με ορισμένους compilers και μόνο σε συγκεκριμένα λειτουργικά συστήματα κλπ) thread int x; /* Global, but each thread has its own copy of the variable */ Τρόπος 2 ος (POSIX, portable): thread-specifics pthread_key_t key; main()... pthread_key_create(&key, NULL); /* Initialize the key - should be done once! */ pthread_create(&t, NULL, thread_routine,...); void *thread_routine(void *) long *value; mydata = malloc(sizeof(long)); /* Allocate space */ *mydata =...; pthread_setspecific(key, value); /* Store *my* data at this key */... mydata = pthread_getspecific(key); /* Get *my* data */ #41

42 Δυναμική συμπεριφορά Η μέχρι τώρα διάσπαση σε «εργασίες» ήταν στατική δηλαδή είχαμε προκαθορίσει ακριβώς τι θα εκτελέσει το κάθε νήμα. π.χ. στο π, ή ο διαχωρισμός σκακιέρας στον πολ/μο πινάκων Ως γνώμονα είχαμε την ισοκατανομή φόρτου ώστε όλα τα νήματα να εκτελέσουν παρόμοιο έργο και άρα να δουλέψουν για ίδιο χρονικό διάστημα (που είναι το ιδανικό). Τι γίνεται όμως αν κάποιοι επεξεργαστές Είναι πιο αργοί από τους άλλους ή Για το συγκεκριμένο διάστημα είναι περισσότερο φορτωμένοι από τους άλλους (διότι π.χ. εκτελούν και κάποια άλλη εφαρμογή) Σε αυτή την περίπτωση, η ισόποση διαμοίραση των εργασιών ΔΕΝ ΕΙΝΑΙ ΟΤΙ ΚΑΛΥΤΕΡΟ! #42

43 Αυτοδρομολόγηση (self-scheduling) Εφαρμόζετε σε αυτές τις περιπτώσεις. Δυναμικά (δηλαδή κατά την ώρα της εκτέλεσης), τα πιο «αργά» νήματα θα εκτελέσουν λιγότερο έργο. Πώς; Δεν προκαθορίζουμε τι θα εκτελέσει το κάθε νήμα Αφήνουμε κάθε νήμα να ζητάει δουλειά να κάνει Όσο πιο γρήγορα τελειώσει μία δουλειά, τόσες περισσότερες δουλειές θα πάρει να εκτελέσει while (there-are-things-to-do) Work = get-the-next-work() execute(work); #43

44 Αυτοδρομολόγηση κώδικας Έστω ότι κάπως έχουμε χωρίσει τη δουλειά σε NUMWORKS εργασίες, από 0 έως NUMWORKS 1. Έστω ότι η i-οστή εργασία εκτελείται ως execute(i) #define NUMWORKS 100 int workid; pthread_mutex_t worklock = PTHREAD_MUTEX_INITIALIZER; void *thrfunc(void *arg) int t; while (1) /* Για πάντα */ pthread_mutex_lock(&worklock); t = workid++; pthread_mutex_unlock(&worklock); if (t >= NUMWORKS) break; execute(t); #44

45 Αυτοδρομολόγηση, συνέχεια Για οποιαδήποτε εφαρμογή, ΑΚΡΙΒΩΣ το ίδιο πρόγραμμα Αρκεί μόνο να θέσουμε το NUMWORKS σε σωστή τιμή και να υλοποιήσουμε τη κατάλληλη execute() Τα ταχύτερα νήματα «κλέβουν» τις πιο πολλές εργασίες και άρα καλύτερη κατανομή φόρτου Στη γενικότερη μορφή της, υπάρχει μία ουρά από εργασίες που πρέπει να εκτελεστούν. Τα νήματα «τραβούν» εργασίες από την κεφαλή της ουράς Αν δεν υπάρχει μεγάλη διαφορά στις ταχύτητες (π.χ. το σύστημα εκτελεί μόνο τη δική μας εφαρμογή), η αυτοδρομολόγηση δεν είναι πάντα ότι καλύτερο μιας και έχει συναγωνισμό για την κλειδαριά (ή την πρόσβαση στην ουρά), για κάθε εργασία. #45

46 Παράδειγμα: υπολογισμός του π με αυτοδρομο/ση int workid; pthread_mutex_t worklock = PTHREAD_MUTEX_INITIALIZER; void *thrfunc(void *arg) int t; while (1) /* Για πάντα */ pthread_mutex_lock(&worklock); t = workid++; pthread_mutex_unlock(&worklock); if (t >= NUMWORKS) break; execute(t); #define N /* Για ακρίβεια (ίδια με σειριακό) */ #define NUMWORKS #define WORK N/NUMWORKS /* Πόσες επαναλήψεις η κάθε εργασία */ double pi = 0.0, W = 1.0/N; pthread_mutex_t lock = PTHREAD_MUTEX_INITIALIZER; void execute(int iter) int i; double mysum = 0.0; for (i = iter*work; i < (iter+1)*work; i++) mysum += 4*W / (1 + (i+0.5)*(i+0.5)*w*w); pthread_mutex_lock(&lock); pi += mysum; pthread_mutex_unlock(&lock); #46

47 Παράδειγμα: checkerboard + αυτοδρομολόγηση int workid; pthread_mutex_t worklock = PTHREAD_MUTEX_INITIALIZER; void *thrfunc(void *arg) int t; while (1) /* Για πάντα */ pthread_mutex_lock(&worklock); t = workid++; pthread_mutex_unlock(&worklock); if (t >= NUMWORKS) break; execute(t); #define N /* μέγεθος πίνακα */ #define M 100 /* 100 x 100 υποπίνακες */ #define S N/M /* Μέγεθος υποπίνακα */ #define NUMWORKS Μ*Μ /* τόσοι υποπίνακες */ void execute(int wid) int i, j, k, x, y; double sum; x = wid / M; y = wid % M; for (i = x*s; i < (x+1)*s; i++) /* τα στοιχεία του Cxy */ for (j = y*s; j < (y+1)*s; j++) ; for (k = 0, sum = 0.0; k < N; k++) sum += A[i][k]*B[k][j]; C[i][j] = sum; #47

48 διεργασίες στο Unix

49 Προγραμματισμός με διεργασίες στο UNIX Sys-V Shared Memory IPC #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> /* Για shared memory */ #include <sys/sem.h> /* Για semaphores */ Δημιουργία διεργασιών με fork() (returns 0 to the child). Δεν υπάρχουν κοινές μεταβλητές (μόνο κοινός χώρος στη μνήμη, δεσμευόμενος δυναμικά) Δεν υπάρχουν κλειδαριές, μόνο semaphores Δεν υπάρχουν μηχανισμοί συγχρονισμού αλλά μπορούμε να κάνουμε πολλά πράγματα #49

50 Υλοποίηση της join() Αναμονή τερματισμού παιδιών με χρήση της wait(). Η παρακάτω τερματίζει τα παιδιά και κάνει το γονέα να περιμένει. join(int myid, N) int i; if (myid!= 0) /* Παιδί */ exit(0); else /* Γονέας */ for (i = 0; i < N; i++) wait(0); /* Αναμονή για τερματισμό Ν παιδιών */ #50

51 Semaphores semget() για ορισμό semid = semget(ipc_private, 1, 0600 IPC_CREAT); semctl() για αρχικοποίηση / καταστροφή / έλεγχο semctl(semid, 0, SETVAL, arg); semctl(semid, IPC_RMID, 0); semop() για αύξηση / μείωση semop(semid, &opr, 1); union semun ; int val; struct semid_ds *buf; ushort_t *array; union semun arg; arg.val = k; /* αρχικοποίηση */ #51

52 Κλειδαριές από semaphores initlock(int *l) union semun arg; *l = semget(ipc_private, 1, 0600 IPC_CREAT); arg.val = 1; /* Binary semaphore */ semctl(*l, 0, SETVAL, arg); lock(int *l) struct sembuf opr; opr.num = opr.flag = 0; opr.op = -1; /* Μείωση κατά 1 */ semop(*l, &opr, 1);; unlock(int *l) struct sembuf opr; opr.num = opr.flag = 0; opr.op = 1; /* Αύξηση κατά 1 */ semop(*l, &opr, 1); Καταστροφή: semctl(*l, IPC_RMID, 0); #52

53 Κοινές «μεταβλητές» int memid = shmget(ipc_private, size, 0600 IPC_CREAT); char *p = shmat(memid, 0, 0); shmctl(memid, ICP_RMID, 0); /* Απελευθέρωση μνήμης */ Στα νήματα οι μεταβλητές (καθολικές) είναι κοινές και δεν χρειάζεται τίποτε, ούτε για τον ορισμό τους, ούτε για τον χειρισμό τους Με διεργασίες (πολύπλοκοι χειρισμοί με pointers): memid = shmget(ipc_private, 2*sizeof(int), 0600 IPC_CREAT); p = shmat(memid, 0, 0); *((int *) p) = 2; *(((int *) p) + 1) = *((int *) p); #53

54 .. πιο εύκολος χειρισμός Τέχνασμα (δομή με τις κοινές μεταβλητές): struct mine int i, j; *myvars; memid = shmget(ipc_private, sizeof(struct mine), 0600 IPC_CREAT); myvars = (struct whatever *) shmat(memid, 0, 0); myvars->i = 2; myvars->j = myvars->i; #54

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

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

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

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

Μέρος Ι: νήματα POSIX Κεφάλαιο 4 (νέο βιβλίο) Κεφάλαιο 7 (παλιές σημειώσεις) ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κοινόχρηστος χώρος διευθύνσεων Μέρος Ι: νήματα POSIX Κεφάλαιο 4 (νέο βιβλίο) Κεφάλαιο 7 (παλιές σημειώσεις) Βιβλίο Β. Δημακόπουλος Παράλληλα Συστήματα και Προγραμματισμός 2016 Αποθετήριο

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

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

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

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

Λ10 Παράλληλος & Κατανεμημένος Προγραμματισμός 2009

Λ10 Παράλληλος & Κατανεμημένος Προγραμματισμός 2009 Λ10 Παράλληλος & Κατανεμημένος Προγραμματισμός 2009 Μάθημα 2 ο 27/10/2009 Προγραμματισμός «κοινού χώρου διευθύνσεων» (κοινής μνήμης) Β. Δημακόπουλοσ Shared address space / shared variables Σι χρειάηεται

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

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

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

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

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

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

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

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

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

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

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

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

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

Προγραµµατισµός Νηµάτων. Αρχικοποίηση µιας Φοράς 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: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

2/4/2012 Προγραμματισμός συστημάτων κοινόχρηστης μνήμης (ΙΙ) OpenMP Β. Δημακόπουλος Υ07 Παράλληλα Συστήματα 2011-12 2/4/2012 Προγραμματισμός συστημάτων κοινόχρηστης μνήμης (ΙΙ) OpenMP Β. Δημακόπουλος Shared address space / shared variables Τι χρειάζεται κανείς για να προγραμματίσει σε

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

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

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

Προγραμματισμός με το OpenMP Β. Δημακόπουλος

Προγραμματισμός με το OpenMP Β. Δημακόπουλος ΠΛE006 Παράλληλη Επεξεργασία Προγραμματισμός με το OpenMP Β. Δημακόπουλος Shared address space / shared variables Τι χρειάζεται κανείς για να προγραμματίσει σε αυτό το μοντέλο: Οντότητες εκτέλεσης (νήματα,

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

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

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

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

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

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

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

Μέρος IΙ: OpenMP Κεφάλαιο 4 (νέο βιβλίο)

Μέρος IΙ: OpenMP Κεφάλαιο 4 (νέο βιβλίο) ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Κοινόχρηστος χώρος διευθύνσεων Μέρος IΙ: OpenMP Κεφάλαιο 4 (νέο βιβλίο) Shared address space / shared variables Τι χρειάζεται κανείς για να προγραμματίσει σε αυτό το μοντέλο: Οντότητες

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

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

Σηματοφόροι (Σηματοφορείς) Ταυτόχρονος Προγραμματισμός 1 Σηματοφόροι (Σηματοφορείς) 1 lalis@inf.uth.gr Αποφυγή ενεργής αναμονής if () { WAIT(); Μπορεί να γίνει εναλλαγή αφού το νήμα κάνει τον έλεγχο της συνθήκης αναμονής και την βρει αληθή, αλλά προτού αυτό

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

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

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

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

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

Κατανεμημένα Συστήματα Κατανεμημένα Συστήματα Σημειώσεις εργαστηρίου Lab#7 - Διεργασίες, Nήματα, Πολυνημάτωση στη Python Νεβράντζας Βάιος-Γερμανός Λάρισα, Φεβρουάριος 2013 Lab#7 - Διεργασιές, Νη ματα, Πολυνημα τωση στη Python,

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

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής

Εισαγωγή στους Η/Υ. Γιώργος Δημητρίου. Μάθημα 3-4: Προγραμματισμός MIPS. Πανεπιστήμιο Θεσσαλίας - Τμήμα Πληροφορικής Γιώργος Δημητρίου Μάθημα 3-4: Προγραμματισμός MIPS Προγραμματισμός σε Συμβολική Γλώσσα Η συμβολική γλώσσα: δεν έχει τύπους, δεν έχει δηλώσεις μεταβλητών, δεν έχει δομές ελέγχου, δεν έχει εντολές βρόχων,

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

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

Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1 Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1 lalis@inf.uth.gr Μνήμη και επικοινωνία διεργασιών Κάθε διεργασία έχει δική της ιδιωτική μνήμη Μια διεργασία δεν μπορεί να γράψει/διαβάσει από/σε θέσεις

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

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

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

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

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

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

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

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

Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1 Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1 lalis@inf.uth.gr Μνήμη και επικοινωνία διεργασιών Κάθε διεργασία έχει δική της ιδιωτική μνήμη Μια διεργασία δεν μπορεί να γράψει/διαβάσει από/σε θέσεις

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

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

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

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

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

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

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

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

Σηματοφόροι (Σηματοφορείς) Ταυτόχρονος Προγραμματισμός 1 Σηματοφόροι (Σηματοφορείς) 1 lalis@inf.uth.gr Αποφυγή ενεργής αναμονής εναλλαγή if/while () { WAIT(); Μπορεί να γίνει εναλλαγή αφού το νήμα κάνει τον έλεγχο της συνθήκης αναμονής και την βρει αληθή, αλλά

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

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

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

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

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1 Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1 lalis@inf.uth.gr Ο κώδικας δεν εκτελείται «μόνος του» Ο εκτελέσιμος κώδικας αποθηκεύεται σε ένα αρχείο Το αρχείο είναι μια «παθητική» οντότητα

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

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

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

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

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

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

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

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: Ε.Θ.Λ: Προγραµµατισµός Συστηµάτων

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

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

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

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

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

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

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

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

lab13grades Άσκηση 2 -Σωστά απελευθερώνετε ολόκληρη τη λίστα και την κεφαλή ΑΕΜ ΒΑΘΜΟΣ ΣΧΟΛΙΑ 00497 -Δεν ελέγχετε αν η createlist εκτελλέστικε σωστά και δεν τερµατίζετε το πρόγραµµα σε διαφορετική -Σωστά βρίσκετε το σηµείο στο οποίο πρέπει να προστεθεί ο κόµβος. -Σωστά τερµατίζετε

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

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

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

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

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

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

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

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

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

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

13.2 Παράλληλος Προγραµµατισµός Γλωσσάρι, Σελ. 1

13.2 Παράλληλος Προγραµµατισµός Γλωσσάρι, Σελ. 1 13.2 Παράλληλος Προγραµµατισµός Γλωσσάρι, Σελ. 1 ΓΛΩΣΣΑΡΙ Αµοιβαίος αποκλεισµός (mutual exclusion) Στο µοντέλο κοινού χώρου διευθύνσεων, ο αµοιβαίος αποκλεισµός είναι ο περιορισµός του αριθµού των διεργασιών

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

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

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

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

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

Λειτουργικά Συστήματα ΑΡΙΣΤΟΤΕΛΕΙΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΟΝΙΚΗΣ ΑΝΟΙΧΤΑ ΑΚΑΔΗΜΑΙΚΑ ΜΑΘΗΜΑΤΑ Λειτουργικά Συστήματα Ενότητα 4α: Σημαφόροι, Πρόβλημα Συνδαιτυμόνων Φιλοσόφων, Αδιέξοδα Αθηνά Βακάλη Άδειες Χρήσης Το παρόν εκπαιδευτικό

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1

Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1 Διάλεξη 13η: Δυναμική Διαχείρηση Μνήμης, μέρος 1 Τμήμα Επιστήμης Υπολογιστών, Πανεπιστήμιο Κρήτης Εισαγωγή στην Επιστήμη Υπολογιστών Βασίζεται σε διαφάνειες του Κ Παναγιωτάκη Πρατικάκης (CSD) Μνήμη I CS100,

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

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

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

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

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

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

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

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

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

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

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

Προγραμματισμός συστημάτων UNIX/POSIX Προγραμματισμός συστημάτων UNIX/POSIX Προχωρημένη διαδιεργασιακή επικοινωνία: επώνυμοι αγωγοί (FIFOs) ουρές μηνυμάτων (message queues) κοινόχρηστη μνήμη (shared memory) Ανάγκη Ότι είδαμε μέχρι τώρα μπορεί

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

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

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

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

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

Λειτουργικά Συστήματα (ΗΥ321) Λειτουργικά Συστήματα (ΗΥ321) Διάλεξη 2: Διεργασίες και Νήματα Διαδικαστικά 2 Γραφτήκατε στη λίστα; Σχηματίστε ομάδες (για το project)! Στο προηγούμενο επεισόδιο 3 Τι είναι λειτουργικό; Γενιές ΛΣ Βασικές

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

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

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

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

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1 Δυναμική δέσμευση και αποδέσμευση μνήμης Προγραμματισμός II 1 lalis@inf.uth.gr Γιατί χρειάζεται η δυναμική μνήμη; Οι απαιτήσεις του προγράμματος σε μνήμη μπορεί να είναι άγνωστες την ώρα της συγγραφής

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

Υπολογισμός - Εντολές Επανάληψης

Υπολογισμός - Εντολές Επανάληψης Προγραμματισμός Η/Υ Ι Υπολογισμός - Εντολές Επανάληψης ΕΛΕΥΘΕΡΙΟΣ ΚΟΣΜΑΣ ΕΑΡΙΝΟ ΕΞΑΜΗΝΟ 2018-2019 ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ Τ.Ε. 1 Περίληψη Σήμερα... θα συνεχίσουμε τη συζήτησή μας για τα βασικά στοιχεία

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

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

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

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

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

ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΤΕΧΝΟΛΟΓΙΑ ΚΑΙ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ Έλεγχος ροής Δομή επιλογής (if, switch) Δομές επανάληψης (while, do-while, for) Διακλάδωση

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

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

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

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

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

Λειτουργικά Συστήματα Δρ. Βασίλης Ταμπακάς Δρ. Ιωάννης Ε. Λιβιέρης Τμήμα Μηχανικών Πληροφορικής Τ.Ε Περιεχόμενα Περιεχόμενα... 1 1. Εισαγωγή, Θεωρητική Υποδομή Εργαστηριακής Άσκησης... 2 2. Εργαστηριακή υποδομή εργαστηριακής

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

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

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

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

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1 Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1 lalis@inf.uth.gr Πρόγραμμα και εκτέλεση προγράμματος Ο εκτελέσιμος κώδικας αποθηκεύεται σε ένα αρχείο Το αρχείο είναι μια «παθητική» οντότητα

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

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

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

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

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

Διδάσκων: Κωνσταντίνος Κώστα Διαφάνειες: Δημήτρης Ζεϊναλιπούρ Διάλεξη 6: Διαχείριση Μνήμης & Δυναμικές Δομές Δεδομένων Στην ενότητα αυτή θα μελετηθούν τα εξής επιμέρους θέματα: Δυναμικές Δομές Δεδομένων Γενικά Δυναμική Δέσμευση/Αποδέσμευση Μνήμης Δομή τύπου structure

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

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

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

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

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

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

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

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

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

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

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

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

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

Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης

Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης Η γλώσσα προγραμματισμού C Δυναμική διαχείριση μνήμης Κατηγορίες μνήμης εκτελέσιμου προγράμματος Στις καθολικές και στατικές μεταβλητές οι χώροι μνήμης δεσμεύονται κατά την διάρκεια της μεταγλώττισης.

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

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ

Επανάληψη για τις Τελικές εξετάσεις. (Διάλεξη 24) ΕΠΛ 032: ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΜΕΘΟΔΩΝ ΕΠΙΛΥΣΗΣ ΠΡΟΒΛΗΜΑΤΩΝ Επανάληψη για τις Τελικές εξετάσεις (Διάλεξη 24) Εισαγωγή Το μάθημα EPL032 έχει ως βασικό στόχο την επίλυση προβλημάτων πληροφορικής με την χρήση της γλώσσας προγραμματισμού C. Επομένως πρέπει: Nα κατανοήσετε

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

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες

ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ. Σκοπός της Άσκησης. 1. Εισαγωγικά στοιχεία για τους Δείκτες Σκοπός της Άσκησης ΑΣΚΗΣΗ 6: ΔΕΙΚΤΕΣ Ο σκοπός αυτής της εργαστηριακής άσκησης είναι η εξοικείωση με τη χρήση των δεικτών (pointers). Οι δείκτες δίνουν την δυνατότητα σε προγράμματα να προσομοιώνουν τη

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

C: Από τη Θεωρία στην Εφαρμογή

C: Από τη Θεωρία στην Εφαρμογή Δρ. Γ. Σ. Τσελίκης Δρ. Ν. Δ. Τσελίκας C: Από τη Θεωρία στην Εφαρμογή Ενδεικτικές Ασκήσεις από το Βιβλίο C: Από τη Θεωρία στην Εφαρμογή (Γ. Σ. Τσελίκης Ν. Δ. Τσελίκας) Ενδεικτικές Ασκήσεις του Βιβλίου Ε.Α.1

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

Κεφάλαιο 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 (); Πρότυπο ( ήλωση) Συνάρτησης (

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

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

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

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

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

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

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

Μνήμη Διευθύνσεις Δείκτες. Προγραμματισμός II 1

Μνήμη Διευθύνσεις Δείκτες. Προγραμματισμός II 1 Μνήμη Διευθύνσεις Δείκτες Προγραμματισμός II 1 lalis@inf.uth.gr Μνήμη Η/Υ Ειδικό υλικό, ξεχωριστό από τον επεξεργαστή Χρησιμεύει για την αποθήκευση δεδομένων και της κατάστασης εκτέλεσης του προγράμματος

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

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ ΕΙΣΑΓΩΓΗ ΣΤΟN ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ ΠΑΝΕΠΙΣΤΗΜΙΟ ΠΑΤΡΩΝ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΜΗΧΑΝΙΚΩΝ Η/Υ ΚΑΙ ΠΛΗΡΟΦΟΡΙΚΗΣ Εμβέλεια Μεταβλητών Εμβέλεια = το τμήμα του προγράμματος στο οποίο έχει ισχύ ή είναι ορατή η μεταβλητή.

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

Συναρτήσεις-Διαδικασίες

Συναρτήσεις-Διαδικασίες ΗΥ 232 Οργάνωση και Σχεδίαση Υπολογιστών Διάλεξη 4 Συναρτήσεις-Διαδικασίες Νίκος Μπέλλας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων 1 Διαδικασίες (procedures) Γνωστές και σαν υπορουτίνες (subroutines)

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

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

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

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

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Πανεπιστήμιο Δυτικής Μακεδονίας Τμήμα Μηχανικών Πληροφορικής και Τηλεπικοινωνιών ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Δείκτες Τι είναι ένας δείκτης (pointer); Όταν δηλώνoυμε μια μεταβλητή σε ένα πρόγραμμα

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

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

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

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