Χώροι Πλειάδων (Tuple Spaces) Ταυτόχρονος Προγραμματισμός 1

Σχετικά έγγραφα
Χώροι Πλειάδων (Tuple Spaces) Ταυτόχρονος Προγραμματισμός 1

Διαδιεργασιακή επικοινωνία (inter-process communication IPC) Προγραμματισμός II 1

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

Σύγχρονη επικοινωνία με ανταλλαγή μηνυμάτων (CSP message passing model) Ταυτόχρονος Προγραμματισμός 1

Επικοινωνία με μηνύματα. Κατανεμημένα Συστήματα 1

Επικοινωνία με μηνύματα. Κατανεμημένα Συστήματα 1

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

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

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

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

Αγωγοί/Σωλήνες (Pipes) Προγραμματισμός II 1

Προβλήματα Συγχρονισμού (με ελεγκτή) Ταυτόχρονος Προγραμματισμός 1

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

Ουρές Μηνυμάτων (Message Queues in System V) Προγραμματισμός II 1

Μετακινούμενος Κώδικας (Mobile Code) Κατανεμημένα Συστήματα 1

Σύγχρονη επικοινωνία με ανταλλαγή μηνυμάτων (CSP message passing model) Ταυτόχρονος Προγραμματισμός 1

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

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

Επικοινωνία αίτησης-απάντησης. Κατανεμημένα Συστήματα 1

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

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

Επικοινωνία αίτησης-απάντησης. Κατανεμημένα Συστήματα 1

Συγχρονισμός & σηματοφόροι. Προγραμματισμός II 1

Ενότητα 3: ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

Διασυνδεδεμένες Δομές. Λίστες. Προγραμματισμός II 1

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

Κατανεμημένος και Παράλληλος Προγραμματισμός MPI. Γρήγορος οδηγός αναφοράς 1/4/2017

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

Εργαστήριο 1. Βαθμός ΑΜ Εργ1.2 Σχόλια Εργ1.3 Σχόλια (20)

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

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

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

Αξιόπιστη μεταφορά δεδομένων πάνω από αναξιόπιστο δίκτυο. Κατανεμημένα Συστήματα 1

Αξιόπιστη μεταφορά δεδομένων πάνω από αναξιόπιστο δίκτυο. Κατανεμημένα Συστήματα 1

Λειτουργικά Συστήματα (διαχείριση επεξεργαστή, μνήμης και Ε/Ε)

Τι είναι ένα λειτουργικό σύστημα (ΛΣ); Μια άλλη απεικόνιση. Το Λειτουργικό Σύστημα ως μέρος του υπολογιστή

IPC System V. Προγραμματισμός II 1

Αδιέξοδα Ανάθεση Πόρων (Deadlocks Resource Allocation)

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

Δυναμική δέσμευση και αποδέσμευση μνήμης. Προγραμματισμός II 1

Εργαλεία ανάπτυξης εφαρμογών internet Ι

Εργαστήριο 14. Συγχρονισμός Νημάτων (χρήση pthread_mutex_t, pthread_cond_t)

ιαφάνειες παρουσίασης #5 (β)

Ανάπτυξη εφαρμογών σε προγραμματιστικό περιβάλλον υποδειγματική διδασκαλία Κεφ. 3 Δομές Δεδομένων & αλγόριθμοι

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

Τμήμα Οικιακής Οικονομίας και Οικολογίας. Οργάνωση Υπολογιστών

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

Μάθημα 4 ο. Κρίσιμα Τμήματα και Αμοιβαίος Αποκλεισμός

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

Οι βασικές λειτουργίες (ή πράξεις) που γίνονται σε μια δομή δεδομένων είναι:

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ ΙΙ - UNIX. Συστήματα Αρχείων. Διδάσκoντες: Καθ. Κ. Λαμπρινουδάκης Δρ. Α. Γαλάνη

14. Δικτύωση με Java Δικτύωση με Java Sockets Δημιουργία της σύνδεσης Διευθυνσιοδότηση της σύνδεσης

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

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

Εργαστήριο Λειτουργικών Συστημάτων 8o εξάμηνο, Ροή Υ, ΗΜΜΥ

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

ΕΙΣΑΓΩΓΗ ΣΤΗΝ ΠΛΗΡΟΦΟΡΙΚΗ

CloudBox!: Ένα εργαλείο cloud αποθήκευσης αρχείων με κατανεμημένο τρόπο

