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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

ΕΠΕΞΕΡΓΑΣΙΑ ΑΡΧΕΙΩΝ Λέµε αρχείο

i M-1 1. ij f(i, j) N-1. (pixel) 2. M N (x, y) (x, y ) = 256. R(x, y), G(x, y), B(x, y)

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

CSLab National Technical University of Athens

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

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

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

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

Αρχές Προγραμματισμού

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

ύο μηχανισμοί απαιτούνται: 1. Μία μέθοδος για τη δημιουργία διεργασιών

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

Φροντιςτήριο. Linked-List

Επεξεργασία Αρχείων Κειµένου

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

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

Διάλεξη 14: Δομές Δεδομένων ΙΙI (Λίστες και Παραδείγματα)

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

ΤΕΜ-101 Εισαγωγή στους Η/Υ Εξεταστική Ιανουαρίου 2011 Θέματα Β

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

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

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

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

Διάλεξη 18η: Διαχείρηση Αρχείων

ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ & ΑΛΓΟΡΙΘΜΟΙ ΕΡΓΑΣΤΗΡΙΟ

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

Δομές Δεδομένων και Αλγόριθμοι

Κεφάλαιο 8.7. Πίνακες & Συναρτήσεις ( ιάλεξη 17) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

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

Προγραμματισμός συστημάτων UNIX/POSIX. Σήματα (signals)

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

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

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

Διάλεξη 9η: Πίνακες (arrays)

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

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

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

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

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

Προγραμματισμός Ι. Θεματική ενότητα 4: Έλεγχος ροής Προτάσεις υπό συνθήκη διακλάδωσης

ΗΥ-150. Προγραµµατισµός. Πίνακες (Arrays)

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

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

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

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

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

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

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

Κεφάλαιο 6: Συναρτήσεις IΙΙ Αρθρωτός Προγραμματισμός. Δείκτες (Διάλεξη 14)

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

Στόχοι και αντικείμενο ενότητας. Πέρασμα Πίνακα σε Συνάρτηση (συν.) Πέρασμα Πίνακα σε Συνάρτηση. #8.. Ειδικά Θέματα Αλγορίθμων

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

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

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

Σημειώσεις όγδοης εβδομάδας

Διάλεξη 3: Προγραμματισμός σε JAVA I. Διδάσκων: Παναγιώτης Ανδρέου

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

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

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

Σημειώσεις Εργαστηρίου - Ασκήσεις. Διδάσκων: Κωνσταντίνος Αντωνής Επίκουρος Καθηγητής Δρ. Μηχανικός Η/Υ & Πληροφορικής Πανεπιστημίου Πατρών

Α' Εξάμηνο ΕΙΣΑΓΩΓΗ ΣΤΟ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Α' Περιόδου Θέµα 1. (α') 2 - ii 3 - iii 4 - iv

ΗΥ-150. Πίνακες (Arrays)

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ Ενδεικτικές Απαντήσεις Εξετάσεων Β' Περιόδου Θέµα 1. (α')

Πανεπιςτήμιο Πελοποννήςου Τμήμα Επιςτήμησ και Τεχνολογίασ Τηλεπικοινωνιών. Λειτουργικά Συςτήματα Προγραμματιςμόσ Συςτήματοσ.

#define, 70, 575 #elif, 580 #else, 580 #endif, 580 #error, 584 #if, 580 #ifdef, 583 #ifndef, 580, 583 #include, 70, 227, 574 #undef, 579

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

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

ΕΚΔΟΣΗ 1.0 ΟΚΤΩΒΡΙΟΣ, 2017 ΕΙΣΑΓΩΓΗ ΣΤΑ ΚΑΤΑΝΕΜΗΜΕΝΑ ΣΥΣΤΗΜΑΤΑ ΤΟ ΠΡΩΤΟΚΟΛΛΟ TARRY ΕΠΙΜΕΛΕΙΑ: Β. ΤΣΑΚΑΝΙΚΑΣ, Β. ΤΑΜΠΑΚΑΣ

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

ΕΡΓΑΣΤΗΡΙΑΚΕΣ ΑΣΚΗΣΕΙΣ C ΣΕΙΡΑ 2 η

Διάλεξη 10η: Πολυδιάστατοι Πίνακες

Η τιµή εξόδου κάποιας συνάρτησης µπορεί να είναι δείκτης, π.χ.

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

Σημειώσεις έκτης και έβδομης εβδομάδας

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

ΣΧΕΔΙΑΣΗ ΚΑΙ ΥΛΟΠΟΙΗΣΗ ΛΟΓΙΣΜΙΚΟΥ. p: i: 3 p: i: 5

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

Εργαστήριο ΔΙΑΧΕΙΡΙΣΗ ΑΡΧΕΙΩΝ & ΚΑΤΑΛΟΓΩΝ ΣΤΟ UNIX. Εισαγωγή

Επικοινωνία µεταξύ ιεργασιών και Σύνδροµες ιεργασίες

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. (Διάλεξη 15)

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

Διάλεξη 15η: Αναδρομή, μέρος 1ο

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

Transcript:

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ Διαδιεργασιακή Επικοινωνία Εργαστηριακές Ασκήσεις Υλικό από: Modern Operating Systems Laboratory Exercises, Shrivakan Mishra Σύνθεση Κ.Γ. Μαργαρίτης, Τμήμα Εφαρμοσμένης Πληροφορικής, Πανεπιστήμιο Μακεδονίας Tanenbaum, Modern Operating Systems 3 e, (c) 2008 Prentice-Hall, Inc. All rights reserved. 0-13-6006639

