Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
ΔημοσίευσεYuri Zacharias Τροποποιήθηκε πριν 10 χρόνια
1
ΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 2ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 26 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4 11
2
Διαχείριση εργασιών ◦ fork(), exit(), exec() Επικοινωνία διεργασιών ◦ signals, sockets και client/server, shared memory Συγχρονισμός διεργασιών ◦ semaphores Makefiles & bash scripting - 2 -
3
- 3 -
4
- 4 -
5
Δημιουργία κοινής μνήμης από διεργασία ◦ shmget() Προσκόλληση διεργασίας στης κοινή μνήμη ◦ shmat() Αποκόλληση διεργασία; από κοινή μνήμη ◦ shmdt() Έλεγχος κοινής μνήμης (περιλαμβάνει διαγραφή) ◦ shmctl() man (shmget) man(shmat) man(shmdt) man(shmctl) - 5 -
6
Απαραίτητα αρχεία κεφαλίδων ◦ #include Απαραίτητες μεταβλητές ◦ int shm_id, error; ◦ char *data; Προαιρετικά: Ορισμός «κλειδιού» και μεγέθους κοινής μνήμης ◦ #define SHM_KEY “our_group_id” ◦ #define SHM_SIZE 1024 - 6 -
7
Πρώτη διεργασία (πριν τις κλήσεις fork()) - 7 - shm_id = shmget(SHM_KEY, SHM_SIZE, 0600 | IPC_CREAT); if (shm_id < 0) { printf("Could not create shared memory!\n"); exit(1); exit(1);}
8
Υπόλοιπες διεργασίες - 8 - shm_id = shmget(SHM_KEY, SHM_SIZE, 0600); if (shm_id < 0) { printf("Could not create shared memory!\n"); printf("Could not create shared memory!\n"); exit(1); exit(1);}
9
Όλες οι διεργασίες - 9 - data = shmat(shm_id, NULL, 0); if (data == (char *)-1) { printf(“Could not attach to shared memory!\n”); printf(“Could not attach to shared memory!\n”); exit(1); exit(1);} data: Δείκτης προς την αρχή της κοινής μνήμης
10
Όλες οι διεργασίες - 10 - error = shmdt(data); if (error == -1) { printf(“Could not detach from shared memory!\n”); printf(“Could not detach from shared memory!\n”); exit(1); exit(1);}
11
Μία μόνο διεργασία ΠΡΟΣΟΧΗ: Η αποκόλληση από και η διαγραφή μιας περιοχής κοινής μνήμης είναι απαραίτητες ενέργειες! Διαφορετικά το κλειδί και η περιοχή κοινής μνήμης παραμένουν ενεργά στο σύστημα εώς την επόμενη επανεκκίνηση του συστήματος! - 11 - shmctl(shm_id, IPC_RMID, NULL);
12
http://netcins.ceid.upatras.gr/OpSys-I/project/SharedMemory.htm http://netcins.ceid.upatras.gr/OpSys-I/project/SharedMemory.htm - 12 -
13
Διαχείριση εργασιών ◦ fork(), exit(), exec() Επικοινωνία διεργασιών ◦ signals, sockets και client/server, shared memory Συγχρονισμός διεργασιών ◦ semaphores Makefiles & bash scripting - 13 -
14
- 14 -
15
Δημιουργία - Άνοιγμα σημαφόρου ◦ sem_open() Κλείδωμα σημαφόρου ◦ sem_wait() Απελευθέρωση σημαφόρου ◦ sem_post() Κλείσιμο σημαφόρου ◦ sem_close() Διαγραφή σημαφόρου ◦ sem_unlink() - 15 -
16
Απαραίτητα αρχεία κεφαλίδων Απαραίτητη κοινή μεταβλητή Προαιρετικά: Ορισμός ονόματος σημαφόρου - 16 - #include #include sem_t *my_sem; #define SEM_NAME “my_semaphore_name”
17
Πρώτη διεργασία (πριν τις κλήσεις fork()) Κατά την κλήση της fork(), η μεταβλητή my_sem αντιγράφεται στην νέα διεργασία. - 17 - 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"); printf("Could not open semaphore!\n"); exit(1); exit(1);}
18
Για κάθε διεργασία που αλλάζει δεδομένα στην κοινή μνήμη, τα οποία μπορούν να αλλάξουν και οι υπόλοιπες διεργασίες: sem_wait(): Μειώνει την τιμή του σεμαφόρου κατά 1. Αν πάρει αρνητική τιμή, μπλοκάρει τη διεργασία εως ότου γίνει πάλι 0. - 18 - sem_wait(my_sem); /* Εργασίες στην κοινή μνήμη */ sem_post(my_sem);
19
- 19 -
20
Όλες οι διεργαςίες: ◦ sem_close(my_sem); Μια μόνο διεργασία: ◦ sem_unlink(SEM_NAME); ΠΡΟΣΟΧΗ: Το κλείσιμο και η διαγραφή ενός σημαφόρου είναι απαραίτητες ενέργειες! Διαφορετικά το όνομα και η μνήμη που χρησιμοποιεί ένας σημαφόρος παραμένουν ενεργά στο σύστημα εώς την επόμενη επανεκκίνηση! - 20 -
21
Διαχείριση εργασιών ◦ fork(), exit(), exec() Επικοινωνία διεργασιών ◦ signals, sockets και client/server, shared memory Συγχρονισμός διεργασιών ◦ semaphores Makefiles & bash scripting - 21 -
22
Eφαρμογή make Xρήση για την αυτόματη δημιουργία προγραμμάτων από αρχεία κώδικα. Διαδικασία: ◦ Συγγραφή αρχείου Makefile που περιέχει κανόνες ◦ Κλήση εντολής make για την παραγωγή του προγράμματος Κανόνες: ◦ Αρχείο-στόχος (target) ◦ Αρχεία-απαιτήσεις (prerequisites) ◦ Εντολή παραγωγής στόχου απο απαιτούμενα αρχεία Παράδειγμα: target : prerequisites command - 22 -
23
- 23 - 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 Makefile 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
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.