Τι σημαίνει; n Για την αποδοτική δέσμευση δομών δεδομένων μη. n Για την αποφυγή «διαρροών μνήμης» (memory leaks).

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

Alfaware Οδηγός Χρήσης Εφαρμογής (Software User Manual)

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

ΕΙΣΑΓΩΓΗ ΣΤΟΝ ΔΟΜΗΜΕΝΟ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟ

Αδιέξοδα Ανάθεση Πόρων (Deadlocks Resource Allocation)

Εργαλεία Ανάπτυξης Εφαρμογών Internet I

2.4 Κλασσικά Προβλήματα IPC

Προγραμματισμός Υπολογιστών & Εφαρμογές Python. Κ.Π. Γιαλούρης

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

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

διεύθυνση πρώτου στοιχείου διεύθυνση i-οστού στοιχείου T t[n]; &t[0] είναι t &t[i] είναι t + i*sizeof(t)

Διεργασίες (Processes)

Γραφικά υπολογιστών Εργαστήριο 4 Εισαγωγή στις λίστες

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

Επικοινωνία µεταξύ ιεργασιών και Σύνδροµες ιεργασίες

ΠΑΡΑΡΤΗΜΑ: QUIZ ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ

Μη ανασταλτική/πολυπλεξία Ε/Ε (non-blocking/multiplexed I/O) Προγραμματισμός II 1

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

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

Στοίβες με Δυναμική Δέσμευση Μνήμης

Η γλώσσα προγραμματισμού C

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

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

Βιβλιοθήκες Αφηρημένοι τύποι δεδομένων. Προγραμματισμός II 1

Κεφάλαιο 5. Κεφ. 5 Λειτουργικά Συστήματα 1

Σύστημα Ηλεκτρονικού Πρωτοκόλλου. Σχεδιασμός Υποσυστημάτων

Εισαγωγή. E-03: Λειτουργικά Συστήµατα ΙΙ 6. Εαρινό Εξάµηνο Κατανεµηµένα συστήµατα αρχείων. Μέρη κατανεµηµένου συστήµατος αρχείων

Διάλεξη 08: Λίστες ΙΙ Κυκλικές Λίστες

Φροντιστήριο 4 Σκελετοί Λύσεων

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

Ενότητες 3 & 4: Δένδρα, Σύνολα & Λεξικά Ασκήσεις και Λύσεις

Εισαγωγή στη γλώσσα προγραμματισμού C++

Δίκτυα Υπολογιστών Firewalls. Χάρης Μανιφάβας

ΛΕΙΤΟΥΡΓΙΚΑ ΣΥΣΤΗΜΑΤΑ II. Υφαντόπουλος Νικόλαος Υποψήφιος Διδάκτορας Contact:

ΑΝΑΠΤΥΞΗ ΕΦΑΡΜΟΓΩΝ ΣΕ ΠΡΟΓΡΑΜΜΑΤΙΣΤΙΚΟ ΠΕΡΙΒΑΛΛΟΝ

Δομές Δεδομένων & Αλγόριθμοι

Προγραμματισμός συστημάτων UNIX/POSIX

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

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

ΚΕΦΑΛΑΙΟ 3 ΔΟΜΕΣ ΔΕΔΟΜΕΝΩΝ ΚΑΙ ΑΛΓΟΡΙΘΜΟΙ

3 ο Εργαστήριο Μεταβλητές, Τελεστές

Transcript:

Χώροι Πλειάδων (Tuple Spaces) Ταυτόχρονος Προγραμματισμός 1 lalis@inf.uth.gr

Tuple space Ένας κοινός χώρος αποθήκευσης δεδομένων / μηνυμάτων, με μορφή πλειάδων (tuples) Παρέχονται ειδικές λειτουργίες για την προσθήκη, ανάγνωση και αφαίρεση πλειάδων Η ανάγνωση/αφαίρεση των πλειάδων γίνεται με βάση το σχήμα δεδομένων που δίνει/ζητά η εφαρμογή (όχι την σειρά με την οποία προστέθηκαν οι πλειάδες) Μόνιμη επικοινωνία: το tuple space υφίσταται ανεξάρτητα από τις διεργασίες που το χρησιμοποιούν Έμμεση επικοινωνία: οι διεργασίες δεν χρειάζεται να γνωρίζονται μεταξύ τους για να επικοινωνήσουν Ταυτόχρονος Προγραμματισμός 2 lalis@inf.uth.gr

