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
fonte
Respostas:
Sobre suas definições:
A ideia básica de serialização ( ) está correta. No entanto, ele não precisa se restringir à sua suposição de que : Todo processo pode emitir quantas transações quiser.SR
each (process) executes a transaction
Seu entendimento da ( ) está completamente errado. Primeiro, para os e , a ordem do programa entre transações emitidas por um único processo deve ser preservada. Além disso, você não pode reordenar nenhuma operação dentro de uma transação.LR SR LR
Explicação de e :SR LR
Ambos e exigem todas as transações para se comportar como se eles foram executados em alguma ordem sequencial , o que significa que em tal ordem sequencial, todas as operações retornam os mesmos valores e os estados finais de banco de dados é o mesmo daqueles quando as transações estão sendo executadas simultaneamente.SR LR H
reads
Como mencionado anteriormente, para e , a ordem do programa entre transações emitidas por um único processo deve ser preservada.SR LR
O texto acima fornece a definição de . No entanto, requer ainda mais a ordem sequencial obedecer o chamado tempo real ordem (parcial) entre as transações: Se uma transação extremidades antes de uma outra transação começa , então devem ser encomendados antes em .SR LR H T1 T2 T1 T2 H
Observe que não impõe a ordem em tempo real. Ou seja, é mais forte que .SR LR SR
Sobre propriedade global e propriedade local:
Não sei se é chamado de propriedade global (por favor me dê alguma referência, se tiver certeza disso). No entanto, o termo "propriedade local" tem um significado especial.SR
É sabido que é local [1] enquanto não é.LR SR
ADICIONADO: Sobre LR e serialização estrita (SSR)
Conforme mencionado pela @Wandering Logic, o LR é originalmente definido para objetos, não para transações. Citado de [1] ;
Atualmente, no entanto, muitos autores usaram para transações. Por exemplo, em seu artigo seminal [2], Shavit e Touitou usaram o termo para transações. Quando usado para transações, é igual a .LR LR LR SSR
Obrigado @Wandering Logic pelas discussões .
[1] Linearizabilidade: uma condição de correção para objetos simultâneos . Por M. P. Herlihy e J. M. Wing. ACM Transactions on Programming Languages and Systems, vol. 12, nº 3, julho de 1990.
[2] Memória transacional de software . Por Nir Shavit e Dan Touitou. Distrib. Comput. (1997) 10: 99-116.
fonte
Sua definição de serializabilidade está correta e equivalente à definição de Guerraoui e Kapalka que você cita. A definição de Guerraoui e Kapalka, como a sua, requer que todas as instruções dentro da transação pareçam executar e executar em ordem. Ou seja: o resultado final é como se você tivesse executado as transações atomicamente e em alguma ordem seqüencial. (A implementação pode ser otimizada com algum esquema de execução simultâneo, paralelo e fora de ordem, mas o resultado deve parecer como se você executasse todas as transações em alguma ordem sequencial e sem intercalação.)Tk
A serialização fala sobre o comportamento das transações sem levar em consideração os processos ou threads que emitiram essas transações. (Na sua definição, você tem exatamente tantos processos quanto transações, e cada processo emite exatamente uma transação.)
A linearidade leva em consideração o fato de que cada encadeamento emitirá várias transações, e esperamos que essas transações sejam executadas e concluídas na ordem em que solicitamos.
(Esta é a definição de consistência sequencial de Lamport, "Como criar um computador multiprocessador que execute corretamente programas multiprocessos", IEEE T Comp 28 (9): 690-691, 1979 , mas modificada para falar sobre transações em vez de operações de memória. Herlihy e Wing chamam essa propriedade de estrita serialização .)
O artigo original de Herlihy e Wing que define linearizabilidade era sobre operações em objetos, não transações. Mas, o seguinte conecta os dois conceitos:
(Herlihy, Maurice; Wing, Jeanette: Linearizabilidade: uma condição de correção para objetos concorrentes . ACM T. Prog. Lang. E Sys. 12 (3): 463-492, 1990)
fonte