Next              Up                Back               Contents

Επόμενο:8.2 Γλωσσική Υποστήριξη Προγραμματισμού Περάσματος Μηνυμάτων Πάνω: Κεφάλαιο 8o: Προγράμματα περάσματος μηνυμάτων Πίσω: Κεφάλαιο 8o: Προγράμματα περάσματος μηνυμάτων


 

8.1 Θύρες Επικοινωνίας

 

Το βασικό στοιχείο που χαρακτηρίζει ένα πρόγραμμα περάσματος μηνυμάτων είναι η έλλειψη διαμοιραζόμενων μεταβλητών που να είναι προσβάσιμες από όλες τις διεργασίες. Σε έναν πολυεπεξεργαστή υπάρχει μια φυσική διαμοιραζόμενη μνήμη η οποία είναι απευθείας προσπελάσιμη για ανάγνωση ή εγγραφή από οποιονδήποτε φυσικό επεξεργαστή. Αυτή η φυσική αρχιτεκτονική της μηχανής αντανακλάται σε μια ιδεατή δομή λογισμικού, στην οποία οι διεργασίες του λογισμικού έχουν πρόσβαση σε μια κεντρική πισίνα διαμοιαραζόμενων μεταβλητών. Κάθε διεργασία λογισμικού είναι ελεύθερη να γράψει ή να διαβάσει κάθε διαμοιραζόμενη μεταβλητή σε κάθε στιγμή, που υποβάλλεται σε πιθανές καθυστερήσεις εξαιτίας συμφόρησης της μνήμης στο φυσικό επίπεδο. Αυτό το ιδεατό μοντέλο παράλληλου προγραμματισμού χρησιμοποιήθηκε σε όλα τα προηγούμενα κεφάλαια, που ασχολήθηκαν με προγραμματισμό πολυεπεξεργαστών.

Όμως όταν κάποιος προγραμματίζει σε ένα σύστημα κατανεμημένης μνήμης, χρειάζεται ένα εντελώς διαφορετικό μοντέλο λογισμικού εξαιτίας της έλλειψης της διαμοιραζόμενης φυσικής μνήμης. Σε ένα σύστημα κατανεμημένης μνήμης κάθε φυσικό επεξεργαστής έχει την προσωπική του τοπική μνήμη για την εγγραφή και την ανάγνωση μεταβλητών. Οι επεξεργαστές συνδέονται φυσικά με ένα δίκτυο, που μπορεί να μεταδώσει δέσμες δεδομένων από τη μια επεξεργασία στην άλλη. Όλη η φυσική αλληλεπίδραση μεταξύ των επεξεργαστών πραγματοποιείται με διαμέσου του δικτύου διασύνδεσης. Κανένας επεξεργαστής δεν έχει απευθείας πρόσβαση με καμία τοπική μνήμη εκτός από τη δική του. Αν κάποιος επεξεργαστής θέλει να χρησιμοποιήσει κάποια δεδομένα που βρίσκονται στην τοπική μνήμη ενός άλλου απομακρυσμένου επεξεργαστή, πρέπει ο απομακρυσμένος επεξεργαστής να διαβάσει τα δεδομένα από την τοπική του μνήμη και να τα στείλει στον επεξεργαστή που τα χρειάζεται μέσα από το δίκτυο με τη μορφή μηνύματος.

Είναι χρήσιμο να έχουμε ιδεατά μοντέλα λογισμικού που αντικατοπτρίζουν τη φυσική αρχιτεκτονική έτσι ώστε ο προγραμματιστής να γράφει αποδοτικά προγράμματα για αυτά τα συστήματα. Γι’ αυτό το λόγο η Multi-Pascal δεν έχει διαμοιραζόμενες μεταβλητές όταν εφαρμόζεται σε ένα παράλληλο σύστημα κατανεμημένης μνήμης. Στα προηγούμενα κεφάλαια που ασχοληθήκαμε με πολυεπεξεργαστές, κάθε μεταβλητή που δηλωνόταν στην αρχή του κυρίως προγράμματος ήταν διαμοιραζόμενη και μπορούσε να προσπελαστεί απευθείας από κάθε διεργασία. Στα παράλληλα συστήματα κατανεμημένης μνήμης αυτές οι μεταβλητές στην αρχή του προγράμματος είναι τοπικές στην κυρίως διεργασία και δεν είναι απευθείας προσπελάσιμες από τις άλλες διεργασίες.

 