Βασικές λειτουργίες out(<type 1 v 1, type 2 v 2,, type N v N >) προσθήκη πλειάδας (δεν μπλοκάρει) rd(<type 1 *v 1, type 2 *v 2,, type N *v N >) αναμονή μέχρι να υπάρξει «συμβατή» πλειάδα, και επιστροφή τιμών χωρίς να απομακρυνθεί η πλειάδα in(<type 1 *v 1, type 2 *v 2,, type N *v N >) αναμονή μέχρι να υπάρξει «συμβατή» πλειάδα, και επιστροφή τιμών με αφαίρεση της πλειάδας Ταυτόχρονος Προγραμματισμός 3 lalis@inf.uth.gr

Σχήμα πλειάδων Στις λειτουργίες in/rd, η πλειάδα που δίνεται σαν παράμετρος αποτελεί ένα σχήμα αναζήτησης μπορεί να έχει ως πεδία μεταβλητές (διευθύνσεις) ή τιμές Η πλειάδα που επιλέγεται πρέπει να είναι συμβατή, πεδίο-προς-πεδίο, με το σχήμα αναζήτησης ίδιος αριθμός πεδίων, με ίδιους τύπους για κάθε πεδίο αν ένα πεδίο του σχήματος έχει συγκεκριμένη τιμή, η πλειάδα πρέπει να έχει στο ίδιο πεδίο την ίδια τιμή αν ένα πεδίο του σχήματος είναι μεταβλητή, η πλειάδα πρέπει να έχει στο ίδιο πεδίο μια τιμή συμβατού τύπου (αυτή η τιμή αποθηκεύεται τελικά στην μεταβλητή) Ταυτόχρονος Προγραμματισμός 4 lalis@inf.uth.gr

Ταυτόχρονος Προγραμματισμός 5 lalis@inf.uth.gr

P1 out() Ταυτόχρονος Προγραμματισμός 6 lalis@inf.uth.gr

P1 Ταυτόχρονος Προγραμματισμός 7 lalis@inf.uth.gr

P1 Ταυτόχρονος Προγραμματισμός 8 lalis@inf.uth.gr

P1 3 fields match 3 fields Ταυτόχρονος Προγραμματισμός 9 lalis@inf.uth.gr

P1 match Ταυτόχρονος Προγραμματισμός 10 lalis@inf.uth.gr

P1 match Ταυτόχρονος Προγραμματισμός 11 lalis@inf.uth.gr

P1 no match Ταυτόχρονος Προγραμματισμός 12 lalis@inf.uth.gr

P2 out(< john,43,1.80>) Ταυτόχρονος Προγραμματισμός 13 lalis@inf.uth.gr

P2 < john,43,1.80> Ταυτόχρονος Προγραμματισμός 14 lalis@inf.uth.gr

P2 < john,43,1.80> 3 fields match Ταυτόχρονος Προγραμματισμός 15 lalis@inf.uth.gr

P2 < john,43,1.80> match Ταυτόχρονος Προγραμματισμός 16 lalis@inf.uth.gr

P2 < john,43,1.80> match Ταυτόχρονος Προγραμματισμός 17 lalis@inf.uth.gr

P2 < john,43,1.80> no match Ταυτόχρονος Προγραμματισμός 18 lalis@inf.uth.gr

P2 < john,43,1.80> P3 out() Ταυτόχρονος Προγραμματισμός 19 lalis@inf.uth.gr

P2 < john,43,1.80> Ταυτόχρονος Προγραμματισμός 20 lalis@inf.uth.gr

in(<&s,&i,1.65>) P2 < john,43,1.80> Ταυτόχρονος Προγραμματισμός 21 lalis@inf.uth.gr

in(<&s,&i,1.65>) P2 s = mary, i = 23 < john,43,1.80> Ταυτόχρονος Προγραμματισμός 22 lalis@inf.uth.gr

P2 < john,43,1.80> Ταυτόχρονος Προγραμματισμός 23 lalis@inf.uth.gr

rd(< mary,&i,1.65>) P2 < john,43,1.80> Ταυτόχρονος Προγραμματισμός 24 lalis@inf.uth.gr

rd(< mary,&i,1.65>) P2 i = 23 < john,43,1.80> Ταυτόχρονος Προγραμματισμός 25 lalis@inf.uth.gr

