Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη)

Σχετικά έγγραφα
Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη)

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη)

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη)

Συστηματικός έλεγχος ορθότητας ταυτόχρονων προγραμμάτων μέσω γράφου καταστάσεων

Συστηματικός έλεγχος ορθότητας ταυτόχρονων προγραμμάτων μέσω γράφου καταστάσεων

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Αμοιβαίος αποκλεισμός με κοινή μνήμη. Ταυτόχρονος Προγραμματισμός 1

Αμοιβαίος αποκλεισμός με κοινή μνήμη. Ταυτόχρονος Προγραμματισμός 1

Αμοιβαίος αποκλεισμός με κοινή μνήμη. Ταυτόχρονος Προγραμματισμός 1

Διεργασίες (μοντέλο μνήμης & εκτέλεσης) Προγραμματισμός II 1

Κρίσιμη Περιοχή Υπό Συνθήκη (Conditional Critical Regions) Ταυτόχρονος Προγραμματισμός 1

Ελεγκτές/Παρακολουθητές (Monitors) Ταυτόχρονος Προγραμματισμός 1

Λειτουργικά Συστήματα Η/Υ

Σηματοφόροι (Σηματοφορείς) Ταυτόχρονος Προγραμματισμός 1

Προγραμματισμός Ι (HY120)

Συνοχή κρυφής μνήμης σε πολυπύρηνα/πολυεπεξεργαστικά συστήματα

Λειτουργικά Συστήματα

Όταν το πρόγραμμα φτάσει σε αυτή την εντολή και ο καταχωρητής PINA έχει την τιμή

Εντοπισμός τερματισμού. Κατανεμημένα Συστήματα 1

Συνέπεια μνήμης σε πολυπύρηνα/πολυεπεξεργαστικά συστήματα

Εισαγωγικά & Βασικές Έννοιες

Σηματοφόροι (Σηματοφορείς) Ταυτόχρονος Προγραμματισμός 1

Εισαγωγικά & Βασικές Έννοιες

Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1

Βασικές έννοιες. Κατανεμημένα Συστήματα 1

Αρχιτεκτονική Eckert-von Neumann. Πως λειτουργεί η ΚΜΕ; Κεντρική μονάδα επεξεργασίας [3] ΕΠΛ 031: ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Προγραμματισμός Η/Υ (ΤΛ2007 )

Υλοποίηση Σηματοφόρων

Προγραμματισμός Ι. Προχωρημένα Θέματα. Δημήτρης Μιχαήλ. Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Δομημένος Προγραμματισμός (ΤΛ1006)

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

Μικροεπεξεργαστές - Μικροελεγκτές Ψηφιακά Συστήματα

ΔΙΑΧΥΤΑ ΚΑΙ ΕΝΣΩΜΑΤΩΜΕΝΑ ΣΥΣΤΗΜΑΤΑ

Υ- 07 Παράλληλα Συστήματα Συνέπεια και συνοχή μνήμης

ILP (integer linear programming) βασιζόμενη εξαρτώμενη από τους πόρους μεταγλώττιση

Διαδικασιακός Προγραμματισμός

Προγραμματισμός Ι. Δυναμική Διαχείριση Μνήμης. Δημήτρης Μιχαήλ. Ακ. Έτος Τμήμα Πληροφορικής και Τηλεματικής Χαροκόπειο Πανεπιστήμιο

Σκοπός. Προγραμματίζοντας τον Arduino ΙΙ Εντολή Εκχώρησης & Εντολές. Συλλογή & Επεξεργασία Δεδομένων. Πρόγραμμα. Εντολές Επεξεργασίας Δεδομένων

Ορθότητα λειτουργίας τμημάτων λογισμικού & δομών δεδομένων υπό ταυτόχρονη εκτέλεση

Αμοιβαίος αποκλεισμός

ΠΑΝΕΠΙΣΤΗΜΙΟ ΚΥΠΡΟΥ Τ Μ Η Μ Α Π Λ Η Ρ Ο Φ Ο Ρ Ι Κ Η Σ

Πανεπιστήμιο Θεσσαλίας Τμήμα Μηχανικών Η/Υ, Τηλεπικοινωνιών και Δικτύων