8.1.1 Κανάλια επικοινωνίας

 

Παρά το γεγονός ότι δεν υπάρχουν διαμοιραζόμενες μεταβλητές, πρέπει να υπάρξει κάποιος μηχανισμός στη γλώσσα που να επιτρέπει την αλληλεπίδραση μεταξύ των διεργασιών κατά τη διάρκεια της εκτέλεσης τους. Στο υλικό των συστημάτων κατανεμημένης μνήμης οι φυσικοί επεξεργαστές αλληλεπιδρούν στέλνοντας μηνύματα από τους συνδέσμους επικοινωνίας που τους συνδέουν. Στην Multi-Pascal η διεργασία είναι η λογική αφαίρεση του φυσικού επεξεργαστή. Έτσι, μια συνεπής λογική αφαίρεση των φυσικών συνδέσμων επικοινωνίας θα παρέχει ένα είδος καναλιών επικοινωνίας μεταξύ των διεργασιών λογισμικού. Γι’ αυτό το σκοπό χρησιμοποιούνται μεταβλητές καναλιών στην Multi-Pascal. Ένας φυσικός επεξεργαστής μπορεί να επικοινωνήσει με έναν άλλο επεξεργαστή στέλνοντας ένα μήνυμα στο σύνδεσμο επικοινωνίας που τους συνδέει. Παρόμοια, μια διεργασία της Multi-Pascal μπορεί να επικοινωνήσει με μια άλλη διεργασία στέλνοντας ένα μήνυμα μέσα από μια μεταβλητή καναλιού.

Για να υιοθετήσουμε τη χρήση των μεταβλητών καναλιών στα προγράμματα των συστημάτων κατανεμημένης μνήμης, πρέπει να μετατρέψουμε λίγο τη χρήση και τη σημασιολογία τους σε σχέση με τη χρήση τους σε πολυεπεξεργαστές. Στους πολυεπεξεργαστές τα κανάλια είναι σαν διαμοιραζόμενες μεταβλητές-διαμένουν στη διαμοιραζόμενη μνήμη και σε κάθε στιγμή μπορεί κάθε διεργασία να τις διαβάσει ή να γράψει σε αυτές. Συνεπώς δεν μοιάζουν με τους συνδέσμους επικοινωνίας ενός συστήματος κατανεμημένης μνήμης που συνδέουν φυσικά δύο καθορισμένους επεξεργαστές. Για να πλησιάσουν περισσότερο οι μεταβλητές καναλιών τις ιδιότητες των συνδέσμων επικοινωνίας, το άκρο λήψης κάθε μεταβλητής καναλιού συνδέεται απευθείας με μια συγκεκριμένη διεργασία.

Αυτό φαίνεται στο σχήμα 8.1. Η μεταβλητή καναλιού Com[i] συνδέεται με τη διεργασία i στο άκρο λήψης. Έτσι, η διεργασία i είναι η μόνη που μπορεί να λάβει μηνύματα από αυτό το κανάλι. Όμως, κάθε άλλη διεργασία μπορεί να στείλει ένα μήνυμα στη διεργασία i απλά γράφοντάς το στη μεταβλητή καναλιού Com[i]. Στο σχήμα και οι τρεις διεργασίες X, Y, Z στέλνουν μηνύματα στη διεργασία i. Κάθε μια από αυτές τις τρεις διεργασίες X, Y, Z έχει επίσης και τη δική της μεταβλητή καναλιού εισόδου για να λαμβάνει τα μηνύματα που επιστρέφει η διεργασία i ή τα μηνύματα των άλλων διεργασιών. Η απαίτηση κάθε μεταβλητή καναλιού να είναι συνδεδεμένη στο άκρο λήψης μιας συγκεκριμένης διεργασίας αποτελεί μια χρήσιμη αφαίρεση της ιδιότητας των συνδέσμων επικοινωνίας στα συστήματα κατανεμημένης μνήμη, οι οποίοι είναι απευθείας συνδεδεμένοι και με τα δυο άκρα, λήψης και αποστολής, με καθορισμένους φυσικούς επεξεργαστές.