< john,43,1.80> Ταυτόχρονος Προγραμματισμός 26 lalis@inf.uth.gr

< john,43,1.80> P5 out(< nick,15,1.75, hello >) Ταυτόχρονος Προγραμματισμός 27 lalis@inf.uth.gr

< john,43,1.80> < nick,15,1.75, hello > Ταυτόχρονος Προγραμματισμός 28 lalis@inf.uth.gr

P6 out(< bla,5,1.75>) < john,43,1.80> < nick,15,1.75, hello > Ταυτόχρονος Προγραμματισμός 29 lalis@inf.uth.gr

P6 out(< bla,5,1.75>) < john,43,1.80> < nick,15,1.75, hello > Ταυτόχρονος Προγραμματισμός 30 lalis@inf.uth.gr

out(< bla,5,1.75>) < john,43,1.80> < nick,15,1.75, hello > Ταυτόχρονος Προγραμματισμός 31 lalis@inf.uth.gr

out(< bla,5,1.75>) < john,43,1.80> < nick,15,1.75, hello > s = bla,i = 5 Ταυτόχρονος Προγραμματισμός 32 lalis@inf.uth.gr

out(< bla,5,1.75>) < john,43,1.80> < nick,15,1.75, hello > Ταυτόχρονος Προγραμματισμός 33 lalis@inf.uth.gr

Συγχρονισμός Η λειτουργία out δεν μπλοκάρει Οι λειτουργίες in/rd μπλοκάρουν μέχρι να βρεθεί συμβατή πλειάδα για απομάκρυνση/διάβασμα Αν δύο ή περισσότερες διεργασίες επιχειρήσουν να απομακρύνουν την ίδια πλειάδα ταυτόχρονα (in), μόνο μια από αυτές θα το καταφέρει Οι πλειάδες που βρίσκονται ήδη στο tuple space δεν αλλάζουν μια πλειάδα μπορεί να αφαιρεθεί και να επανατοποθετηθεί, αλλαγμένη, στο tuple space, τότε πρόκειται όμως για μια διαφορετική πλειάδα Πολλά από τα «κλασικά» προβλήματα και σχήματα συγχρονισμού λύνονται πολύ εύκολα Ταυτόχρονος Προγραμματισμός 34 lalis@inf.uth.gr

