Next              Up                Back               Contents

Επόμενο:4.2 Μεταβλητές Καναλιών Πάνω: Κεφάλαιο 4o : Επικοινωνία διεργασιών Πίσω: Κεφάλαιο 4o : Επικοινωνία διεργασιών


 

4.1 Κανάλια Επικοινωνίας Διεργασιών

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


FORK FOR i:=1 TO 20 DO sum1:=sum1+a[i];

FORK FOR j:=1 TO 20 DO sum2:=sum2+b[j];

JOIN; JOIN;

Η πρώτη διεργασία προσθέτει τα 20 πρώτα στοιχεία του πίνακα a, ενώ η δεύτερη προσθέτει τα στοιχεία του πίνακα b. Κάθε διεργασία έχει μια συγκεκριμένη σειρά εκτέλεσης εντολών αλλά η σχέση ανάμεσα στις δύο διεργασίες δεν είναι γνωστή. Από τη στιγμή που οι διεργασίες εκτελούνται σε διαφορετικούς επεξεργαστές, δεν είναι δυνατόν να εγγυηθούμε ότι η σχετικές τους ταχύτητες θα είναι ταυτόσημες. Για αυτό είναι δυνατόν η πρώτη διεργασία να προχωρεί γρηγορότερα και να φτάσει στο 15ο στοιχείο του πίνακα ενώ η δεύτερη διεργασία είναι ακόμα στο 8ο στοιχείο του δικού της πίνακα. Επίσης μπορεί και να συμβεί και ανάποδα, με τη δεύτερη διεργασία να εκτελείται ταχύτερα. Εξαιτίας των απρόβλεπτων καθυστερήσεων και των εξωτερικών επιδράσεων που επηρεάζουν τους επεξεργαστές ενός συστήματος διαμοιραζόμενης μνήμης, κανείς δεν μπορεί να είναι σίγουρος πόσο γρήγορα θα εκτελεστούν οι παράλληλες διεργασίες σε σχέση μεταξύ τους.

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

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

 

image

ΣΧΗΜΑ 4.1 Επικοινωνία μεταξύ παράλληλων διεργασιών

Αυτός ο τύπος επικοινωνίας μεταξύ των διεργασιών εμφανίζεται σε πολλά παράλληλα προγράμματα: μία διεργασία υπολογίζει ορισμένες τιμές που θα χρησιμοποιηθούν από άλλες παράλληλες διεργασίες. Για να χειρισθεί αυτή την κατάσταση, η μεταβλητή καναλιού έχει την δυνατότητα να είναι άδεια. Όταν μια διεργασία επιχειρήσει να διαβάσει ένα άδειο κανάλι, τότε η εκτέλεση της διεργασίας αυτομάτως αναβάλλεται έως ότου κάποια άλλη διεργασία γράψει μια τιμή μέσα στο κανάλι. Με την μετατροπή της μεταβλητής C, σε μεταβλητή καναλιού που αρχικά θα είναι άδεια, η διεργασία P2 θα χρειαστεί να περιμένει εφόσον επιχειρήσει να διαβάσει τη μεταβλητή C πριν η P1 γράψει την τιμή στη C. Έτσι εξασφαλίζεται ότι η επικοινωνία μεταξύ των διεργασιών θα είναι σωστή.


     Next              Up                Back               Contents

Επόμενο:4.2 Μεταβλητές Καναλιών Πάνω: Κεφάλαιο 4o : Επικοινωνία διεργασιών Πίσω: Κεφάλαιο 4o : Επικοινωνία διεργασιών