Στο σχήμα 8.1 οι διεργασίες μπορεί να εκτελούνται σε οποιονδήποτε από τους φυσικούς επεξεργαστές του συστήματος κατανεμημένης μνήμης. Όταν οι διεργασίες X, Y, Z γράφουν ένα μήνυμα στην μεταβλητή καναλιού Com[i] αυτό αυτόματα δρομολογείται μέσα από το δίκτυο επικοινωνίας της υποκείμενης τοπολογίας του συστήματος κατανεμημένης μνήμης στον προορισμό του στη διεργασία i. Η προώθηση και η δρομολόγηση του μηνύματος πραγματοποιούνται από τη διεπαφή επικοινωνίας του υλικού που δουλεύει σε συνδυασμό με την Multi-Pascal. Η δρομολόγηση και η προώθηση κρύβονται από τον προγραμματιστή της Multi-Pascal, απλοποιώντας έτσι την προγραμματιστική διαδικασία. Όμως, η μετακίνηση του μηνύματος κατά μήκος του δικτύου επικοινωνίας επηρεάζει την απόδοση του προγράμματος. Στο σχήμα 8.1 όταν η διεργασία X γράφει στο κανάλι Com[i] υπάρχει μια χρονική καθυστέρηση πριν πραγματικά φτάσει στην διεργασία i. Το μέγεθος αυτής της καθυστέρησης επικοινωνίας εξαρτάται από την τοπολογία και τα χαρακτηριστικά απόδοσης του υποκείμενου συστήματος κατανεμημένης μνήμης.

 

image

ΣΧΗΜΑ 8.1 Κανάλια επικοινωνίας στη Multi-Pascal

 

Ένα σημαντικό χαρακτηριστικό της επικοινωνίας, που διασφαλίζεται από τη Multi-Pascal, είναι ότι μηνύματα που στέλνονται από μία αφετηρία προς τον ίδιο προορισμό θα φτάσουν με την ίδια σειρά με την οποία στέλνονται. Τα μηνύματα μπορεί να συναντήσουν συμφόρηση ή να δρομολογηθούν τυχαία κατά μήκους του δικτύου επικοινωνίας, η Multi-Pascal όμως διασφαλίζει ότι θα φτάσουν στη διεργασία i με την κατάλληλη σειρά. Η διατήρηση της ακολουθίας των μηνυμάτων είναι σημαντική και αναγκαία για συγκεκριμένους τύπους προγραμμάτων και συνεπώς αποτελεί τμήμα του ορισμού της Multi-Pascal. Όμως αυτή η ιδιότητα δεν ισχύει για μηνύματα που στέλνονται από διαφορετικές αφετηρίες. Για παράδειγμα, ένα μήνυμα μπορεί να σταλεί από τη διεργασία X στη διεργασία i, και κατόπιν ένα άλλο μήνυμα να σταλεί πολύ αργότερα από τη διεργασία Z στην διεργασία i. Είναι πολύ πιθανόν εξαιτίας καθυστερήσεων στην επικοινωνία το μήνυμα της διεργασίας Z να φτάσει πρώτο στη διεργασία i. Επίσης αυτή η ιδιότητα της ακολουθίας των μηνυμάτων δεν αφορά τα μηνύματα που στέλνονται σε διαφορετικούς προορισμούς.

 

8.1.2 Δηλώσεις θυρών

 

Όταν οι μεταβλητές καναλιών ανατίθενται σε συγκεκριμένες διεργασίες σε συστήματα κατανεμημένης μνήμης, οι ιδιότητές τους διαφέρουν κάπως από τις συνηθισμένες μεταβλητές καναλιών των συστημάτων διαμοιραζόμενης μνήμης. Γι’ αυτό το λόγο χρησιμοποιείται ένα νέο όνομα στη γλώσσα της Multi-Pascal: θύρες επικοινωνίας. Μια θύρα επικοινωνίας στην Mulit-Pascal είναι απλά μια μεταβλητή καναλιού που έχει ανατεθεί σε μια συγκεκριμένη διεργασία για να λαμβάνει μηνύματα. Υπάρχουν δύο τμήματα στη δήλωση κάθε θύρας επικοινωνίας. Το πρώτο τμήμα είναι η δήλωσή της σαν μια συνηθισμένη μεταβλητή καναλιού στην αρχή του κυρίως προγράμματος. Το δεύτερο τμήμα είναι η δήλωση PORT που εμφανίζεται με τη δήλωση της δημιουργίας της διεργασίας. Η δήλωση καναλιού στην αρχή του κυρίως προγράμματος καθορίζει το όνομα και τον τύπο του στοιχείου, ενώ η δήλωση PORT το αναθέτει σε μια συγκεκριμένη διεργασία.

