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

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

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

Εισαγωγή στο περιβάλλον προγραμματισμού του εργαστηρίου

Νσίπληρ Νίκορ- ΕΣΤ 4ο ΥΡΟΝΣΙΣΗΡΙΟ Παπαςκετή Β4

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

Εισαγωγή στο περιβάλλον προγραμματισμού του εργαστηρίου

Εισαγωγή στο περιβάλλον προγραμματισμού του εργαστηρίου. Λειτουργικά Συστήματα Εργαστήριο Υπολογιστικών Συστημάτων ΕΜΠ

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

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

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

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

make Προγραμματισμός II 1

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

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

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

Ντίρλης Νικόλαος- ΕΤΥ 3ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 25 ΟΚΤΩΒΡΙΟΥ 2013 ΑΙΘΟΥΣΑ Β4

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

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

Προγραμματισμός συστημάτων UNIX/POSIX. Ανακατευθύνσεις (redirections)

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

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

CE121 Προγραµµατισµός 2. Εισαγωγή σε Makefiles. CE121 -

CE121 Προγραµµατισµός 2. Εισαγωγή σε Makefiles. CE121 -

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

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

Διάλεξη 22η: Επιπλέον στοιχεία της C

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

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

Λειτουργικά Συστήματα. Διεργασίες & Inter-Process Communication

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

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

Λειτουργικά Συστήματα (ΗΥ-345) Χειμερινό Εξάμηνο

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

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

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

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

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

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

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

HY150a Φροντιστήριο 3 24/11/2017

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

Διάλεξη 11: Οργάνωση Προγραμμάτων σε Πολλαπλά Αρχεία

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

Προγραμματισμός Υπολογιστών με C++

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

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

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Γλωσσική Τεχνολογία. Εισαγωγικό Φροντιστήριο

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

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

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

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

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

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

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

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

Δίκτυα Επικοινωνιών ΙΙ: Network Programming UDP Sockets, Signals

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

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

Διάλεξη 20: Χαμηλού Επιπέδου Προγραμματισμός II

2η Εργαστηριακή Άσκηση

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

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

Εργαστήριο Λειτουργικών Συστημάτων. Minix Overview

IPC System V. Προγραμματισμός II 1

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

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

$./jms console -w <jms in> -r <jms out> -o <operations file> namedpipe. (standard input).

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

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

ΕΠΛ232 Προγραμματιστικές Τεχνικές και Εργαλεία Οργάνωση Προγραμμάτων σε Πολλαπλά Αρχεία (Κεφάλαιο , KNK-2ED)

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

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

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

(Κεφάλαιο 2.7 και 12) Αρχεία στην C. ( ιάλεξη 13) ιδάσκων: ηµήτρης Ζεϊναλιπούρ

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

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

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

Ενσωματωμένα Συστήματα

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

Προγραµµατισµός ικτύων Ε-01

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

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

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

Προγραμματισμός Η/Y. Διάλεξη 6 η : Συναρτήσεις

10 η Διάλεξη Python Βάσεις δεδομένων στη python

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

Στόχοι και αντικείμενο ενότητας. Εκφράσεις. Η έννοια του τελεστή. #2.. Εισαγωγή στη C (Μέρος Δεύτερο) Η έννοια του Τελεστή

Διαχείριση Περιεχομένου Παγκόσμιου Ιστού και Γλωσσικά Εργαλεία ΕΙΣΑΓΩΓΙΚΟ ΦΡΟΝΤΙΣΤΗΡΙΟ

ΓΛΩΣΣΙΚΗ ΤΕΧΝΟΛΟΓΙΑ. Python & NLTK: Εισαγωγή

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

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

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

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

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

ΕΠΛ371 - Ππογπαμμαηιζμόρ Σςζηημάηων Διάλεξη 16:

Περιεχόμενα. Πρόλογος... 21

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

Kitchen Doormam. Floor with Tables. Restaurant Floorplan and Operation

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

Transcript:

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

Διαχείριση εργασιών fork(), exit(), exec() Επικοινωνία διεργασιών signals, sockets και client/server, shared memory Συγχρονισμός διεργασιών semaphores Makefiles & bash scripting - 2 -

- 3 -

- 4 -

Δημιουργία κοινής μνήμης από διεργασία shmget() Προσκόλληση διεργασίας στης κοινή μνήμη shmat() Αποκόλληση διεργασία; από κοινή μνήμη shmdt() Έλεγχος κοινής μνήμης (περιλαμβάνει διαγραφή) shmctl() man (shmget) man(shmat) man(shmdt) man(shmctl) - 5 -

Απαραίτητα αρχεία κεφαλίδων #include <sys/types.h> #include <sys/ipc.h> #include <sys/shm.h> Απαραίτητες μεταβλητές int shm_id, error; char *data; Προαιρετικά: Ορισμός «κλειδιού» και μεγέθους κοινής μνήμης #define SHM_KEY our_group_id #define SHM_SIZE 1024-6 -