1. Εκτελέστε τα animations που σχετίζονται με την ενότητα από την ιστοσελίδα του Εκπαιδευτικού Υλικού στο http://www.it.uom.gr/teching.html/ 2. 'Εκτελέστε' με χαρτί και μολύβι διάφορα σενάρια για τα απλά παραδείγματα που παρουσιάζονται στις παραδόσεις (ΟΧΙ τα πλήρη προγράμματα, αλλά τα αποσπάσματα κώδικα ή ψευδοκώδικα που δείχνουν τις αρχές λειτουργίας των διαφόρων τεχνικών). Βεβαιωθείτε οτι λαμβάνετε υπ' όψη σας τις χειρότερες περιπτώσεις κατά την εκτέλεση, όχι τις καλύτερες. 3. Εκτελέστε τα προγράμματα C και Java. Σε μερικά προγράμματα C λείπουν οι κατάλληλες δηλώσεις include. Σε μερικά προγράμματα Java λείπει η κλάση main. Προσπαθήστε να να συμπληρώσετε. 4. Μελετήστε και εκτελέστε τα προγράμματα που ακολουθούν. Προσπαθήστε να τροποποιήσετε τον κώδικα έτσι ώστε να ελέγχετε το ρυθμό παραγωγής-κατανάλωσης στοχείων. 5. Βρείτε στο διαδίκτυο αντίστοιχα προγράμματα σε C και Java για τις τεχνικές concurrent programming που συζητήσαμε. Συλλέξτε κώδικα ή links. 6. Προσπαθήστε να βρείτε, είτε από το MSDN είτε από αλλού στο διαδίκτυο, αντίστοιχα προγράμματα σε C με κλήσεις συστήματος Win32. Συλλέξτε κώδικα ή links.

#include <pthread.h> #include <stdio.h> #include <semaphore.h> #define BUFF_SIZE 4 #define SHARED 1 char buffer[buff_size]; int nextin = 0; int nextout = 0; sem_t empty_slots; sem_t full_slots; void Put(char item) sem_wait(&empty_slots); buffer[nextin] = item; nextin = (nextin + 1) % BUFF_SIZE; printf("producing %c...\n", item); sem_post(&full_slots); void * Producer() for(i = 0; i < 10; i++) Put((char)('A'+ i % 26)); void Get() int item; sem_wait(&full_slots); item = buffer[nextout]; nextout = (nextout + 1) % BUFF_SIZE; printf("consuming %c...\n", item); sem_post(&empty_slots); void * Consumer() main() for(i = 0; i < 10; i++) Get(); pthread_t tid1, tid2; sem_init(&empty_slots, SHARED, 4); sem_init(&full_slots, SHARED, 0); pthread_create(&tid1, NULL, Producer, NULL); pthread_create(&tid2, NULL, Consumer, NULL); pthread_join(tid1, NULL); pthread_join(tid2, NULL);

/* Producer/consumer program illustrating conditional variables */ #include<pthread.h> #include <stdio.h> #define BUF_SIZE 3 /* Size of shared buffer */ int buffer[buf_size]; /* shared buffer */ int add=0; /* place to add next element */ int rem=0; /* place to remove next element */ int num=0; /* number elements in buffer */ pthread_mutex_t m=pthread_mutex_initializer ; /* mutex lock for buffer */ pthread_cond_t c_cons=pthread_cond_initializer; /* consumer waits on this cond var */ pthread_cond_t c_prod=pthread_cond_initializer; /* producer waits on this cond var */ void *producer(void *param); void *consumer(void *param); main (int argc, char *argv[]) pthread_t tid1, tid2; /* thread identifiers */ /* create the threads; may be any number, in general */ if (pthread_create(&tid1,null,producer,null)!= 0) fprintf (stderr, "Unable to create producer thread\n"); exit (1); if (pthread_create(&tid2,null,consumer,null)!= 0) fprintf (stderr, "Unable to create consumer thread\n"); exit (1); /* wait for created thread to exit */ pthread_join(tid1,null); pthread_join(tid2,null); printf ("Parent quiting\n");

/* Produce value(s) */ void *producer(void *param) for (i=1; i<=20; i++) /* Insert into buffer */ pthread_mutex_lock (&m); if (num > BUF_SIZE) exit(1); /* overflow */ while (num == BUF_SIZE) /* block if buffer is full */ pthread_cond_wait (&c_prod, &m); /* if executing here, buffer not full so add element */ buffer[add] = i; add = (add+1) % BUF_SIZE; num++; pthread_mutex_unlock (&m); pthread_cond_signal (&c_cons); printf ("producer: inserted %d\n", i); fflush (stdout); printf ("producer quiting\n"); fflush (stdout); /* Consume value(s); Note the consumer never terminates */ void *consumer(void *param) while (1) pthread_mutex_lock (&m); if (num < 0) exit(1); /* underflow */ while (num == 0) /* block if buffer empty */ pthread_cond_wait (&c_cons, &m); /* if executing here, buffer not empty so remove element */ i = buffer[rem]; rem = (rem+1) % BUF_SIZE; num--; pthread_mutex_unlock (&m); pthread_cond_signal (&c_prod); printf ("Consume value %d\n", i); fflush(stdout);