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

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

ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:

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


Παρουσίαση με θέμα: "ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:"— Μεταγράφημα παρουσίασης:

1 ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 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 Μετά τη χρήση, κάθε διεργασία αυξάνει την τιμή του σηματοφορέα


Κατέβασμα ppt "ΛΟΓ201: Τεχνολογία Λογισμικού ΙΙ Διδάσκων: Νίκος Παπασπύρου 1Νίκος ΠαπασπύρουΛΟΓ201:"

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


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