Πρώτη διεργασία (πριν τις κλήσεις fork()) shm_id = shmget(shm_key, SHM_SIZE, 0600 IPC_CREAT); if (shm_id < 0) { printf("could not create shared memory!\n"); exit(1); } - 7 -

Υπόλοιπες διεργασίες shm_id = shmget(shm_key, SHM_SIZE, 0600); if (shm_id < 0) { printf("could not create shared memory!\n"); exit(1); } - 8 -

Όλες οι διεργασίες data = shmat(shm_id, NULL, 0); if (data == (char *)-1) { printf( Could not attach to shared memory!\n ); exit(1); } data: Δείκτης προς την αρχή της κοινής μνήμης - 9 -

Όλες οι διεργασίες error = shmdt(data); if (error == -1) { printf( Could not detach from shared memory!\n ); exit(1); } - 10 -

Μία μόνο διεργασία shmctl(shm_id, IPC_RMID, NULL); ΠΡΟΣΟΧΗ: Η αποκόλληση από και η διαγραφή μιας περιοχής κοινής μνήμης είναι απαραίτητες ενέργειες! Διαφορετικά το κλειδί και η περιοχή κοινής μνήμης παραμένουν ενεργά στο σύστημα εώς την επόμενη επανεκκίνηση του συστήματος! - 11 -

http://netcins.ceid.upatras.gr/opsys-i/project/sharedmemory.htm - 12 -

Διαχείριση εργασιών fork(), exit(), exec() Επικοινωνία διεργασιών signals, sockets και client/server, shared memory Συγχρονισμός διεργασιών semaphores Makefiles & bash scripting - 13 -

- 14 -

Δημιουργία - Άνοιγμα σημαφόρου sem_open() Κλείδωμα σημαφόρου sem_wait() Απελευθέρωση σημαφόρου sem_post() Κλείσιμο σημαφόρου sem_close() Διαγραφή σημαφόρου sem_unlink() - 15 -

Απαραίτητα αρχεία κεφαλίδων #include <semaphore.h> #include <fcntl.h> #include <sys/stat.h> Απαραίτητη κοινή μεταβλητή sem_t *my_sem; Προαιρετικά: Ορισμός ονόματος σημαφόρου #define SEM_NAME my_semaphore_name - 16 -

Πρώτη διεργασία (πριν τις κλήσεις fork()) my_sem = sem_open(sem_name, O_CREAT O_RDWR, S_IRUSR S_IWUSR, 1); if (my_sem == SEM_FAILED) { } printf("could not open semaphore!\n"); exit(1); Κατά την κλήση της fork(), η μεταβλητή my_sem αντιγράφεται στην νέα διεργασία. - 17 -

Για κάθε διεργασία που αλλάζει δεδομένα στην κοινή μνήμη, τα οποία μπορούν να αλλάξουν και οι υπόλοιπες διεργασίες: sem_wait(my_sem); /* Εργασίες στην κοινή μνήμη */ sem_post(my_sem); sem_wait(): Μειώνει την τιμή του σεμαφόρου κατά 1. Αν πάρει αρνητική τιμή, μπλοκάρει τη διεργασία εως ότου γίνει πάλι 0. - 18 -

- 19 -

Όλες οι διεργαςίες: sem_close(my_sem); Μια μόνο διεργασία: sem_unlink(sem_name); ΠΡΟΣΟΧΗ: Το κλείσιμο και η διαγραφή ενός σημαφόρου είναι απαραίτητες ενέργειες! Διαφορετικά το όνομα και η μνήμη που χρησιμοποιεί ένας σημαφόρος παραμένουν ενεργά στο σύστημα εώς την επόμενη επανεκκίνηση! - 20 -

Διαχείριση εργασιών fork(), exit(), exec() Επικοινωνία διεργασιών signals, sockets και client/server, shared memory Συγχρονισμός διεργασιών semaphores Makefiles & bash scripting - 21 -

Eφαρμογή make Xρήση για την αυτόματη δημιουργία προγραμμάτων από αρχεία κώδικα. Διαδικασία: Συγγραφή αρχείου Makefile που περιέχει κανόνες Κλήση εντολής make για την παραγωγή του προγράμματος Κανόνες: Αρχείο-στόχος (target) Αρχεία-απαιτήσεις (prerequisites) Εντολή παραγωγής στόχου απο απαιτούμενα αρχεία Παράδειγμα: target : prerequisites command - 22 -

Makefile hello: hello.o main.o gcc hello.o main.o -o hello.o hello.o: hello.c gcc -Wall -c hello.c main.o: main.c gcc -Wall -c main.c terminal $ make gcc -Wall -c hello.c gcc -Wall -c main.c gcc hello.o main.o -o hello $ make make: `hello' is up to date. $ vi main.c $ make gcc -Wall -c main.c gcc hello.o main.o -o hello - 23 -