Γιατί υϖάρχει τέτοια καθολική κατάσταση;

Σχετικά έγγραφα
Το Πρόβληµα Οµοφωνίας Σύγχρονα Συστήµατα Μεταβίβασης Μηνύµατος Μοντέλο Κατάρρευσης (crash model) Οι διεργασίες µπορούν να σταµατούν να εκτελούνται σε

ΒΑΣΙΚΑ ΑΤΟΜΙΚΑ ΑΝΤΙΚΕΙΜΕΝΑ Καταχωρητής Read/Write Αποθηκεύει µια τιµή από κάποιο σύνολο και υποστηρίζει δύο λειτουργίες: read(r): επιστρέφει την τιµή

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

Ασύγχρονο Σύστηµα ιαµοιραζόµενης Μνήµης Το σύστηµα περιέχει n διεργασίες p 0,, p n-1 και m καταχωρητές R 0,, R m-1. Κάθε διεργασία µοντελοποιείται ως

ΑΤΟΜΙΚΑ ΑΝΤΙΚΕΙΜΕΝΑ Ένα ατοµικό αντικείµενο κάποιου τύπου µοιάζει µε µια κοινή µεταβλητή αυτού του τύπου. Ένα ατοµικό αντικείµενο βρίσκεται σε µια κατ

Ατοµικά Αντικείµενα. Ατοµικά Αντικείµενα Παναγιώτα Φατούρου

Ασύγχρονο Σύστηµα ιαµοιραζόµενης Μνήµης Το σύστηµα περιέχει n διεργασίες p 0,, p n-1 και m καταχωρητές R 0,, R m-1. Κάθε διεργασία µοντελοποιείται ως

Ασύγχρονο Σύστηµα ιαµοιραζόµενης Μνήµης Το σύστηµα περιέχει n διεργασίες p 0,, p n-1 και m καταχωρητές R 0,, R m-1. Κάθε διεργασία µοντελοποιείται ως

Το Πρόβληµα Οµοφωνίας Σύγχρονα Συστήµατα Μεταβίβασης Μηνύµατος Μοντέλο Κατάρρευσης (crash model) Οι διεργασίες µπορούν να σταµατούν να εκτελούνται σε


Αιτιώδεις Σχέσεις και Χρονισµός. Παναγιώτα Φατούρου Αρχές Κατανεµηµένου Υπολογισµού

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

Το Πρόβληµα Οµοφωνίας Σύγχρονα Συστήµατα Μεταβίβασης Μηνύµατος Μοντέλο Κατάρρευσης (crash model) Οι διεργασίες µπορούν να σταµατούν να εκτελούνται σε

Διάλεξη 13: Κατανεμημένη Κοινόχρηστη Μνήμη. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

Διάλεξη 14: Ατομική ΚΚΜ Εγγραφής/Ανάγνωσης στην Παρουσία Σφαλμάτων. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

ΕΘΝΙΚΟ ΜΕΤΣΟΒΙΟ ΠΟΛΥΤΕΧΝΕΙΟ

Διάλεξη 12: Διάχυση Μηνυμάτων. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

ΣΧΕΔΙΑΣΗ ΚΑΙ ΑΝΑΛΥΣΗ ΑΤΟΜΙΚΩΝ ΑΝΤΙΚΕΙΜΕΝΩΝ Η ΜΕΤΑΠΤΥΧΙΑΚΗ ΕΡΓΑΣΙΑ ΕΞΕΙΔΙΚΕΥΣΗΣ. Υποβάλλεται στην

Αλγόριθµοι και Πολυπλοκότητα

Διάλεξη 15: Ατομική ΚΚΜ Εγγραφής/Ανάγνωσης με Γρήγορες Λειτουργίες. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Ενότητα 9 Ξένα Σύνολα που υποστηρίζουν τη λειτουργία της Ένωσης (Union-Find)

Ποια ιδιότητα αϖό τις δύο τελευταίες είναι ϖιο ισχυρή;