Το λειτουργικό σύστημα. Προγραμματισμός II 1

Αρχιτεκτονική υπολογιστών

Ελεγκτές/Παρακολουθητές (Monitors) Ταυτόχρονος Προγραμματισμός 1

ΟΜΑΔΕΣ ΕΝΤΟΛΩΝ: ΙΔΙΟΤΗΤΕΣ ΚΑΙ ΛΕΙΤΟΥΡΓΙΕΣ

for for for for( . */

Οργάνωση επεξεργαστή (2 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Εικονική Μνήμη (Virtual Memory) Προγραμματισμός II 1

Τμήμα Λογιστικής. Εισαγωγή στους Ηλεκτρονικούς Υπολογιστές. Μάθημα 8. 1 Στέργιος Παλαμάς

Βασικές Έννοιες Πρ Ταο υγρ τόα χ μ ρ μ ο α ν τισμ ος Π ό ρ ςο ΙΙΙ γραμματισμός 1

ΗΜΥ 100 Εισαγωγή στην Τεχνολογία ιάλεξη 5

Εισαγωγή εκτελέσιμου κώδικα σε διεργασίες

Διάλεξη 2η: Αλγόριθμοι και Προγράμματα

Κεφάλαιο 7 : Είδη, Τεχνικές, και Περιβάλλοντα Προγραµµατισµού

ιεργασίες και νήµατα Προγραµµατισµός ΙΙΙ 1 lalis@inf.uth.gr

; Γιατί είναι ταχύτερη η λήψη και αποκωδικοποίηση των εντολών σταθερού μήκους;

Μηχανοτρονική. Τμήμα Μηχανικών Παραγωγής και Διοίκησης 7 ο Εξάμηνο,

Δομημένος Προγραμματισμός

Πώς το λένε Computer game στο Scratch

Προγραμματισμός Ι (ΗΥ120)

Βασικές έννοιες. Κατανεμημένα Συστήματα 1

Υ- 01 Αρχιτεκτονική Υπολογιστών Back- end: χρονοπρογραμματισμός, εντολές προσπέλασης μνήμης

Προγραμματισμός Ι (ΗΥ120)

Προγραμματισμός Ταυτόχρονος Προγραμματισμός

Ε-85: Ειδικά Θέµατα Λογισµικού

Δημιουργία & Τερματισμός Διεργασιών. Προγραμματισμός II 1

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ Η/Υ Ακαδημαϊκό έτος ΤΕΤΡΑΔΙΟ ΕΡΓΑΣΤΗΡΙΟΥ #4

Φύλλο εργασίας 3 - Χριστουγεννιάτικα φωτάκια (σταδιακή αύξηση και μείωση φωτεινότητας ενός LED) Το κύκλωμα σε breadboard

ΠΛΕ- 027 Μικροεπεξεργαστές 6ο μάθημα: Αρχιτεκτονική πυρήνα: υλοποίηση με διοχέτευση

Διάλεξη 1: Εισαγωγή στον Κατανεμημένο Υπολογισμό. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Το ολοκληρωμένο κύκλωμα μιας ΚΜΕ. «Φέτα» ημιαγωγών (wafer) από τη διαδικασία παραγωγής ΚΜΕ

Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών Απόδοση ΚΜΕ. (Μέτρηση και τεχνικές βελτίωσης απόδοσης)

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ

Παράλληλη Επεξεργασία Κεφάλαιο 1 Γιατί Παράλληλος Προγραμματισμός;

Προγραμματισμός Ι (ΗΥ120)

Λειτουργικά Συστήματα. Τ.Ε.Ι. Ιονίων Νήσων Σχολή Διοίκησης και Οικονομίας - Λευκάδα

Αρχιτεκτονική Μνήµης

Κεφάλαιο 6 Υλοποίηση Γλωσσών Προγραμματισμού

ΠΑΝΕΠΙΣΤΗΜΙΟ ΘΕΣΣΑΛΙΑΣ ΠΟΛΥΤΕΧΝΙΚΗ ΣΧΟΛΗ ΤΜΗΜΑ ΗΛΕΚΤΡΟΛΟΓΩΝ ΜΗΧΑΝΙΚΩΝ ΚΑΙ ΜΗΧΑΝΙΚΩΝ Η/Υ

Μέρος 2 Κατασκευή Συντακτικού Αναλυτή

Μεταγλώττιση και σύνδεση πολλαπλών αρχείων κώδικα. Προγραμματισμός II 1

Εργαστήριο ΔΙΕΡΓΑΣΙΕΣ - ΔΙΑΧΕΙΡΙΣΗ

Οργάνωση επεξεργαστή (1 ο μέρος) ΜΥΥ-106 Εισαγωγή στους Η/Υ και στην Πληροφορική

Ιδιοκτησία Αντικειµένου

Ιόνιο Πανεπιστήμιο Τμήμα Πληροφορικής Αρχιτεκτονική Υπολογιστών Εικονική Μνήμη. (και ο ρόλος της στην ιεραρχία μνήμης)

Δομημένος Προγραμματισμός (ΤΛ1006)

Αρχιτεκτονική Μνήμης

Μνήμη Διευθύνσεις Δείκτες. Προγραμματισμός II 1

Προβλήματα, αλγόριθμοι, ψευδοκώδικας

Προεπεξεργαστής C. Προγραμματισμός Ι 1

Το λειτουργικό σύστημα. Προγραμματισμός II 1

ΗΜΥ 100 Εισαγωγή στην Τεχνολογία ιάλεξη 9

Ορθότητα λειτουργίας τμημάτων λογισμικού & δομών δεδομένων υπό ταυτόχρονη εκτέλεση

Παράδειγµα: Προσοµοίωση µιας ουράς FIFO Οι λειτουργίες που υποστηρίζονται από µια ουρά FIFO είναι: [enq(q,x), ack(q)] [deq(q), return(q,x)] όπου x είν

Κατανεμημένα Συστήματα

Ιεραρχία Μνήμης. Εικονική μνήμη (virtual memory) Επεκτείνοντας την Ιεραρχία Μνήμης. Εικονική Μνήμη. Μ.Στεφανιδάκης

Τεχνολογίες Υλοποίησης Αλγορίθµων

Το λειτουργικό σύστημα. Προγραμματισμός II 1

ΗΜΥ Εργαστήριο Οργάνωσης Υπολογιστών και Μικροεπεξεργαστών

Transcript:

Προβλήματα ταυτόχρονης εκτέλεσης (για νήματα με κοινή μνήμη) ΙΙΙ 1 lalis@inf.uth.gr

Ταυτόχρονη εκτέλεση Ο προγραμματιστής δεν ελέγχει (άμεσα) την εκτέλεση/εναλλαγή των νημάτων Δεν γνωρίζει πότε θα αρχίσει η εκτέλεση ενός νήματος Ούτε σε ποια σημεία διακοπεί η εκτέλεση του νήματος για να γίνει εναλλαγή Ούτε σε ποιο νήμα θα γίνει κάθε εναλλαγή Τα σημεία στα οποία γίνεται η εναλλαγή μπορεί να είναι διαφορετικά σε κάθε νέα εκτέλεση Μπορεί να είναι δύσκολο (πρακτικά αδύνατο) να αναπαραχθεί η ίδια («μικτή») εκτέλεση ΙΙΙ 2 lalis@inf.uth.gr

Ταυτόχρονη εκτέλεση με μόνο 1 CPU Το γεγονός ότι δύο (ή περισσότερες) διεργασίες εκτελούνται πάνω από την ίδια CPU δεν λύνει το πρόβλημα της απρόβλεπτης σειράς εκτέλεσης παρότι δεν υπάρχει πραγματική παράλληλη εκτέλεση Εξακολουθούμε να μην γνωρίζουμε την σειρά με την οποία θα εκτελεστούν οι εντολές τους Ούτε είναι σίγουρο ότι αυτή η σειρά θα είναι ίδια κάθε φορά που θα επαναλαμβάνουμε την εκτέλεση Το πρόβλημα της απρόβλεπτης σειράς εκτέλεσης παραμένει ακόμα και σε συστήματα με έναν μοναδικό επεξεργαστή ΙΙΙ 3 lalis@inf.uth.gr

χρόνος (α) 1 2 3 4 5 1 2 3 4 5 6 7 (β) 1 1 2 3 4 2 3 4 5 6 7 5 (γ) 1 1 2 2 3 3 4 4 5 5 6 7 ΙΙΙ 4 lalis@inf.uth.gr

Πρόβλημα στην αποσφαλμάτωση Συμβατική μέθοδος επαλήθευσης ορθότητας: αν το πρόγραμμα επιστρέψει το σωστό αποτέλεσμα Υ για παραμέτρους Χ, τότε θα επιστρέφει Υ κάθε φορά που καλείται με τις ίδιες παραμέτρους Χ Δεν ισχύει: διαφορετικές (μικτές) εκτελέσεις, πιθανώς να δίνουν διαφορετικά αποτελέσματα Συμβατική μέθοδος εντοπισμού σφαλμάτων: αν το πρόγραμμα παρουσιάσει πρόβλημα ή λάθος για παραμέτρους Χ, τότε αυτό θα γίνεται κάθε φορά που καλείται με παραμέτρους Χ Δεν ισχύει: τα λάθη δεν αναπαράγονται εγγυημένα (ίσως να μην εμφανιστούν σε επόμενες εκτελέσεις) ΙΙΙ 5 lalis@inf.uth.gr

Πρόβλημα μη ατομικότητας εντολών Ατομικές εντολές: εκτελούνται εγγυημένα χωρίς παρεμβολή εντολών από άλλα νήματα Μια ακολουθία από εντολές ψηλού επιπέδου προφανώς δεν είναι ατομική Ακόμα και μια μοναδική εντολή ψηλού επιπέδου δεν είναι απαραίτητα ατομική (σε χαμηλό επίπεδο) Υπό ταυτόχρονη εκτέλεση, μπορεί να ακυρωθούν «προφανείς» σχέσεις/αλληλουχίες ψηλού επιπέδου ΙΙΙ 6 lalis@inf.uth.gr

high-level code i=i+1; low-level code load i,reg add reg 1 store reg,i symbolic code tmp=i i=tmp+1 ΙΙΙ 7 lalis@inf.uth.gr

high-level code if (a) S low-level code L1 load a,reg cmp reg,0 breq L1 S symbolic code tmp=a if (tmp) S ΙΙΙ 8 lalis@inf.uth.gr

Πρόβλημα μετάδοσης αλλαγών Μια μεταβλητή μπορεί να κρατιέται σε καταχωρητή Υπό ταυτόχρονη εκτέλεση, η τιμή του καταχωρητή ενός νήματος μπορεί να είναι παλιά λόγω καθυστέρησης μετάδοσης των αλλαγών από τους καταχωρητές προς και από την κοινή μνήμη Αλλαγές σε κοινές μεταβλητές δεν είναι εγγυημένα (άμεσα) ορατές ανάμεσα σε διαφορετικά νήματα Χρησιμοποιούνται προσδιοριστές (π.χ., volatile) έτσι ώστε η μεταβλητή να γράφεται / διαβάζεται κάθε φορά στην / από την μνήμη ΙΙΙ 9 lalis@inf.uth.gr

high-level code a = 1; a = a + 1; low-level code set reg,1 add reg,1 store reg,a high-level code while (a) {} low-level code load a,reg L1 cmp reg,0 breq L1 ΙΙΙ 10 lalis@inf.uth.gr

Πρόβλημα μετάδοσης αλλαγών (2) Αλλαγές σε μεταβλητές που ξεπερνούν το μέγεθος της «λέξης» της CPU μπορεί να αποθηκεύονται ή/και να διαβάζονται με μη ατομικά long a; a=tmp; store tmp[1],a[1] store tmp[0],a[0] Μπορεί να γίνει «αντιμετάθεση» εντολών, από τον μεταγλωττιστή ή τον επεξεργαστή a=1; b=-1 store b,-1 store a,1 ΙΙΙ 11 lalis@inf.uth.gr

int a=0; long b=0; P1: a=1; b=-1; P2: tmp =( (b==0) (b==-1 && a==1) ); υπό ταυτόχρονη εκτέλεση, η tmp μπορεί να γίνει 0! ΙΙΙ 12 lalis@inf.uth.gr

Ένα απλό μοντέλο μνήμης Δεν υπάρχουν καταχωρήτες ούτε κρυφή μνήμη Οι τιμές των καθολικών/κοινών μεταβλητών αντιγράφονται σε τοπικές μεταβλητές Πράξεις γίνονται μόνο σε τοπικές μεταβλητές Οι τιμές των τοπικών μεταβλητών αντιγράφονται πίσω στις καθολικές/κοινές μεταβλητές Για απλούς τύπους δεδομένων, η αντιγραφή από και προς την κοινή μνήμη γίνεται ατομικά Εστιάζουμε μόνο στο πρόβλημα της (φανερής) μη ατομικότητας μιας ακολουθίας εντολών Αυτό αρκεί για να μελετηθούν/επιλυθούν τα κύρια προβλήματα του ταυτόχρονου προγραμματισμού ΙΙΙ 13 lalis@inf.uth.gr

P1 P2 symbolic view local local local load store global global global load store local local local main memory hardware CPU registers CPU registers cache cache bus ΙΙΙ 14 lalis@inf.uth.gr

Συνθήκη ανταγωνισμού Έστω ότι στον κώδικα Α υπάρχει ένα κρίσιμο σημείο που αποτελείται από μια σειρά εντολών που θέλουμε να εκτελεστούν ατομικά/συνεχόμενα σε σχέση με τον κώδικα Β που είναι ανταγωνιστικός ως προς τον Α Αν αυτό δεν είναι εγγυημένο, τότε λέμε ότι υπάρχει μια συνθήκη ανταγωνισμού: η σωστή λειτουργία του κώδικα Α εξαρτάται από το αν τελικά θα υπάρξει ανταγωνισμός με τον κώδικα Β Οι συνθήκες ανταγωνισμού είναι γενικά ανεπιθύμητες (και συνήθως είναι προγραμματιστικά λάθη) Μπορεί να οδηγήσουν σε ασυνέπεια δεδομένων καθώς και ατέρμονη αναμονή ΙΙΙ 15 lalis@inf.uth.gr

P1 i=i+1; i P2 i=i+1; ΙΙΙ 16 lalis@inf.uth.gr

int i=0; P1: tmp1=i i=tmp1+1 P2: tmp2=i i=tmp2+1 ΙΙΙ 17 lalis@inf.uth.gr

σενάριο (α) P1: tmp1=i P1: i=tmp1+1 P2: tmp2=i P2: i=tmp2+1 i = 2 P1: tmp1=i σενάριο (β) P2: tmp2=i P2: i=tmp2+1 P1: i=tmp1+1 i = 1 ΙΙΙ 18 lalis@inf.uth.gr

P1 rdy=1; WAKEUP(); rdy P2 if (!rdy) WAIT(); ΙΙΙ 19 lalis@inf.uth.gr

int data; int rdy=0; P1: rdy=1; WAKEUP(); P2: tmp=rdy; if (!tmp) WAIT(); ΙΙΙ 20 lalis@inf.uth.gr

P2: tmp=rdy /* 0 */ P2: if (!tmp) WAIT /*wait*/ P1: rdy=1 P1: WAKEUP /* awake */ P2: σενάριο (α) εντάξει σενάριο (β) P2: tmp=rdy /* 0 */ P1: rdy=1 P1: WAKEUP /* nop */ P2: if (!tmp) WAIT /*wait*/ η P2 θα μείνει σε αναμονή (για πάντα) Προγραμματισμός ΙΙΙ 21 lalis@inf.uth.gr

Απόδειξη ιδιοτήτων Ιδανικά, η ορθότητα ενός ταυτόχρονου προγράμματος (συστήματος) πρέπει να επαληθευθεί συστηματικά Αυτό δεν μπορεί να γίνει μέσω «τυχαίων» δοκιμών Χρειάζεται διεξοδικός έλεγχος όλων των πιθανών σεναρίων μικτής εκτέλεσης Ιδιότητες ασφάλειας (safety properties): το σύστημα δεν θα εισέλθει ποτέ σε μια ανεπιθύμητη κατάσταση Ιδιότητες προόδου (progress properties): το σύστημα θα φτάσει κάποια στιγμή σε μια επιθυμητή κατάσταση ΙΙΙ 22 lalis@inf.uth.gr

Διάγραμμα καταστάσεων Οι πιθανές εκτελέσεις ενός ταυτόχρονου συστήματος περιγράφονται με την μορφή ενός γράφου G=(V,E) Ο κόμβος v i V αντιστοιχεί σε μια πιθανή κατάσταση Η κατευθυνόμενη ακμή e=(v i,v j ) E αντιστοιχεί σε μια πιθανή μετάβαση από την κατάσταση v i στην v j Οι μεταβάσεις πραγματοποιούνται μέσα από εντολές που θεωρούμε ότι πραγματοποιούνται ατομικά Μια πιθανή εκτέλεση x={v 0,v 1,v 2,} είναι μια διαδρομή κατά μήκος των ακμών του γράφου v 0 =InitState (v 0,v 1 ) E (v 1,v 2 ) E ΙΙΙ 23 lalis@inf.uth.gr

πιθανή κατάσταση αρχική κατάσταση πιθανή μετάβαση πιθανή εκτέλεση ΙΙΙ 24 lalis@inf.uth.gr

Επαλήθευση ιδιοτήτων Ιδιότητα ασφάλειας (safety property) safety-property Φ Για κάθε κατάσταση v i ισχύει Φ(v i ) Ιδιότητα προόδου (progress property) progress-property Φ1 Φ2 Αν υπάρχει κατάσταση v i που να ισχύει Φ1(v i ), τότε κάθε διαδρομή/εκτέλεση που περνάει από την v i περνάει στην συνέχεια, μέσα από μια ή περισσότερες μεταβάσεις, από μια κατάσταση v j για την οποία να ισχύει Φ2(v j ) ΙΙΙ 25 lalis@inf.uth.gr

safety-property Φ 0 1 2 3 4 5 6 7 8 9 10 ΙΙΙ 26 lalis@inf.uth.gr

progress-property Φ1 Φ2 0 1 2 3 4 5 6 7 8 9 10 ΙΙΙ 27 lalis@inf.uth.gr

int i=0; P1: 1: tmp1=i 2: i=tmp1+1 P2: 1: tmp2=i 2: i=tmp2+1 Επιθυμητή ιδιότητα: τελικά, η i να είναι 2 ΙΙΙ 28 lalis@inf.uth.gr

#εντολής P2 #εντολής P1 i tmp1 tmp2 -,- 0,-,- 1,- 0,0,- -,1 0,-,0 2,- 1,0,- 1,1 0,0,0 -,2 1,-,0 2,1 1,0,1 2,1 1,0,0 1,2 1,0,0 ρ 1,2 1,1,0 2,2 2,0,1 2,2 1,0,0 2,2 2,1,0 Προγραμματισμός ΙΙΙ 29 lalis@inf.uth.gr

int rdy=0; shadow w=0; P1: /* prepare data */ 1: rdy=1; 2: if (w) w=0; WAKEUP(); P2: 1: tmp=rdy; 2: if (tmp) noop(); else w=1; WAIT(); /* use data */ Επιθυμητή ιδιότητα: τελικά, η w να είναι 0 ΙΙΙ 30 lalis@inf.uth.gr

#εντολής P2 #εντολής P1 rdy tmp w -,- 0,-,0 1,- 1,-,0 -,1 0,0,0 2,- 1,-,0 1,1 1,1,0 1,1 1,0,0 -,2 0,0,1 2,1 1,1,0 2,2 1,1,0 1,2 1,1,0 ρ 2,1 1,0,0 2,2 1,0,1 1,2 1,0,1 2,2 1,0,0 ρ ΙΙΙ 31 lalis@inf.uth.gr