Eu tenho tentado apreender serializability e linearizability no contexto da memória transacional de software. No entanto, acho que ambas as noções podem ser aplicadas à memória transacional em geral.
Neste ponto, a seguir, é minha compreensão de ambos os assuntos.
Serializability
A serialização é uma propriedade global . É uma propriedade de correção das transações. Dados os
k
processos em que cada um executa uma transaçãoTk
simultaneamente, a serialização garante que haja uma sequência de transações que possam ser executadas em sequência (ou seja, uma após a outra), de modo que o resultado final seja o mesmo que as transações sendo executadas simultaneamente. Portanto, há uma permutação da lista(T1, T2,..,Tk)
que define uma lista de transações que podem ser executadas sequencialmente.
Essa propriedade faz todo sentido para mim e acho que minha definição está correta. Baseei essa definição no texto em "A arte da programação de multiprocessadores", de Herlihy e Shavit.
Linearizabilidade
Linearizabilidade é uma propriedade local de objetos simultâneos (por exemplo, uma instância de uma classe que é compartilhada entre threads). A linearidade assegura que, quando dois processos executam uma série de chamadas de método op (por exemplo,
queue
oudequeue
em umaQueue
instância) nesse objeto compartilhado, há uma ordem sequencial dessas chamadas de método que não preserva necessariamente a ordem do programa (a ordem em que o programador as escreveu) para baixo), mas cada chamada de método parece ocorrer instantaneamente (ou seja, invocação e resposta seguem uma à outra diretamente), mantendo o resultado de cada chamada de método individualmente e, consequentemente, o objeto em seu estado.
Questão
De acordo com um artigo "On the correctness of TM"
de Guerraoui e Kapalka, esta é a definição de linearizabilidade no contexto da MT:
.. uma propriedade de segurança criada para descrever objetos compartilhados, às vezes é usada como um critério correto para MT. Na terminologia da TM, linearizabilidade significa que, intuitivamente, todas as transações devem aparecer como se tivessem ocorrido em algum momento único durante sua vida útil.
Essa definição parece apenas ser serializável para mim. Mas o documento adiante define a serialização da seguinte maneira:
.. é uma das propriedades mais comumente necessárias de uma transação de banco de dados. Grosso modo, um histórico H de transações (isto é, a sequência de todas as operações executadas por todas as transações em uma determinada execução) é serializável se todas as transações confirmadas em H emitem as mesmas operações e recebem as mesmas respostas que em algum histórico sequencial S que consiste apenas das transações confirmadas em H. (um histórico seqüencial é um sem concorrência entre as transações).
Essa definição, no entanto, parece implicar que se pode reordenar as instruções das transações de maneira que elas sejam intercaladas. (Ou seja, reordene as instruções de modo que nem todas as instruções de uma transação T
apareçam em seqüência H
).
Estou no pressuposto de que minhas definições pessoais acima estão corretas. Minha pergunta real é como a linearizabilidade é definida no contexto da memória transacional. Não faz sentido raciocinar sobre cada chamada de método (isto é, operação de leitura / gravação) em uma transação individualmente, pois isso quebraria a semântica da memória transacional. Também não faria sentido ter que raciocinar sobre duas transações simultâneas em suas intercalações, pois isso obviamente quebraria a serialização. A linearizabilidade significa que é possível reordenar operações individuais dentro de uma transação? Se a linearização for uma forma mais forte de serialização, não importa em que ordem as operações são executadas em uma única transação.
Em resumo: Primeiro, o meu entendimento de serializabilidade e linearizabilidade está correto? Estou confuso depois de ler uma infinidade de definições em diferentes obras. E segundo, o que significa um conjunto de transações ser linearizável?
Eu também li a pergunta que estava vinculada dentro dos comentários. Mas não me explicou minha pergunta específica.
Fontes
- Pergunta do SO sobre o tópico (não sobre o STM explicitamente) /programming/4179587/difference-between-linearizability-and-serializability
Uma explicação informal sobre os dois http://www.bailis.org/blog/linearizability-versus-serializability/
Artigo original sobre serializability http://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.92.2690&rep=rep1&type=pdf
[1] Artigo original sobre linearizabilidade http://www.cs.toronto.edu/~christoff/files/Linearizability-ACorrectnessConditionForConcurrentObjects.pdf