Ορισµός. Εστω συναρτήσεις: f : N R και g : N R. η f(n) είναι fi( g(n) ) αν υπάρχουν σταθερές C 1, C 2 και n 0, τέτοιες ώστε:

ΕΝΟΤΗΤΑ 6 ΛΙΣΤΕΣ ΠΑΡΑΛΕΙΨΗΣ (SKIP LISTS)

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

Αλγόριθµοι και Πολυπλοκότητα

Κεφάλαιο 5ο: Εντολές Επανάληψης

Αλγόριθµοι Οπισθοδρόµησης

d k 10 k + d k 1 10 k d d = k i=0 d i 10 i.

Παράλληλη Επεξεργασία Κεφάλαιο 4 Επικοινωνία Διεργασιών

Βάσεις Δεδομένων και Ευφυή Πληροφοριακά Συστήματα Επιχειρηματικότητας. Πληροφοριακά Συστήματα και Βάσεις Δεδομένων. Δρ. Κωνσταντίνος Χ.

Άπληστοι Αλγόριθµοι (CLR, κεφάλαιο 17)

Ενότητα 1: Εισαγωγή Ασκήσεις και Λύσεις

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

Εισαγωγή στους Αλγόριθµους. Αλγόριθµοι. Ιστορικά Στοιχεία. Ο πρώτος Αλγόριθµος. Παραδείγµατα Αλγορίθµων. Τι είναι Αλγόριθµος

Στοιχεία Αλγορίθµων και Πολυπλοκότητας