Η γενική δομή ενός προγράμματος περάσματος μηνυμάτων σε Multi-Pascal φαίνεται στο σχήμα 8.2. Ένας πίνακας από κανάλια Com δηλώνονται στην αρχή του προγράμματος. Καθένα από αυτά τα κανάλια θα αντιδράσει σαν θύρα επικοινωνίας για κάθε συγκεκριμένη διεργασία, θα λάβει δηλαδή μηνύματα από άλλες διεργασίες. Όταν οι διεργασίες δημιουργούνται στο σώμα του κυρίως προγράμματος με τη δήλωση FORALL κάθε κανάλι του πίνακα ανατίθεται στη διεργασία που του αντιστοιχεί με τη δήλωση κλειδί της Multi-Pascal PORT. Η δήλωση (PORT Com[i]) δηλώνει ότι το άκρο λήψης του καναλιού Com[i] είναι “συνδεδεμένο” με τη διεργασία i. Η εγγραφή και η ανάγνωση των καναλιών χρησιμοποιούν το συνηθισμένο συντακτικό εγγραφής και ανάγνωσης καναλιών. Μέσα σε μια δοσμένη διεργασία i, η διεργασία μπορεί να διαβάσει τιμές από τη δική της θύρα Com[i]. Αυτές είναι οι τιμές που στέλνονται από άλλες διεργασίες. Η διεργασία i μπορεί να στείλει μια τιμή σε μια άλλη διεργασία k απλά γράφοντας στο Com[k], το οποίο είναι το κανάλι που έχει ανατεθεί ως θύρα επικοινωνίας στη διεργασία k.

Αυτού του είδους η χρήση του πίνακα των καναλιών για την επικοινωνία των διεργασιών έχει εμφανιστεί πολλές φορές στα προγράμματα των συστημάτων διαμοιραζόμενης μνήμης στα προηγούμενα κεφάλαια. Το συντακτικό των δηλώσεων των καναλιών και οι δηλώσεις εγγραφής και ανάγνωσης είναι οι ίδιες και στην περίπτωση των συστημάτων κατανεμημένης μνήμης. Όμως, υπάρχουν αρκετές σημαντικές διαφορές όσο αφορά στην εφαρμογή των συστημάτων κατανεμημένης μνήμης. Κάθε κανάλι του πίνακα μπορεί να διαβαστεί μόνο από μια διεργασία η οποία είναι αυτή που του έχει ανατεθεί ως θύρα από τη δήλωση PORT. Έτσι, κάθε κανάλι μπορεί να έχει πολλούς συγγραφείς, αλλά μόνο έναν αναγνώστη. Κάθε κανάλι είναι φυσικά αποθηκευμένο στην ίδια τοπική μνήμη όπου είναι και η διεργασία για την οποία ενεργεί ως θύρα επικοινωνίας. Αν η διεργασία i εκτελείται στον φυσικό επεξεργαστή i, τότε το κανάλι Com[i] είναι αποθηκευμένο στην τοπική μνήμη του επεξεργαστή i.

Όταν μια διεργασία πραγματοποιεί μια λειτουργία εγγραφής σε ένα κανάλι, η λειτουργία αυτή γίνεται σχεδόν με τον ίδιο τρόπο όπως και στα συστήματα διαμοιραζόμενης μνήμης, με μια σημαντική όμως διαφορά: υπάρχει μια χρονική καθυστέρηση πριν η τιμή φτάσει πραγματικά στο κανάλι προορισμού. Η λειτουργία εγγραφής δεν αναστέλλει τη διεργασία συγγραφέα - η διεργασία δεν καθυστερείται από τη λειτουργία εγγραφής. Όμως, υπάρχει μια χρονική καθυστέρηση κατά τη διάρκεια του ταξιδιού του αυτόματα δημιουργημένου μηνύματος εγγραφής μέσα στο δίκτυο διασύνδεσης των επεξεργαστών. Η διάρκεια αυτής της καθυστέρησης εξαρτάται από τα χαρακτηριστικά της τοπολογίας του συστήματος κατανεμημένης μνήμης και τη σχετική θέση του καναλιού προορισμού. Η διεργασία συγγραφέας μπορεί να συνεχίζει να εκτελείται ενώ το μήνυμα εξακολουθεί να ταξιδεύει.

