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

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

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

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

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

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

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

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

Προγραμματισμός συστημάτων UNIX/POSIX. Διαδιεργασιακή επικοινωνία: αγωγοί (IPC inter-process communication: pipes)

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

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

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

Αγωγοί/Σωλήνες (Pipes) Προγραμματισμός II 1

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

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

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

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

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

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

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

Ερώτημα Α 1. Να γράψετε τις εντολές που πραγματοποιούν τα ακόλουθα:

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

Κατανεμημένος και Παράλληλος Προγραμματισμός. Εισαγωγή στο MPI. Εγκατάσταση MPICH σε ένα ΗΥ 10/3/2017

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

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

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

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

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

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

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

Ασκηή σεις 12ο Μαά θημα - Λυύ σεις

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

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

που θα δώσει αποτέλεσµα 48, λόγω της αριστερής προσεταιριστικότητας των τελεστών / και *, ενώ η επιθυµητή αντικατάσταση θα ήταν η

Οι συναρτήσεις στη γλώσσα C

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

Εισαγωγή στον Προγραµµατισµό. Πανεπιστήµιο Θεσσαλίας Τµήµα Ηλεκτρολόγων Μηχανικών και Μηχανικών Η/Υ

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

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

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

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

Ενότητα 4: «Εισαγωγή στον Προγραμματισμό. Τα πρώτα προγράμματα σε γλώσσα C»

ΑΣΚΗΣΕΙΣ ΓΙΑ ΤΟ ΕΡΓΑΣΤΗΡΙΟ 2

Εργαστήριο 2ο. Περίγραμμα Εργαστηριακής Άσκησης

Ενότητα 5: «Εισαγωγή στον Προγραμματισμό. Απλές ασκήσεις με γλώσσα C»

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

Ντίρλης Νικόλαος- ΕΤΥ 2 ο Φροντιστήριο Παρασκευή, 18/10/2013 Β4. Λειτουργικά Συστήματα- Φροντιστήριο 2

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

Διαδιεργασιακή επικοινωνία (inter-process communication IPC) Προγραμματισμός II 1

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

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

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Κεφάλαιο 2.6: Είσοδος / Έξοδος εδοµένων, Μορφοποίηση εδοµένων Εξόδου. ( ιάλεξη 7) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

Κατανεμημένος και Παράλληλος Προγραμματισμός MPI. MPI Απλές εντολές 03/13/2016. Οδηγίες αποστολής / παραλαβής μηνυμάτων, Υπολογισμός του π (

3ο σετ σημειώσεων - Πίνακες, συμβολοσειρές, συναρτήσεις

Προγραμματισμός Η/Υ Ι (Χρήση της C) 6 η Θεωρία ΜΟΝΟΔΙΑΣΤΑΤΟΙ ΠΙΝΑΚΕΣ

Γλώσσα Προγραμματισμού C

ΕΝΤΟΛΕΣ ΕΠΑΝΑΛΗΨΗΣ. for (παράσταση_1; παράσταση_2; παράσταση_3) εντολή επόμενη εντολή

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

Κατανεμημένος και Παράλληλος Προγραμματισμός

Προγραµµατισµός Ι Εργαστήριο 13ο Ακαδ. Έτος ΕΡΓΑΣΤΗΡΙΟ 13 ΕΡΓΑΣΤΗΡΙΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΥ I, ΑΚΑΔΗΜΑΪΚΟ ΕΤΟΣ

Εισαγωγή στον Προγραµµατισµό. Διάλεξη 8 η : Συναρτήσεις Χειµερινό Εξάµηνο 2011

Διάλεξη 5η: Εντολές Επανάληψης

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

UNIX System Programming

12. Συναρτήσεις (Μέρος ΙI)

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

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

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

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

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

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7) Είσοδος/ Έξοδος

Πίνακες: μια σύντομη εισαγωγή. Πίνακες χαρακτήρων: τα "Αλφαριθμητικά"

Δομές Ανακυκλώσεων. Εντολές ελέγχου - 1

Κεφάλαιο 2.6: Είσοδος / Έξοδος Δεδομένων, Μορφοποίηση Δεδομένων Εξόδου. (Διάλεξη 7)

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

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

Αʹ. Πίνακες. Άσκηση 1. Λύση. Άσκηση 2. Λύση. Ασκήσεις Εργαστηρίου Προγραμματισμού

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

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

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

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

ΕΡΓΑΣΤΗΡΙΟ 4: Μεταβλητές, Δομές Ελέγχου και Επανάληψης

Εργαστήριο 2: Πίνακες

Ουρές Μηνυμάτων (Message Queues in System V) Προγραμματισμός II 1

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

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

Διδάσκων: Παναγιώτης Ανδρέου

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

Κεφάλαιο 4: Συνθήκες Έλεγχου (if-else, switch) και Λογικοί τελεστές / παραστάσεις. (Διάλεξη 8)

