Κατέβασμα παρουσίασης
Η παρουσίαση φορτώνεται. Παρακαλείστε να περιμένετε
ΔημοσίευσεΠάτροκλος Σερπετζόγλου Τροποποιήθηκε πριν 9 χρόνια
1
ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ nickie@softlab.ntua.gr Διδάσκων: Νίκος Παπασπύρου http://www.softlab.ntua.gr/~nickie/TUC/log201/ 1Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διαφάνειες παρουσίασης #11 4 Διασωληνώσεις 4 Σήματα 4 Κοινή μνήμη 4 Σηματοφορείς
2
2Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διασωληνώσεις(i) u Pipes u Δίοδος επικοινωνίας με δύο άκρα Σε κάθε μια διεργασία int fd [2]; Περιγραφή fd[0] file descriptor για ανάγνωση (λήψη) fd[1] file descriptor για εγγραφή (αποστολή) Διεργασία 1 Διεργασία 2 διασωλήνωση άλλη διεργασία fd[0] fd[1]
3
3Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διασωληνώσεις(ii) u Δημιουργία νέας διασωλήνωσης int pipe (int fd[2]); u Ανάγνωση και εγγραφή ssize_t read (int fd, // fd[0] void * buffer, size_t size); ssize_t write (int fd, // fd[1] const void * buffer, size_t size); u Κλείσιμο int close (int fd);
4
4Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Σήματα(i) u Messages: Unix System V u Μοιάζει με "θυρίδα γραμματοκιβωτίου" u Δομή σήματος l Τύπος σήματος Περιεχόμενο struct msgbuf { long int mtype; char mtext [MAX_MESSAGE]; }; θυρίδα Διεργασία 1 Διεργασία 2 σήμα
5
5Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Σήματα(ii) u Δημιουργία "θυρίδας" για σήματα int msgget (key_t key, int flag); u Αποστολή σήματος int msgsnd (int msgid, const void * buf, int len, int flag); u Λήψη σήματος int msgrcv (int msgid, void * buf, int len, int mtype, int flag); u Άλλες λειτουργίες διαχείρισης int msgctl (int msgid, int cmd,...);
6
6Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Κοινή μνήμη(i) u Shared memory: Unix System V u Μεταβλητές κοινές για πολλές διεργασίες κοινή μνήμη Διεργασία 1 δείκτης Διεργασία 2 δείκτης μεταβλητή
7
7Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Κοινή μνήμη(ii) u Δημιουργία κοινής μνήμης int shmget (key_t key, int size, int flag); u Συσχέτιση με μεταβλητή void * shmat (int shmid, void * addr, int flag); u Αποσυσχέτιση από μεταβλητή int shmdt (void * addr); u Άλλες λειτουργίες διαχείρισης int shmctl (int shmid, int cmd,...);
8
8Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Σηματοφορείς(i) u Semaphores: Unix System V u Επινόηση με βάσεις στη θεωρία παράλληλων συστημάτων u Οι λειτουργίες που εφαρμόζονται στο σηματοφορέα πραγματοποιούνται στιγμιαία u Έτσι εξασφαλίζεται ότι μια μόνο διεργασία μεταβάλλει το σηματοφορέα κάθε στιγμή σηματοφορέας Διεργασία 1 Διεργασία 2 τιμή λειτουργία
9
9Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Σηματοφορείς(ii) u Δημιουργία σηματοφορέα int semget (key_t key, int num, int flag); u Εφαρμογή λειτουργιών σε σηματοφορείς int semop (int semid, struct sembuf * opPtr, int len); u Άλλες λειτουργίες διαχείρισης int semctl (int shmid, int num, int cmd,...);
10
10Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Σηματοφορείς(iii) u Λειτουργίες σηματοφορέων struct sembuf { short sem_num; short sem_op; short sem_flg; }; Τιμές της παραμέτρου sem_op +n : αύξηση της τιμής του σηματοφορέα κατά n. -n : μείωση της τιμής του σηματοφορέα κατά n. Μπλοκάρει αν η τιμή είναι μικρότερη του n. 0 : έλεγχος για μηδενική τιμή σηματοφορέα. Μπλοκάρει αν η τιμή δεν είναι ίση με 0.
11
11Νίκος ΠαπασπύρουΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Σηματοφορείς(iv) u Συγχρονισμός με σηματοφορείς Κάθε σηματοφορέας παριστάνει έναν πόρο που μπορεί να χρησιμοποιείται από n το πολύ διεργασίες κάθε στιγμή Η τιμή του σηματοφορέα είναι ο αριθμός των διεργασιών που επιτρέπεται ακόμα να χρησιμοποιήσουν τον πόρο (μεταξύ 0 και n ) l Πριν χρησιμοποιήσει τον πόρο, κάθε διεργασία μειώνει την τιμή του σηματοφορέα l Μετά τη χρήση, κάθε διεργασία αυξάνει την τιμή του σηματοφορέα
Παρόμοιες παρουσιάσεις
© 2024 SlidePlayer.gr Inc.
All rights reserved.