Next             Up               Back              Contents

Επόμενο:Α.2. ΜΕΤΑΒΛΗΤΕΣ ΚΑΝΑΛΙΩΝ Πάνω: Παράρτημα Α Πίσω: Παράρτημα Α


 

A.1. ΠΕΡΙΒΑΛΛΟΝΤΑ

 

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

Οι βασικοί κανόνες που καθορίζουν τη λειτουργία του περιβάλλοντος στη Multi-Pascal είναι ίδιοι με αυτούς της Pascal με τη προσθήκη ορισμένων κανόνων που αφορούν στις παράλληλες διαργασίες. Ο κύριος πρόσθετος κανόνας είναι ο παρακάτω:

 

Κανόνας Κληρονομικότητας Περιβάλλοντος

 

Κατά τη δημιουργία μιά νέας διεργασίας, η στοίβα περιβάλλοντος της διεργασίας-παιδιού αρχικοποιείται με την τρέχουσα στοίβα περιβάλλοντος της διεργασίας-γονέα.

 

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

Ο παραπάνω κανόνας ορίζει το αρχικό περιβάλλον κάθε διεργασίας. Ο επόμενος κανόνας ορίζει την εξέλιξη του περιβάλλοντος μιας διεργασίας:

 

Κανόνας Εξέλιξης Περιβάλλοντος

 

Κάθε δήλωση μεταβλητής, καθώς και κάθε κλήση ή τερματισμός διαδικασίας (ή συνάρτησης) κατά την εκτέλεση μιας διεργασίας, θα προσθέσει ή θα αφαιρέσει ή θα μεταβάλλει εγγραφές χώρων εργασίας στη στοίβα του περιβάλλοντος της διεργασίας σύμφωνα με τους κανόνες της Pascal.

 

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

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

 

 

Όλες οι μεταβλητές που δηλώνονται στην αρχή του κυρίως προγράμματος είναι καθολικές (διαμοιραζόμενες) για όλες τις διεργασίες.

 

Σε μια διεργασία όλες οι κλήσεις διαδικασιών ή συναρτήσεων δημιουργούν τοπικές (ιδιωτικές) μεταβλητές για τη συγκεκριμένη διεργασία.

 

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

 

PROGRAM Sample;


VAR ...


  PROCEDURE A;


  VAR ...


  BEGIN


    ...


  END; (* A *)



  PROCEDURE B;


  VAR ...



    PROCEDURE C;


    VAR ...


    BEGIN


      ...


    END; (* C *)



  BEGIN 


    ...


    FORK A; 


    FORK C;


    ...


  END; (* B *)



BEGIN 


  ...


  B;


  ...


END.

 

Στο παράδειγμα αυτό η διεργασία 0, δηλαδή το κυρίως πρόγραμμα, καλεί τη διαδικασία Β και δημιουργεί δύο νέες διεργασίες, την 1 και 2, με τη κλήση των διαδικασιών A και C αντίστοιχα. Οι δύο νέες διεργασίες κληρονομούν τη στοίβα περιβάλλοντος της διεργασίας 0 τη στιγμή της δημιουργίας τους. Η στοίβα αυτή περιλαμβάνει δύο εγγραφές χώρων εργασίας: την εγγραφή του κυρίως προγράμματος και αυτή της διαδικασίας Β. Η διεργασία 1 καλεί τη διαδικασία Α και προσθέτει την αντίστοιχη εγγραφή στο περιβάλλον της αλλά επειδή οι διαδικασίες Α και Β έχουν το ίδιο επίπεδο εμβέλειας η εγγραφή Β υπεργράφεται από αυτή της Α. Η διεργασία 2 καλεί τη διαδικασία C και επειδή η διαδικασία C είναι εσωτερική της B το περιβάλλον της διεργασίας 2 περιέχει τους χώρους τόσο της C όσο και της B. Στο σχήμα που ακολουθεί η στοίβα περιβάλλοντος υποτίθεται οτι αναπτύσσεται από πάνω προς τα κάτω:

 

	Διεργασία 0	Διεργασία 1	Διεργασία 2
	Main		Main		Main
	B			A			B
							C

 