(GNU-Linux, FreeBSD, MacOsX, QNX

Διακριτά Μαθηματικά ΙΙ Χρήστος Νομικός Τμήμα Μηχανικών Η/Υ και Πληροφορικής Πανεπιστήμιο Ιωαννίνων 2018 Χρήστος Νομικός ( Τμήμα Μηχανικών Η/Υ Διακριτά

Αλγόριθµοι και Πολυπλοκότητα

ΗΥ360 Αρχεία και Βάσεις εδοµένων ιδάσκων:. Πλεξουσάκης

Προγραµµατισµός Η/Υ. Μέρος2

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

Αλγόριθµοι και Πολυπλοκότητα

Εισαγωγή στην πληροφορική

ΚΕΦΑΛΑΙΟ 3 ΑΡΙΘΜΗΤΙΚΗ ΕΠΙΛΥΣΗ ΓΡΑΜΜΙΚΩΝ ΣΥΣΤΗΜΑΤΩΝ. nn n n

Εισαγωγή στον Προγραμματισμό

Αλγόριθµοι και Πολυπλοκότητα

Insert(K,I,S) Delete(K,S)

ΗΥ360 Αρχεία και Βάσεις εδοµένων ιδάσκων: ημήτρης Πλεξουσάκης

Προγραµµατισµός 2 The shell

Επεξεργασία οσοληψιών

Αδιέξοδα (Deadlocks)

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

Θέματα Μεταγλωττιστών

ΚΕΦΑΛΑΙΟ 5: Αλγόριθµοι

Βάσεις Δεδομένων ΙΙ. Διάλεξη 1 η Επεξεργασία Δοσοληψιών. Σύστημα Επεξεργασίας Δοσοληψιών

Διδάσκων: Καθηγητής Νικόλαος Μαρμαρίδης, Καθηγητής Ιωάννης Μπεληγιάννης

Εισαγωγή στον Προγραµµατισµό. Ανάλυση (ή Επιστηµονικοί8 Υπολογισµοί)

ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ ΥΠΟΛΟΓΙΣΤΩΝ Κεφάλαιο 10 : Εντολές επιλογής και αποφάσεων

for for for for( . */

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

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

ΜΑΘΗΜΑ / ΤΑΞΗ : ΔΟΜΗΜΕΝΟΣ ΠΡΟΓΡΑΜΜΑΤΙΣΜΟΣ / Γ ΕΠΑΛ ΣΕΙΡΑ: ΗΜΕΡΟΜΗΝΙΑ: 27/01/2013

Δομές Επανάληψης. Εισαγωγή στη C++

Βασική Εφικτή Λύση. Βασική Εφικτή Λύση

ΙΑΧΕΙΡΙΣΗ ΟΣΟΛΗΨΙΩΝ Να θυµηθούµε:

Διάλεξη 16: Πρόβλημα Συμφωνίας. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Δένδρα επικάλ επικ υψης ελάχιστου στους

ΗΥ360 Αρχεία και Βάσεις εδοµένων ιδάσκων: ημήτρης Πλεξουσάκης

Αριθµητική Ανάλυση 1 εκεµβρίου / 43

a 1d L(A) = {m 1 a m d a d : m i Z} a 11 a A = M B, B = N A, k=1

8. Παράλληλη εκτέλεση βρόχων

Εισαγωγή. Οπως είδαµε για την εκκίνηση της Simplex χρειαζόµαστε µια Αρχική Βασική Εφικτή Λύση. υϊσµός

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

ΚΕΦΑΛΑΙΟ 3: Συνθήκες Αλυσίδων

Διάλεξη 9: Αλγόριθμοι Αμοιβαίου Αποκλεισμού με τη χρήση μεταβλητών Ανάγνωσης/Εγγραφής. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

ΠΛΗΡΟΦΟΡΙΚΗ Ι Ενότητα 3: Συναρτήσεις

ΚΕΦΑΛΑΙΟ 1ο 3ο. ΚΕΦΑΛΑΙΟ 5ο 6ο. ΚΕΦΑΛΑΙΟ 7ο. Δομημένος Προγραμματισμός - Γενικές Ασκήσεις Επανάληψης

Alternative to Balanced Trees, Comms of the ACM, 33(6), June 1990,

Κεφάλαιο 2. Παραγοντοποίηση σε Ακέραιες Περιοχές

Εισαγωγή στην Επεξεργασία Ερωτήσεων. Βάσεις Δεδομένων Ευαγγελία Πιτουρά 1

Βάσεις Δεδομένων 2. Φροντιστήριο Δοσοληψίες Τεχνικές ελέγχου συνδρομικότητας. Ημερ: 05/5/2009 Ακ.Έτος

Αναδροµή. Σε αυτήν την (βοηθητική) ενότητα θα µελετηθούν τα εξής : Η έννοια της αναδροµής Υλοποίηση και αποδοτικότητα Αφαίρεση της αναδροµής

Σχεδίαση και Ανάλυση Αλγορίθμων

Διάλεξη 8: Πρόβλημα Αμοιβαίου Αποκλεισμού. ΕΠΛ 432: Κατανεμημένοι Αλγόριθμοι

Γενικές Παρατηρήσεις. Μη Κανονικές Γλώσσες - Χωρίς Συµφραζόµενα (1) Το Λήµµα της Αντλησης. Χρήση του Λήµµατος Αντλησης.

Παράλληλοι Αλγόριθµοι

Προχωρημένα Θέματα Βάσεων Δεδομένων

ΕΠΛ 232 Φροντιστήριο 2

Κεφάλαιο 3β. Ελεύθερα Πρότυπα (µέρος β)

Αλγόριθµοι Ροής σε Γράφους (CLR, κεφάλαιο 27)

Απλοποιεί τα γεγονότα έτσι ώστε να περιγράφει τι έχει γίνει και όχι πως έχει γίνει.

Πανεπιστήμιο Θεσσαλίας Τμήμα Ηλεκτρολόγων Μηχανικών και Μηχανικών Υπολογιστών Τμήμα Πληροφορικής

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

Επεξεργασία Αρχείων Κειµένου

Ανάπτυξη Μεγάλων Εφαρµογών στη Γλώσσα C (2)

Εισαγωγή στους Αλγορίθμους Ενότητα 9η

Pascal. 15 Νοεμβρίου 2011

Sheet2. - Άσκηση 1 οκ - Άσκηση 2 οκ. Σκέψου πώς θα µπορούσες να την

Transcript:

ΥΛΟΠΟΙΗΣΗ ΚΑΤΑΧΩΡΗΤΩΝ ΑΝΑΓΝΩΣΗΣ/ΕΓΓΡΑΦΗΣ Καταχωρητές που µοιάζουν πιο πολύπλοκοι µπορούν να υλοποιηθούν από απλούστερους καταχωρητές.

Multi-valued from Binary Βασικό Αντικείµενο: δυαδικός καταχωρητής ο οποίος µπορεί να αναγνωσθεί και να εγγραφεί από µια µόνο διεργασία Υλοϖοιούµενο Αντικείµενο: καταχωρητής k-valued ο οποίος µπορεί να αναγνωσθεί και να εγγραφεί από µια µόνο διεργασία Θεωρούµε ότι οι τιµές αναπαρίστανται σε µοναδιαίο σύστηµα και χρησιµοποιούµε έναν πίνακα Β[0..k-1] από k binary καταχωρητές. Η τιµή j αναπαρίσταται µε ένα 1 στη θέση j του πίνακα και 0 σε όλες τις υπόλοιπες θέσεις. Ένας αϖλός αλγόριθµος read: for j = 0 to k-1 if (B[j] == 1) return j; write(v): B[v] = 1; for j =0 to k-1, j v, B[j] = 0;

Multi-valued from Binary Αν λειτουργίες read και write εκτελούνται ταυτόχρονα, ο απλός αλγόριθµος δεν είναι σωστός.

Multi-valued from Binary Ενέργειες εϖίλυσης του ϖροβλήµατος: 1. Μια λειτουργία write θέτει σε 0 µόνο τις θέσεις του πίνακα B που έχουν µικρότερους δείκτες από την τιµή που γράφει η write. 2. Μια λειτουργία read δεν σταµατά όταν βρίσκει το πρώτο 1 καθώς εξετάζει τα στοιχεία του Β, αλλά βεβαιώνεται ότι εξακολουθούν να υπάρχουν 0 στις θέσεις του B µε µικρότερους δείκτες. read(r): i = 0; while B[i] == 0 do i = i+1; up = i; v = i; for i = up -1 down to 0 do if B[i] == 1 then v = i; return(r,v); write(r,v): B[v] = 1; for i = v-1 downto 0 do B[i] = 0; ack(r);

Multi-valued from Binary Linearizability Έστω α µια εκτέλεση του αλγορίθµου. Σε κάθε καθολική κατάσταση C, ορίζουµε την τιµή του υλοποιούµενου καταχωρητή στη C να είναι το µικρότερο v τ.ω. Β[v] = 1 και Β[0] = Β[1] =... = Β[v-1] = 0. Σηµείο σειριοϖοίησης µιας write(v): Στην πρώτη καθολική κατάσταση στο διάστηµα εκτέλεσης της write στην οποία ισχύει ότι B[v] = 1 και B[0] = B[1] =... = B[v-1] = 0. Γιατί υϖάρχει τέτοια καθολική κατάσταση; Σηµείο σειριοϖοίησης µιας read(r,v): Στην πρώτη καθολική κατάσταση µέσα στο διάστηµα εκτέλεσης της read στην οποία η τιµή v τοποθετείται στην τοπική µεταβλητή v της διεργασίας (γραµµή 3 ή 5 του κώδικα).

Multi-valued from Binary Λήµµα 1 1. Στο σηµείο που σειριοποιείται µια write(r,v) η τιµή του R είναι v. 2. Η τιµή του R είναι η ίδια σε όλες τις καθολικές καταστάσεις µεταξύ των σηµείων σειριοποίησης δυο διαδοχικών λειτουργιών write. Λήµµα 2 Για κάθε (high-level) λειτουργία ανάγνωσης r που εκτελείται στην α ισχύει ότι η r επιστρέφει την τιµή που έχει γραφτεί στον R από την τελευταία λειτουργία εγγραφής w που σειριοποιείται πριν το σηµείο σειριοποίησης της r. Αϖόδειξη: C r : καθολική κατάσταση στην οποία σειριοποιείται η r w: τελευταία write που σειριοποιείται πριν από το σηµείο σειριοποίησης της r C w : καθολική κατάσταση στην οποία σειριοποιείται η w

Multi-valued from Binary Αϖόδειξη (συνέχεια): v: η τιµή που γράφει στον R η w Λήµµα 1 η τιµή του R είναι v µεταξύ της C w και της C r. C: καθολική κατάσταση όταν η r τελειώνει την εκτέλεση της while και u η τιµή του i όταν τερµατίζει η while. Ισχύει ότι u v. Γιατί; ιακρίνω περιπτώσεις: 1. η C w προηγείται της C Αφού u v, η r διαβάζει την τιµή 1 στο B[v] και 0 σε µικρότερους δείκτες.

Multi-valued from Binary 2. η C w έπεται της C Αφού u v, η r διαβάζει το B[v]. Αν αυτή η ανάγνωση γίνει µετά τη C w, τότε Β[v] = 1 και B[0] = B[1] = B[v-1] = 0. Άρα, η r επιστρέφει v. Αν αυτή η ανάγνωση γίνει πριν τη C w, τότε στη C r, η r διαβάζει κάποιο καταχωρητή που περιέχει 0. Αυτό αντιτίθεται στον ορισµό της C r. Θεώρηµα: O παραπάνω αλγόριθµος είναι µια wait-free υλοποίηση ενός καταχωρητή στον οποίο µπορούν να αποθηκευτούν k τιµές (k-valued) από k δυαδικούς καταχωρητές. Η χρονική πολυπλοκότητα των read και write στην υλοποίηση αυτή είναι Ο(k).

Multi-Reader from Single-Reader n: αριθµός των διεργασιών που επιτρέπεται να διαβάσουν τον καταχωρητή Αϖλή (αλλά µη-σειριοϖοιήσιµη) Υλοϖοίηση Shared Variables: value Val[1..n]; // πίνακας n θέσεων, µία για κάθε reader write(v): for (j=1; j n; j++) Val[j] = v; read: // κώδικας για p i, 1 i n return(val[i]); Κακό Σενάριο

Multi-Reader from Single-Reader Θεώρηµα Σε κάθε ελεύθερη-αναµονής υλοποίηση ενός single-writer, multi-reader καταχωρητή από single-writer, single-reader καταχωρητές, τουλάχιστον ένας reader πρέπει να γράψει. Αϖόδειξη: Με εις άτοϖο αϖαγωγή! r 0 2 v 0 2 r 1 2 v 1 2 r j1 2 v j1 2 r k-1 2 v k-1 2 r k 2 v k 2 p 1, p 2 : readers, p w : writer S 2 w 1 w 2 w j1 w j1+1 w k-1 w k S 1 registers read by reader p 1 registers read by reader p 2 C 0 r 0 1 v 0 1 r 1 1 v 1 1 Αφού η υλοποίηση είναι σειριοποιήσιµη i {1,2}: j i, 1 j i k, τέτοια ώστε, v j i = 0 για κάθε j < j i και v j i = 1, για κάθε j j i. Γιατί ισχύει αυτό; Ισχύει j 1 j 2. Wlog, ας υποθέσουµε ότι j 1 < j 2. H r j1 1 επιστρέφει 1, ενώ η r j1 2 επιστρέφει 0. Αυτό αντιτίθεται στη σειριοποιήσιµοτητα!! r j1 1 v j1 1 r k-1 1 v k-1 1 r k 1 v k 1

Multi-Reader from Single-Reader: Ένας Σωστός Αλγόριθµος Shared Variables: <value,seq> Val[i]; // 1 i n, τιµή που γράφει ο p w για κάθε έναν από τους p r, αρχικά < v 0,0> <value,seq> Report[i,j]; // 1 i,j n, τιµή που επιστρέφει η πιο πρόσφατη read που εκτελείται από // την p i. Γράφεται από την p i και διαβάζεται από την p j. Αρχικά, <v 0,0> read(r): // κώδικας για τη διεργασία p r, 1 i n <v[0],s[0]> = Val[r]; for i=1 to n do <v[i],s[i]> = Report[i,r]; let j be s.t. s[j] = max{s[0], s[1],, s[n]}; for i=1 to n do Report[r,i] = <v[j],s[j]>; return (R,v[j]); r write(r,v): // ένας writer seq = seq +1; for i=1 to n do Val[i] = <v,seq>; ack(r); Val r r Report εκτέλεση read από p r

Multi-Reader from Single-Reader: Ένας Σωστός Αλγόριθµος Σειριοϖοιησιµότητα Θα φτιάξουµε µια σειριακή εκτέλεση π, η οποία (1) θα σέβεται την µερική διάταξη που ορίζεται από τους χρόνους εκκίνησης και περάτωσης κάθε λειτουργίας, και (2) κάθε read επιστρέφει το αποτέλεσµα της τελευταίας write που προηγείται αυτής στη σειριακή εκτέλεση. Λίγο διαφορετική τεχνική από αυτήν που έχουµε δει µέχρι τώρα!!! Κατασκευή ϖ: - Πρώτα, τοποθετούµε στην π όλες τις λειτουργίες write σύµφωνα µε τη σειρά εκτέλεσής τους από τον εγγραφέα. - Μια λειτουργία read που επιστρέφει µια τιµή µε χρονοσφραγίδα T τοποθετείται στην π ακριβώς πριν τη λειτουργία write που έπεται της write που παρήγαγε το Τ.!!! Η συνέπεια προκύπτει άµεσα από τον τρόπο κατασκευής της π.??? Θα δείξουµε ότι η π σέβεται τη µερική διάταξη που ορίζεται από την εκτέλεση των λειτουργιών.

Multi-Reader from Single-Reader: Σειριοποιησιµότητα Λήµµα: Έστω ότι op 1 και op 2 είναι δύο λειτουργίες που συµβαίνουν σε µια εκτέλεση α, τ.ω. η op 1 τερµατίζει την εκτέλεσή της πριν εκκινήσει την εκτέλεση της η op 2. Τότε, η op 1 προηγείται της op 2 στην π. Αϖόδειξη: Προφανώς, ο ισχυρισµός ισχύει για τις λειτουργίες write. α. read r by p Αν η r είναι µετά τη w στην π, η w που γράφει Τ i είναι ή η w ή κάποιο µετέπειτα write, και άρα έπεται write w του r. Άτοπο!!! β. Η r διαβάζει από το Val[i] την τιµή που έγραψε η w ή read r κάποια µετέπειτα write η r επιστρέφει τη write w χρονοσφραγίδα της w ή κάποιας µετέπειτα write. Άρα, η r δεν έχει τοποθετηθεί πριν την w στην π. γ. read r read r by p j Θεώρηµα: Ο παραπάνω αλγόριθµος είναι µια ελεύθερη-αναµονής (wait-free) υλοποίηση ενός SW καταχωρητή που µπορεί να διαβάζεται από n διεργασίες. Ο αλγόριθµος χρησιµοποιεί Ο(n 2 ) καταχωρητές. Η εκτέλεση κάθε λειτουργίας read ή write απαιτεί Ο(n) βήµατα. H p j διαβάζει στο Report[i] χρονοσφραγίδα Τ το max της r επιστρέφει τιµή Τ η r δεν θα τοποθετηθεί πριν την r στην π.

Κύριες Ιδέες Multi-Writer from Single-Writer - Η δυσκολία έγκειται στην εύρεση ενός τρόπου συγκρίσης των τιµών και εύρεσης της πιο πρόσφατης. Οι χρονοσφραγίδες είναι διανύσµατα, µε µια συνιστώσα για κάθε εγγραφέα. - Η κατασκευή µιας νέας χρονοσφραγίδας χρησιµοποιεί τα διανύσµατα όλων των διεργασιών-εγγραφέων. - Χρησιµοποιούµε την λεξικογραφική διάταξη για να αποφασίσουµε αν µια χρονοσφραγίδα είναι µεγαλύτερη από µια άλλη. - p 1,, p m : writers, p 1,, p n : readers ιαµοιραζόµενες µεταβλητές που χρησιµοποιούνται: vector TS[i]: 1 i n, διανυσµατική χρονοσφραγίδα του εγγραφέα pi <vector, value> Val[i]: 1 i n, τιµή µαζί µε σχετική διανυσµατική χρονοσφραγίδα. Γράφεται από τον pi και διαβάζεται από όλους τους αναγνώστες.

Multi-Writer from Single-Writer Shared Variables: <value,vector> Val[i]; // 1 i m, < v 0,(0,...,0)> vector TS[i]; // 1 i m, αρχικά (0,..,0) read(r): // κώδικας για τη διεργασία p r, 1 i n for i=1 to m do <v[i],t[i]> = Val[i]; let j be s.t. t[j] = max{t[1], t[2],, t[m]}; return (R,v[j]); write(r,v): // writer p w writes v in R ts = NewTS(w); val[w] = <v,ts>; ack(r); procedure NewTS(int w): for i = 1 to m do lts[i] = TS[i].[i]; lts[w] = lts[w] + 1; TS[w] = lts; return lts;

Multi-Writer from Single-Writer Λήµµα 1: Η λεξικογραφική διάταξη των διανυσµατικών χρονοσφραγίδων είναι µια καθολική διάταξη που σέβεται την µερική διάταξη βάσει της οποίας παράγονται οι χρονοσφραγίδες. Λήµµα 2: Για κάθε i, αν πρώτα κάποια χρονοσφραγίδα VT 1 και αργότερα κάποια χρονοσφραγίδα VT 2 γράφεται στο Val[i], τότε VT 1 VT 2. Σειριοϖοιησιµότητα Θα φτιάξουµε µια σειριακή εκτέλεση π, η οποία (1) θα σέβεται την µερική διάταξη που ορίζεται από τους χρόνους εκκίνησης και περάτωσης κάθε λειτουργίας, και (2) κάθε read επιστρέφει το αποτέλεσµα της τελευταίας write που προηγείται αυτής στη σειριακή εκτέλεση.

Κατασκευή ϖ: Multi-Writer from Single-Writer - Πρώτα, τοποθετούµε στην π όλες τις λειτουργίες write σύµφωνα µε τη λεξικογραφική διάταξη των χρονοσφραγίδων που έχουν συσχετισθεί µε τις τιµές που αυτές γράφουν. - Μια λειτουργία read που επιστρέφει µια τιµή µε χρονοσφραγίδα VT τοποθετείται στην π ακριβώς πριν τη λειτουργία write που έπεται της write που παρήγαγε το VΤ.!!! Η συνέπεια προκύπτει άµεσα από τον τρόπο κατασκευής της π.??? Θα δείξουµε ότι η π σέβεται τη µερική διάταξη που ορίζεται από την εκτέλεση των λειτουργιών. Λήµµα 3: Έστω ότι op 1 και op 2 είναι δύο λειτουργίες σε κάποια εκτέλεση α τ.ω. η op 1 τερµατίζει την εκτέλεσή της πριν ξεκινήσει η op 2. Τότε η op 1 προηγείται της op 2 στην α. Θεώρηµα: Ο παραπάνω αλγόριθµος είναι µια ελεύθερη-αναµονής (wait-free) υλοποίηση ενός MW καταχωρητή που µπορεί να εγγράφεται από m διεργασίες και να διαβάζεται από όλες τις n διεργασίες. Η εκτέλεση κάθε λειτουργίας read ή write απαιτεί Ο(m) βήµατα.