Αυτό το είδος της καθυστερημένης λειτουργίας εγγραφής δεν μπορεί να συμβεί σε ένα σύστημα διαμοιραζόμενης μνήμης, γιατί κάθε διεργασία γράφει και διαβάζει από όλες τις διεργασίες απευθείας. Αν μια διεργασία περιέχει μια λειτουργία εγγραφής σε ένα κανάλι, είναι πάντα σίγουρο ότι από τη στιγμή που θα ολοκληρωθεί η εκτέλεση αυτής της λειτουργίας, η εγγραφή έχει πραγματικά συνέβη. Ας θεωρήσουμε ότι εκτελούμε το πρόγραμμα του σχήματος 8.2 σε έναν πολυεπεξεργαστή. Όταν η διεργασία i εκτελεί τη δήλωση “Com[k]:= outvalue”, η τιμή πραγματικά γράφεται φυσικά στο κανάλι εκείνη την χρονική στιγμή. Όμως, σε ένα σύστημα κατανεμημένης μνήμης κάτι διαφορετικό συμβαίνει. Υποθέστε για παράδειγμα ότι το “k” έχει τιμή 5 και το “outvalue” έχει τιμή 150. Η Multi-Pascal θα δημιουργήσει αυτόματα ένα μήνυμα της μορφής “γράψε 150 στο Com[5]” και θα το στείλει μέσα από το δίκτυο διασύνδεσης στον επεξεργαστή 5. Αμέσως μετά η διεργασία i θα συνεχίσει την εκτέλεση της επόμενης δήλωσης, ενώ το μήνυμα ακόμη ταξιδεύει προς τον προορισμό του. Έτσι, η λειτουργία εγγραφής σε κανάλι συμβαίνει όπως ακριβώς και σε ένα σύστημα διαμοιραζόμενης μνήμης με τη διαφορά ότι υπάρχει καθυστέρηση.

 

PROGRAM Sample;

(*Κανάλια επικοινωνίας*)

VAR Com: ARRAY [1..30] OF CHANNEL OF INTEGER;

    ...

PROCEDURE Process(i: INTEGER);

    VAR invalue, outvalue, k: INTEGER;

        ...

    BEGIN

        ...

        invalue:= Com[i];(*Διαβάζει από τη δική μου θύρα επικοινωνίας*)

        ...

        Com[k]:= outvalue; (*Στέλνει την “outvalue” στη διεργασία k*)

        ...

    END;

BEGIN

        ...

        FORALL i:= 1 to 30 DO

            (PORT Com[i]) Process(i)

        ...

END.

ΣΧΗΜΑ 8.2 Χρήση των καναλιών επικοινωνίας

 

Αυτή η καθυστέρηση στις λειτουργίες εγγραφής σε κανάλια έχει σημαντικές συνέπειες στην απόδοση του προγράμματος. Στα περισσότερα συστήματα κατανεμημένης μνήμης η καθυστέρηση της επικοινωνίας του μηνύματος κατά μήκους του δικτύου διασύνδεσης είναι ίσα με 50-60 φορές το χρόνο του κύκλου εντολής του επεξεργαστή. Μπορεί να έχουμε σοβαρή μείωση της απόδοσης αν πρέπει συχνά οι διεργασίες να περιμένουν την αποστολή δεδομένων από απομακρυσμένες τοποθεσίες. Όταν ένας προγραμματιστής δημιουργεί ένα πρόγραμμα σε ένα σύστημα κατανεμημένης μνήμης πρέπει να γνωρίζει αυτές τις καθυστερήσεις επικοινωνίας της αρχιτεκτονικής και να προσπαθήσει να δομήσει έτσι το πρόγραμμα, ώστε να ελαχιστοποιηθεί η επίδραση αυτών των καθυστερήσεων. Το θέμα αυτό αναφέρεται με περισσότερες λεπτομέρειες στο επόμενο κεφάλαιο.

 