Μετά την εκτέλεση των εντολών δημιουργίας των διεργασιών 1 και 2 η γονική διεργασία 0 συνεχίζει την εκτέλεσή της με τις υπόλοιπες εντολές της διαδικασίας Β και τελικά η διαδικασία Β τερματίζεται και η εκτέλεση συνεχίζεται στις εντολές του κυρίως προγράμματος. Εάν θεωρηθεί οτι οι διεργασίες παιδιά δεν έχουν επέλθει μεταβολές σε αυτό το σημείο τα περιβάλλοντα θα είναι όπως παρακάτω:

 

	Διεργασία 0	Διεργασία 1	Διεργασία 2
	Main		Main		Main
				A			B
							C

 

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

 

Κανόνας Διάρκειας Ζωής Περιβάλλοντος

 

Η διάρκεια ζωής μιάς εγγραφής χώρου εργασίας εκτείνεται όσο υπάρχει μη τερματισμένη διεργασία που πρέπει να έχει πρόσβαση στην εγγραφή.

 

Στο παράδειγμα που ακολουθεί παρουσιάζεται η δημιουργία διαδοχικών γενεών διεργασιών.

 

PROGRAM Sample;


VAR ...



  PROCEDURE D(i, j: INTEGER);


  VAR ...


  BEGIN


    ...


  END; (* D *)



  PROCEDURE E(i: INTEGER);


  VAR ...


  BEGIN


    ...


    FORK D(i,1);


    FORK D(i, 2);


    ...


  END; (* E *)



BEGIN


  ...


  FORALL i := 1 TO 3 DO


    E(i);


  ...


END.

 

Σε αυτό το πρόγραμμα η διεργασία 0 δημιουργεί τρείς διεργασίες παιδιά με την εντολή FORALL και την κλήση της διαδικασίας Ε. Όμως κάθε εκτέλεση της διαδικασίας Ε προκαλεί τη δημιουργία άλλων δύο διεργασιών μέσω της εντολής FORK και της κλήσης της διαδικασίας D. Το περιβάλλον που προκύπτει μπορεί να γίνει κατανοητό με τη βοήθεια της δενδρικής δομής του σχήματος Α.1. Κάθε πλαίσιο αντιστοιχεί σε μια εγγραφή χώρου εργασίας και συνοδεύεται από το όνομα της διαδικασίας που αντιστοιχεί, τις τιμές των παραμέτρων της διαδικασίας καθώς και τον αριθμό της αντίστοιχης διεργασίας. Η συνολική στοίβα του περιβάλλοντος μιας διεργασίας αποτελείται από τις εγγραφές που συναντάμε στη διαδρομή από τη ρίζα του δένδρου μέχρι την συγκεκριμένη διεργασία.

 

image

ΣΧΗΜΑ Α.1 Πολλαπλή δημιουργία διεργασιών

 

Η διεργασία 0 έχει μόνο μία εγγραφή αυτή του Main. Οι διεργασίες 1, 2 και 3 έχουν δύο εγγραφές, ενώ οι διεργασίες 4 έως 9 έχουν τρείς εγγραφές. Μιά σημαντική ιδιότητα των διαδοχικών γενεών διεργασιών είναι η δημιουργία διαμοιραζόμενων μεταβλητών με περιορισμένη διαθεσιμότητα. Έτσι, γιά παράδειγμα, οι διεργασίες 6 και 7 μοιράζονται την παράμετρο i με τιμή 2, ενώ για τις διεργασίες 8 και 9 η ίδια παράμετρος έχει την τιμή 3.

 


     Next             Up               Back              Contents

Επόμενο:Α.2. ΜΕΤΑΒΛΗΤΕΣ ΚΑΝΑΛΙΩΝ Πάνω: Παράρτημα Α Πίσω: Παράρτημα Α