Observe que causalidade é um termo indefinido no artigo. Lamport está usando-o em uma explicação informal. Ele está assumindo que poderia afetar causalmente um conceito intuitivo que significará a mesma coisa para seus leitores do que para ele. Eu acho que para Lamportuma poderia afetar causalmente bna verdade, significa que algo mais parecido com informações poderia fluir deuma para b ou uma poderia impactar o comportamento de b, do que a idéia aristotélica clássica de b é uma consequência física de uma.
Por exemplo, suponha que um computador esteja executando um programa com duas instruções:
a: X := 1
b: print X
Acho que todos concordamos que a declaração a
aconteceu antes, b
mas não diria que "a execução da declaração de atribuição (evento a
) fez com que o programa executasse a print
declaração (evento b
)". Por outro lado, posso dizer algo ligeiramente diferente: "evento a
(atribuindo o valor 1 a X
) afetou o valor impresso pelo evento b
".
Agora vamos dar um exemplo (potencialmente) mais controverso.
a: X := 1
b: Y := 1
a
acontece antes b
, mas acho que a maioria das pessoas diria: "não há relação causal entre a
e b
". Mas neste artigo há uma relação causal entre a
eb
. Vou tentar explicar isso da maneira mais sucinta possível, mas vai demorar muito.
O artigo é sobre máquinas de estado
Aqui está o que Lamport tem a dizer sobre o artigo em sua home page :
Um sistema distribuído pode ser descrito como uma máquina de estado seqüencial específica que é implementada com uma rede de processadores. A capacidade de solicitar totalmente as solicitações de entrada leva imediatamente a um algoritmo para implementar uma máquina de estado arbitrária por uma rede de processadores e, portanto, implementar qualquer sistema distribuído. Então, escrevi este artigo, sobre como implementar uma máquina de estado distribuída arbitrária. ...
Este é o meu artigo mais citado. ... Mas raramente encontrei alguém que sabia que o jornal dizia algo sobre máquinas de estado. As pessoas parecem pensar que se trata da relação de causalidade nos eventos em um sistema distribuído ou do problema de exclusão mútua distribuída. As pessoas têm insistido que não há nada sobre máquinas de estado no jornal. Eu até tive que voltar e relê-lo para me convencer de que realmente me lembrava do que havia escrito.
Cada processo é uma máquina de estado e a composição dos processos em um sistema / algoritmo distribuído é uma máquina de estado.
Lamport está implicitamente usando uma notação abreviada que no design digital chamamos de transferências de registradores e cada processo é (implicitamente) uma máquina de estado algorítmica . O que realmente importa é como cada evento afeta todo o estado de cada processo. Cada declaração de transferência de registro é uma maneira sucinta de falar sobre um conjunto de transições de estado que dependem do estado anterior.
Portanto, em nosso exemplo "controverso", o estado da máquina tem duas partes ⟨ X, Y⟩. A declaração de transferência de registro Y := 1
é uma abreviação para quatro transições de estado diferentes:⟨ 0 , 0 ⟩ → ⟨ 0 , 1 ⟩, ⟨ 0 , 1 ⟩ → ⟨ 0 , 1 ⟩, ⟨ 1 , 0 ⟩ → ⟨ 1 , 1 ⟩e ⟨ 1 , 1 ⟩ → ⟨ 1 , 1 ⟩. Então, o que aconteceu na declaração a
afeta muito o estado final produzido pela declaração b
. No nosso caso, sabemos que o estado final é⟨ 1 , 1 ⟩, e esse não seria o caso a
não executado, ou tinha a
sido uma declaração diferente (como X := 0
).
O artigo é sobre o quanto uma das máquinas de estados distribuídas pode saber sobre os estados das outras máquinas de estados, por isso é muito importante a ordem das coisas em cada máquina.