8.1.3 Σύγκριση με άλλες γλώσσες

 

Όπως συμβαίνει στην Multi-Pascal, έτσι και σε άλλες γλώσσες προγραμματισμού συστημάτων κατανεμημένης μνήμης η πιο συνηθισμένη τεχνική επικοινωνίας απαιτεί η διεργασία εγγραφής να εκτελεί ένα είδος λειτουργίας αποστολή μηνύματος και η διεργασία ανάγνωσης να εκτελεί μια λειτουργία λήψης μηνύματος. Βέβαια το συντακτικό και η σημασιολογία αυτών των λειτουργιών επικοινωνίας διαφέρουν σημαντικά μεταξύ διαφορετικών γλωσσών. Όμως, αυτές οι αρχές επικοινωνίας μπορούν να χωριστούν σε δυο γενικές κατηγορίες: την ασύγχρονη και την σύγχρονη επικοινωνία. Η ασύγχρονη επικοινωνία είναι μη-ανασταλτική για τη διεργασία εγγραφής: η διεργασία εγγραφής δεν χρειάζεται να περιμένει για να λάβει η διεργασία ανάγνωσης το μήνυμα. Επίσης η ασύγχρονη επικοινωνία είναι απομονωμένη πράγμα που σημαίνει ότι τα μηνύματα αποθηκεύονται σε απομονωτές μέχρι να αποφασίσει η διεργασία ανάγνωσης να τα λάβει.

Στην σύγχρονη επικοινωνία οι διεργασίες εγγραφής και ανάγνωσης αναστέλλονται μέχρι να ολοκληρωθεί η επικοινωνία. Στην πραγματικότητα οι διεργασίες ανάγνωσης και εγγραφής φτάνουν μαζί την ίδια χρονική στιγμή να ανταλλάξουν μηνύματα. Αυτό το είδος της επικοινωνίας μερικές φορές ονομάζεται ραντεβού. Η σύγχρονη επικοινωνία είναι συνήθως μη-απομονωμένη δηλαδή δεν υπάρχει ανάγκη αποθήκευσης των μηνυμάτων, εφόσον κάθε μήνυμα πηγαίνει απευθείας από την διεργασία εγγραφής στη διεργασία ανάγνωσης. Έτσι, η ασύγχρονη επικοινωνία είναι απομονωμένη και μη-ανασταλτική για τη διεργασία εγγραφής, ενώ η σύγχρονη επικοινωνία είναι μη-απομονωμένη και ανασταλτική για τη διεργασία εγγραφής. Όμως και οι δύο μορφές επικοινωνίας είναι ανασταλτικές για τη διεργασία ανάγνωσης. Το κανάλι επικοινωνίας που χρησιμοποιείται στη γλώσσα Multi-Pascal ανήκει στην ασύγχρονη μορφή.

Μια τυπική σύνταξη για ασύγχρονη επικοινωνία σε άλλες γλώσσες συστημάτων κατανεμημένης μνήμης είναι:

 

Writer Process executes:

        Send(processor_number, process_number, message_pointer);

Reader Process executes:

        Receive(message_pointer);

Στην παραπάνω λειτουργία αποστολής (send) η διεργασία εγγραφής αναγνωρίζει τη διεργασία προορισμού χρησιμοποιώντας τον αριθμό του φυσικού επεξεργαστή όπου εκτελείται η διεργασία. Στην περίπτωση κατά την οποία υπάρχουν πολλές διεργασίες που εκτελούνται στον ίδιο επεξεργαστή, χρησιμοποιείται και ένας τοπικός αριθμός διεργασίας. Το ζεύγος “αριθμός_επεξεργαστή, αριθμός_διεργασίας”, δηλαδή το (processor_number, process_number) αναπαριστά ένα μοναδικό αναγνωριστικό διεργασίας που καθορίζει τον προορισμό του μηνύματος. Η παράμετρος “δείκτης_μηνύματος”, “message_pointer”, απλά δείχνει στο μπλοκ των δεδομένων που θα μεταδοθούν. Η διεργασία ανάγνωσης χρειάζεται μόνο μια παράμετρο “δείκτη_μηνύματος” για να λάβει τα μεταδιδόμενα δεδομένα. Σε κάποιες γλώσσες υπάρχουν κάποιοι μηχανισμοί με τους οποίους η διεργασία ανάγνωσης μπορεί να διαλέξει ένα συγκεκριμένο αποστολέα από τον οποίο θα λάβει ένα μήνυμα.