3. ΕΝΤΟΛΕΣ ΕΛΕΓΧΟΥ (Β' μέρος: switch και :? )

ΗΥ-100: Εισαγωγή στην Επιστήμη Υπολογιστών 3η σειρά ασκήσεων

Γλώσσα Προγραμματισμού C. Προγραμματισμός HY: Γλώσσα Προγραμματισμού C. Γρήγορος Πίνακας Αναφοράς Σύνταξης. Εισήγηση #4. Επαναληπτικές δομές:

Παρακάτω δίνεται o σκελετός προγράμματος σε γλώσσα C. Σχολιάστε κάθε γραμμή του κώδικα.

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

Τύποι Δεδομένων Είσοδος/Έξοδος

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

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

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

ΣΕΤ ΑΣΚΗΣΕΩΝ 2. Προθεσµία: 15/11/09, 23:59

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

Transcript:

Τμήμα Μηχανικών Πληροφορικής Τ.Ε. Σχολή Τεχνολογικών Εφαρμογών Ακαδημαϊκό έτος 2016-2017 ΤΕΙ Ηπείρου - Άρτα Κατανεμημένα και Παράλληλα Συστήματα (εργαστήριο) Γκόγκος Χρήστος Εκφωνήσεις ασκήσεων εργαστηρίου 1 Άσκηση 1 Τι πρόκειται να εμφανίσει ο ακόλουθος κώδικας; Χρησιμοποιήστε δικά σας αναγνωριστικά διεργασιών. int main(){ pid_t chid1 = fork(); pid_t chid2 = fork(); printf("hello from process %d\n", getpid()); Άσκηση 2 Τι πρόκειται να εμφανίσει ο ακόλουθος κώδικας; int main(int argc, char** argv){ int x = 5; printf("a. value of x is %d\n", x); pid_t chid=fork(); x++; printf("b. value of x is %d\n", x); else { x--; printf("c. value of x is %d\n", x); printf("d. value of x is %d\n", x); Άσκηση 3 Να γράψετε πρόγραμμα που να δημιουργεί μια διεργασία παιδί. Η διεργασία γονέας να υπολογίζει το άθροισμα των ακεραίων από το 1 μέχρι το 100 και να το εμφανίζει ενώ η διεργασία παιδί να υπολογίζει το άθροισμα των ακεραίων από το 101 μέχρι το 200 και να το εμφανίζει. Στη συνέχεια με τη χρήση pipeline το παιδί να στέλνει το αποτέλεσμα που

υπολόγισε στο γονέα και ο γονέας να εμφανίζει την τιμή που έλαβε και το άθροισμα και των δύο συνόλων που υπολογίστηκαν. Η έξοδος του προγράμματος να είναι όπως η ακόλουθη: Computed sum by parent process is 5050 Computed sum by child process is 15050 Parent receives value 15050 from child The total sum is 20100 Άσκηση 4 Να γράψετε πρόγραμμα που να δημιουργεί μια νέα διεργασία η οποία να καλεί την εντολή ls. Τοποθετήστε εντολές printf που να εμφανίζουν ότι καλείται ο κώδικας της διεργασίας γονέα και της διεργασίας παιδί. Άσκηση 5 Να γράψετε πρόγραμμα που να δέχεται ως παράμετρο γραμμής εντολών έναν ακέραιο αριθμό. Το πρόγραμμα να δημιουργεί μια διεργασία παιδί η οποία να εξετάζει αν η παράμετρος είναι άρτια ή περιττή. Η διεργασία παιδί να τερματίζει με την εντολή exit επιστρέφοντας την τιμή 0 αν η παράμετρος είναι άρτια αλλιώς να επιστρέφει την τιμή 0. Η διεργασία γονέας να διαβάζει την τιμή που επιστρέφει η διεργασία παιδί και να την εμφανίζει. Άσκηση 6 Να γράψετε πρόγραμμα που να δέχεται ως παράμετρο γραμμής εντολών έναν ακέραιο αριθμό και να εμφανίζει το άθροισμα όλων των θετικών ακεραίων που είναι μικρότεροι ή ίσοι του αριθμού αυτού. Γράψτε δεύτερο πρόγραμμα που να μοιράζει το φόρτο υπολογισμού του αθροίσματος σε 2 διεργασίες. Μετρήστε με την εντολή time το χρόνο εκτέλεσης των δύο εναλλακτικών λύσεων για τον υπολογισμό του αθροίσματος των πρώτων 7.000.000.000 ακέραιων αριθμών. Άσκηση 7 Σε έναν κύκλο με ακτίνα r η επιφάνεια του είναι πr 2 ενώ η επιφάνεια του περιγεγραμμένου στον κύκλο τετραγώνου είναι 4r 2. Εξετάζοντας το λόγο της επιφάνειας του κύκλου προς την επιφάνεια του τετραγώνου προκύπτει ότι θα πρέπει να ισούται με π/4. Αν πραγματοποιηθεί ένα πείραμα στο οποίο θα μετρούνται πόσα από ένα σύνολο τυχαίων σημείων πέφτουν εντός του κύκλου τότε ο λόγος του πλήθους των τυχαίων σημείων εντός του κύκλου προς το συνολικό πλήθος σημείων θα πρέπει και αυτός να ισούται με π/4. Να γράψετε πρόγραμμα που να υπολογίζει χρησιμοποιώντας τον τρόπο που αναφέρθηκε τον αριθμό π. Επεκτείνατε το πρόγραμμα έτσι ώστε να μοιράζει την εργασία σε δύο διεργασίες έτσι ώστε ο υπολογισμός της εκτίμησης του π να ολοκληρώνεται ταχύτερα για μεγάλο αριθμό σημείων. Δοκιμάστε τα προγράμματα για πλήθος 300.000.000 σημείων

Λύσεις Άσκηση 1 hello from process 1038 hello from process 1040 hello from process 1039 hello from process 1041 Άσκηση 2 A. value of x is 5 C. value of x is 4 D. value of x is 4 B. value of x is 6 D. value of x is 6 Άσκηση 3 #include <sys/wait.h> int main(){ int fd[2]; pipe(fd); pid_t chid = fork(); int sum=0; for (int i=101;i<=200;i++) printf("computed sum by child process is %d\n", sum); write(fd[1], &sum, sizeof(sum)); else { int sum=0; for (int i=1;i<=100;i++) printf("computed sum by parent process is %d\n", sum); int val; read(fd[0], &val, sizeof(val)); printf("parent receives value %d from child\n", val); printf("the total sum is %d\n", sum + val);

Άσκηση 4 #include <sys/wait.h> int main(){ pid_t chid=fork(); printf("child process\n"); execl("/bin/ls", "ls", NULL, NULL); else { printf("parent process\n"); wait(null); Άσκηση 5 int main(int argc, char* argv[]){ if (argc!= 2) pid_t chid=fork(); int x = atoi(argv[1])%2; exit(x); int rv; pid_t childid = wait(&rv); printf("parent got value %d from child with id %d\n", WEXITSTATUS(rv), childid); Άσκηση 6 // gcc fork_exercise06a.c -o fork_exercise06a -std=c99 -Wall -Werror int main(int argc, char *argv[]) { if (argc!= 2) { printf("wrong number of arguments, usage: <exe> <upto>\n"); long long i, upto, sum; upto = atoll(argv[1]); sum = 0;

for (i = 0; i <= upto; i++) { printf("the sum is %lld\n", sum); time./fork_exercise06a 7000000000 // gcc fork_exercise06b.c -o fork_exercise06b -std=c99 -Wall -Werror int main(int argc, char *argv[]) { if (argc!= 2) { printf("wrong number of arguments, usage: <exe> <upto>\n"); long long i, upto = atoll(argv[1]), sum = 0; int fd[2]; pipe(fd); pid_t chid = fork(); if (chid == 0) { for (i = 0; i <= upto / 2; i++) { write(fd[1], &sum, sizeof(sum)); else { for (i = upto / 2 + 1; i <= upto; i++) { wait(null); long long sum_child; read(fd[0], &sum_child, sizeof(sum_child)); printf("the sum is %lld\n", sum + sum_child); time./fork_exercise06b 7000000000 #include <time.h>

#include <math.h> #define r 10.0 int main(int argc, char** argv){ if (argc!=2){ printf("wrong number of arguments, Usage: <exe> <number_of_points>\n"); int points = atoi(argv[1]); srand(time(null)); int c = 0; for(int i=0;i<points;i++){ double x = (double) rand()/rand_max*2*r - r; double y = (double) rand()/rand_max*2*r - r; double d = sqrt(x*x + y*y); if (d<r) c++; // printf("%.2f, %.2f %.2f\n", x,y,d); double pi = (double)c / (double)points * 4; printf("pi estimation %f vs %f\n",pi, M_PI); fork_exercise07a.c #include <time.h> #include <math.h> #define r 10.0 int count_points_inside_circle(int N){ int c = 0; for(int i=0;i<n;i++){ double x = (double) rand()/rand_max*2*r - r; double y = (double) rand()/rand_max*2*r - r; double d = sqrt(x*x + y*y); if (d<r) c++; return c;

int main(int argc, char** argv){ if (argc!=2){ printf("wrong number of arguments, Usage: <exe> <number_of_points>\n"); int fd[2]; pipe(fd); int points = atoi(argv[1]); pid_t chid = fork(); srand(time(null)); int c1 = count_points_inside_circle(points/2); write(fd[1],&c1, sizeof(c1)); else { int c2 = count_points_inside_circle(points/2); wait(null); int c1; read(fd[0],&c1, sizeof(c1)); double pi = (double) (c1+c2) / (double)points * 4; printf("pi estimation %f vs %f\n",pi, M_PI); fork_exercise07b.c