Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε

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

Παρόμοιες παρουσιάσεις


Παρουσίαση με θέμα: "ΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 2ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 26 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4 11."— Μεταγράφημα παρουσίασης:

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

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())  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  Υπόλοιπες διεργασίες  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  Όλες οι διεργασίες  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  Όλες οι διεργασίες  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  Μία μόνο διεργασία  ΠΡΟΣΟΧΗ:   Η αποκόλληση από και η διαγραφή μιας περιοχής κοινής μνήμης είναι απαραίτητες ενέργειες!  Διαφορετικά το κλειδί και η περιοχή κοινής μνήμης παραμένουν ενεργά στο σύστημα εώς την επόμενη επανεκκίνηση του συστήματος!  shmctl(shm_id, IPC_RMID, NULL);

12  

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

14

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

16  Απαραίτητα αρχεία κεφαλίδων  Απαραίτητη κοινή μεταβλητή  Προαιρετικά: Ορισμός ονόματος σημαφόρου  #include #include sem_t *my_sem; #define SEM_NAME “my_semaphore_name”

17  Πρώτη διεργασία (πριν τις κλήσεις fork())  Κατά την κλήση της fork(), η μεταβλητή my_sem αντιγράφεται στην νέα διεργασία.  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.  sem_wait(my_sem); /* Εργασίες στην κοινή μνήμη */ sem_post(my_sem);

19

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

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

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

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


Κατέβασμα ppt "ΙΩΑΝΝΗΣ ΚΩΝΣΤΑΝΤΙΝΟΥ 2ο ΦΡΟΝΤΙΣΤΗΡΙΟ ΠΑΡΑΣΚΕΥΗ 26 ΟΚΤΩΒΡΙΟΥ 2012 ΑΙΘΟΥΣΑ Β4 11."

Παρόμοιες παρουσιάσεις


Διαφημίσεις Google