Στην Multi-Pascal ο προορισμός κάθε μηνύματος καθορίζεται από τον δείκτη του πίνακα των θυρών επικοινωνίας. Έτσι, έχουμε τη μετατροπή, σε σχέση με τις παραπάνω διαδικασίες Αποστολής και Λήψης:

 

Writer Process:

        Com[i]:= message; (*Αποστολή στη διεργασία i*)

Reader Process:

        message:= Com[i]; (*Λήψη μηνύματος*)

Ο δείκτης i χρησιμοποιείται σαν αναγνωριστικός αριθμός της διεργασίας, δηλαδή αντικαθιστά το ζεύγος “αριθμός_επεξεργαστή, αριθμός_διεργασίας” που χρησιμοποιήθηκε στις διαδικασίες Αποστολής και Λήψης. Γι’ αυτό το λόγο η δήλωση PORT είναι αναγκαία στην Multi-Pascal. Με τον τρόπο αυτό “δένεται” το κανάλι Com[i] με τη διεργασία i, έτσι ώστε το σύστημα να γνωρίζει που να βρει το Com[i] όταν μια διεργασία γράφει σε αυτό.

Ο άλλος τύπος επικοινωνίας, δηλαδή η σύγχρονη επικοινωνία, μπορεί να χρησιμοποιήσει και αυτή μια γενική σύνταξη, όπως οι διαδικασίες Αποστολής και Λήψης που προαναφέρθηκαν. Συχνά με την σύγχρονη επικοινωνία η διεργασία εγγραφής αντί να αναγνωρίζει τη διεργασία προορισμού καθορίζει το φυσικό σύνδεσμο επικοινωνίας διαμέσου του οποίου πραγματοποιείται η επικοινωνία. Ο φυσικός σύνδεσμος θα συνδεθεί με έναν γειτονικό φυσικό επεξεργαστή. Η διεργασία ανάγνωσης πρέπει να παραμείνει στον επεξεργαστή προορισμού και επίσης να καθορίσει το φυσικό σύνδεσμο με τον ακόλουθο τρόπο:

 

Writer Process executes:

        Send(link_number,message_pointer);

Reader Process executes:

        Receive((link_number, message_pointer);

Εφόσον αυτές είναι αρχές σύγχρονης επικοινωνίας, μπορούν να εκτελούνται και οι δύο ταυτόχρονα στα αντίθετα άκρα του καθορισμένου φυσικού συνδέσμου επικοινωνίας. Αν είτε η διεργασία εγγραφής είτε η διεργασία ανάγνωσης φτάσει νωρίτερα αναγκάζεται να περιμένει την άλλη. Αυτό το είδος της αμοιβαίας αναστολής της επικοινωνίας στο φυσικό σύνδεσμο είναι περισσότερο στοιχειώδες από την ασύγχρονη επικοινωνία που περιγράφτηκε παραπάνω. Σε κάποιες γλώσσες, ο αριθμός φυσικού συνδέσμου μπορεί να αντικατασταθεί από ένα λογικό η εικονικό σύνδεσμο επικοινωνίας που δεν αντιστοιχεί απαραίτητα σε ένα φυσικό σύνδεσμο στο υλικό του συστήματος κατανεμημένης μνήμης. Επίσης ο αριθμός συνδέσμου μπορεί να αντικατασταθεί από το όνομα ενός καναλιού επικοινωνίας που καθορίζεται στο πρόγραμμα και το οποίο είναι συνδεδεμένο με κάποιο καθορισμένο φυσικό σύνδεσμο. Αυτή είναι η προσέγγιση της παράλληλης γλώσσας προγραμματισμού OCCAM που χρησιμοποιείται με το INMOS Transputer (Inmos 85).


     Next              Up                Back               Contents

Επόμενο:8.2 Γλωσσική Υποστήριξη Προγραμματισμού Περάσματος Μηνυμάτων Πάνω: Κεφάλαιο 8o: Προγράμματα περάσματος μηνυμάτων Πίσω: Κεφάλαιο 8o: Προγράμματα περάσματος μηνυμάτων