Αμοιβαίος αποκλεισμός init: out(<"lock">); Pi: while (1) { in(<"lock">); /* mutual exclusion */ out(<"lock">); Ταυτόχρονος Προγραμματισμός 35 lalis@inf.uth.gr

Παραγωγός-καταναλωτής με αποθήκη περιορισμένης χωρητικότητας init: out(<"avl">); out(<"avl">); producer: while (1) { /* produce d */ in(<"avl">); out(<"data",d>); consumer: while (1) { in(<"data",&d>); out(<"avl">); /* consume d */ Ταυτόχρονος Προγραμματισμός 36 lalis@inf.uth.gr

FIFO επικοινωνία μηνυμάτων sender: int n=0; Msg m; while (1) { out(<n++,m>); receiver: int n=0; Msg m; while (1) { in(<n++,&m>); Ταυτόχρονος Προγραμματισμός 37 lalis@inf.uth.gr

FIFO επικοινωνία μηνυμάτων με πολλούς παραλήπτες sender: int n=0; Msg m; while (1) { out(<n++,m>); receiver: int n=0; Msg m; while (1) { rd(<n++,&m>); Ταυτόχρονος Προγραμματισμός 38 lalis@inf.uth.gr

FIFO επικοινωνία μηνυμάτων με πολλούς παραλήπτες και συλλογή μηνυμάτων sender: int n=0; Msg m; while (1) { out(<n++,m>); receiver: int n=0; Msg m; while (1) { rd(<n++,&m>); garbage collector: int n=0; Msg m; while (1) { rd(<n,&m>); sleep(t); in(<n++,m>); Ταυτόχρονος Προγραμματισμός 39 lalis@inf.uth.gr

Φιλόσοφοι init: for (i=0; i<n; i++) { out(<"fork",i>); Pi: int i; while (1) { /* think */ in(<"fork",left(i)>); in(<"fork",right(i)>); /* eat */ out(<"fork",left(i)>); out(<"fork",right(i)>); Ταυτόχρονος Προγραμματισμός 40 lalis@inf.uth.gr

Ευέλικτος συντονισμός Μπορεί να γραφτεί κώδικας που δουλεύει για έναν ανοιχτό/άγνωστο αριθμό διεργασιών, χωρίς καμία γνώση των στοιχείων επικοινωνίας τους Οι διεργασίες μπορεί να προσθαφαιρούνται και να επικοινωνούν με δυναμικό τρόπο Ο αποστολέας και ο παραλήπτης δεν χρειάζεται να υφίστανται την ίδια στιγμή για να επικοινωνήσουν Όπως σε όλα τα σχήματα συγχρονισμού/επικοινωνίας, πρέπει να υπάρχει προσυμφωνημένο «πρωτόκολλο» αλληλεπίδρασης Ταυτόχρονος Προγραμματισμός 41 lalis@inf.uth.gr

Πολλαπλασιασμός πινάκων 1 2 3 4 5 6 7 8 9 1 0 2 0 1 2 1 0 0 = 4 2 6 10 5 18 16 8 30 jobs 1 2 3 1 2 3 7 8 9 1 0 1 0 1 0 2 2 0 =1 1 + 2 0 + 3 1 = 4 =1 0 + 2 1 + 3 0 = 2 =7 2 + 8 2 + 9 0 = 30 Ταυτόχρονος Προγραμματισμός 42 lalis@inf.uth.gr

Init: for (i=0; i<n; i++) { out("a",i,a[i][]>; for (j=0; j<n; j++) { out("b",j,b[][j]>; Master: int i,j,r,c,res; for (i=0; i<n; i++) { for (j=0; j<n; j++) { out(<"job",i,j>); for (i=0; i<n; i++) { for (j=0; j<n; j++) { in(<"res",&r,&c,&res>); print(r,c,res); Worker: int r,c,res,vr[n],vc[n]; while (1) { in(<"job",&r,&c>); in(<"a",r,&vr[]); in(<"b",c,&vc[]); res=0; for (i=0; i<n; i++) { res=res+vr[i]*vc[i]; out(<"res",r,c,res>); Ταυτόχρονος Προγραμματισμός 43 lalis@inf.uth.gr

Init: for (i=0; i<n; i++) { out("a",i,a[i][]>; for (j=0; j<n; j++) { out("b",j,b[][j]>; Master: int i,j,k,r,c,res; for (i=0; i<n; i++) { for (k=0; k<n; k+=step) { out(<"job",i,k>); for (i=0; i<n; i++) { for (j=0; j<n; j++) { in(<"res",&r,&c,&res>); print(r,c,res); Worker: int r,c,k,res,vr[n],vc[n]; while (1) { in(<"job",&r,&k>); in(<"a",r,&vr[]); for (c=k; c<k+step; k++) { in(<"b",c,&vc[]); res=0; for (i=0; i<n; i++) { res=res+vr[i]*vc[i]; out(<"res",r,c,res>); Ταυτόχρονος Προγραμματισμός 44 lalis@inf.uth.gr

<job> Worker Master <job> <res> <res> <job> <res> Worker <job> <res> Worker dynamic worker pool Ταυτόχρονος Προγραμματισμός 45 lalis@inf.uth.gr

Υλοποίηση spaces Σύστημα με κοινή μνήμη Το space διατηρείται σε κοινόχρηστη περιοχή μνήμης Οι λειτουργίες προσθήκης/ανάγνωσης/απομάκρυνσης υλοποιούνται με τους κλασικούς μηχανισμούς συγχρονισμού, π.χ., semaphores Σύστημα χωρίς κοινή μνήμη Το space διατηρείται κεντρικοποιημένα σε έναν κόμβο ή καταναμημένα σε περισσότερους κόμβους Οι λειτουργίες προσθήκης/ανάγνωσης/απομάκρυνσης υλοποιούνται απομακρυσμένα με κάποιο μηχανισμό απομακρυσμένης επικοινωνίας, π.χ., sockets Ταυτόχρονος Προγραμματισμός 46 lalis@inf.uth.gr

P1 P2 P3 Tuple Space API Space Ταυτόχρονος Προγραμματισμός 47 lalis@inf.uth.gr

P1 P2 P3 Tuple Space API Tuple Space API Server Space Client Client Ταυτόχρονος Προγραμματισμός 48 lalis@inf.uth.gr

P1 P2 P3 Tuple Space API Tuple Space API Space Space Ταυτόχρονος Προγραμματισμός 49 lalis@inf.uth.gr