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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Dr. Garmpis Aristogiannis - EPDO TEI Messolonghi

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Περιεχόμενα. Προλεγόμενα... ix Κεφάλαιο 1 Εισαγωγή Κεφάλαιο 2 Δεδομένα και εκφράσεις Κεφάλαιο 3 Λογικές συνθήκες και δομές ελέγχου...

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

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

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

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

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

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

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

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

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

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

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

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

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

Υποδοχείς (Sockets) Προγραμματισμός II 1

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

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

Απομακρυσμένα αντικείμενα (Remote Objects) Κατανεμημένα Συστήματα 1

Κεφάλαιο 3. Διδακτικοί Στόχοι

Επικοινωνία Client/Server

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

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

Κλείδωμα αρχείων (file locking) Προγραμματισμός II 1

Παράλληλη Επεξεργασία

Κατανεμημένα Συστήματα. Javascript LCR example

Λειτουργικά Συστήματα. Ενότητα # 2: Διεργασίες και Νήματα Διδάσκων: Γεώργιος Ξυλωμένος Τμήμα: Πληροφορικής

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

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

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

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

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

Λειτουργικά συστήματα πραγματικού χρόνου

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

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

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

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

Στοιχειώδης προγραμματισμός σε C++

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

Ταχύτητα, Απλότητα & Αξιοπιστία

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

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

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

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

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

Παράλληλη Επεξεργασία

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

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

Διάλεξη 2. Μεταβλητές - Δομές Δεδομένων - Eίσοδος δεδομένων - Έξοδος: Μορφοποίηση - Συναρτήσεις. Διοργάνωση : ΚΕΛ ΣΑΤΜ

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

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

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 rd(<&s,&i,1.75>) P4 Ταυτόχρονος Προγραμματισμός 8 lalis@inf.uth.gr

P1 3 fields match 3 fields rd(<&s,&i,1.75>) P4 Ταυτόχρονος Προγραμματισμός 9 lalis@inf.uth.gr

P1 match rd(<&s,&i,1.75>) P4 Ταυτόχρονος Προγραμματισμός 10 lalis@inf.uth.gr

P1 match rd(<&s,&i,1.75>) P4 Ταυτόχρονος Προγραμματισμός 11 lalis@inf.uth.gr

P1 no match rd(<&s,&i,1.75>) P4 Ταυτόχρονος Προγραμματισμός 12 lalis@inf.uth.gr

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

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

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

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

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

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

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

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

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

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

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

< john,43,1.80> < nick,15,1.75, hello > rd(<&s,&i,1.75>) P4 Ταυτόχρονος Προγραμματισμός 24 lalis@inf.uth.gr

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

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

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

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

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

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

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

Ευέλικτος συντονισμός Μπορεί να γραφτεί κώδικας που δουλεύει για έναν ανοιχτό/άγνωστο αριθμό διεργασιών, χωρίς καμία γνώση των στοιχείων επικοινωνίας τους Οι διεργασίες μπορεί να προσθαφαιρούνται και να επικοινωνούν με δυναμικό τρόπο Ο αποστολέας και ο παραλήπτης δεν χρειάζεται να υφίστανται την ίδια στιγμή για να επικοινωνήσουν Όπως σε όλα τα σχήματα επικοινωνίας, απαιτείται προσυμφωνημένο «πρωτόκολλο» αλληλεπίδρασης Ταυτόχρονος Προγραμματισμός 37 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 Ταυτόχρονος Προγραμματισμός 38 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>); Ταυτόχρονος Προγραμματισμός 39 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>); Ταυτόχρονος Προγραμματισμός 40 lalis@inf.uth.gr

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

Υλοποίηση spaces Τοπικά: Κοινόχρηστη μνήμη Συγχρονισμός λειτουργιών out, in, rd με τους κλασικούς μηχανισμούς, π.χ., σηματοφόρους Κατανεμημένα: Το space διατηρείται σε έναν εξυπηρετητή που προσπελάζουν οι διεργασίες πάνω από το δίκτυο Εναλλακτικά, κατανομή του space σε πολλούς Η/Υ Υλοποίηση λειτουργιών out, in, rd με μηχανισμούς διαδιεργασιακής επικοινωνίας, π.χ., υποδοχείς Ταυτόχρονος Προγραμματισμός 42 lalis@inf.uth.gr

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

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

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