UniTO/anno2/mie/Mcad/relazione_mcad.md
2019-01-08 10:57:18 +01:00

3.8 KiB

Impossibilita` di accordo in presenza di fallimenti

Ogni utente ha a disposizione un'interfaccia di output initi e un'interfaccia di output decidei. Ogni utente i esegue al massimo un'azione initi.

Agreement: In ogni esecuzione, i valori di decision sono identici. Validita: In ogni esecuzione, se le azioni init[i] contengono lo stesso valore v allora v e l'unico valore di decisione possibile. Failure free termination: In ogni esecuzione fair senza fallimenti in cui gli eventi init[i] avvengono su tutte le porte, allora gli eventi decide[i] avvengono su tutte le porte. Well formedness???

BEN OR

Riduciamo il costraint sulla terminazione: un programma non faulty eseguiranno decidei ad un tempo t con probabilita p(t) dove p e una funzione monotona, non decrescente e unbounded. Questo implica terminazione con probabilita` 1.

Ogni processo ha due variabili locali: a = null, b = null. Il valore di decisione e` {0, 1} e ci sono n > 3f processi.

L'algoritmo esegue una serie di step ognuno dei quali consiste di due stage.

Fase 1:
Send(x, r) dove r e` il timestap.
for i = 0 to n - f: wait(S[i], r).
se ogni s appartenente ad S e` identico, allora y = s. 

Fase 2:
Send(y, r)
for i = 0 to n - f: wait(S[i], r).
- se ogni s appartenente ad S e` identico, allora x = s; decide(s).
- altrimenti se esistono n - 2f valori s identici, allora x = s.
- altrimenti x = scegli uniformemente (0, 1)

Lemma 1:

  • well-formedness, agreement e validita` sono garantiti.

  • Well formedness (se ho ben capito cosa significa): una volta fatto un decide il valore non viene mai cambiato.

  • validity: ogni processo scegliera allo step 1: in fase 1 tutti i processi ricevono il valore v, e decidono in fase 2 dato che l'unico valore mandato e ricevuto e v.

  • Agreement: Supponiamo che il processo Pi decide per primo allo step st. Questo significa che ha ricevuto n - f messagi con valori identici v. Questo implica che che tutti gli altri processi hanno ricevuto almeno n - 2f contenente il valore v. Quindi i processi Pj possono esclusivamente:

  • decidere per il valore v;
  • avere x = v e successivamente decidere per v allo step st+1;

Ora consideriamo la terminazione. In ogni esecuzione fair in cui gli eventi di init avvengono su tutte le porte ogni processo che non fallisce esegue infiniti stepp. d e l'upper bound per il delivery time del broadcast del messaggio piu vecchio e l l'upper bound del tempo necessario per ilcompletamento del task di ogni processo (?). Si puo` dire he ogni processo completa ogni volta uno step s in O(s(d+l)) dall'ultimo evento di init.

(Ovvero che per il costo di uno step e` dato dalla somma dei tempi l e d moltiplicato per il numero di step a cui ci si trova).

L'algoritmo non garantisce che alla fine un processo esegua decide[i]. Questo e` garantito solo probabilisticamente.

Mostriamo ora un'esecuzione senza decisioni: Abbiamo un numero di processi m: f < m <= 2f, n = 3f+1 Gli m processi hanno x = 0 e i restanti x = 1.

Dopo il round 1 tutti i processi hanno y = null e al round 2 tutti i processi scelgono il loro valore di x casualmente. Se pensiamo che questa decisione casuale ci porta ad una situazione in cui esiste un numero m' di processi: f < m' <= 2f dove x = 0 ed i restanti hanno x=1. Torniamo alla situazione iniziale che si puo` ripetere all'infinito senza portare ad una decisione.

Aggiunte: Aguilera:

  • Nel paper si mostra (in maniera intuitiva) perche la probabilita di terminazione e` 1.
  • C'e una variante dove alla fine della fase 2 viene lanciato un "global coin", ovvero il numero casuale e lo stesso per tutti i processi che lo richiedono. Questo accorcia di molto il tempo di esecuzione del programma a costo di avere n/3 < f < n/2 .
  • Lo scopo del paper e` di dimostrare che BenOr funzion con n >= 2f (piuttosto che 3f per la Lynch)