Pergunta

Atualmente estou checando pelo manual do Arm Architecture para o núcleo do ARMV7. No capítulo A3.5.3 Sobre a atomicidade dos acessos de memória, afirma:

.

Se uma carga atômica de cópia única se sobreporá uma loja atômica única e Para qualquer um dos bytes sobrepostos, a carga retorna os dados escritos por a escrita inserida na ordem de coerência desse byte pelo Loja atômica de cópia única, então a carga deve retornar dados de um ponto na ordem de coerência, não mais cedo do que as gravações inseridas no Ordem de coerência pela loja atômica de cópia única de todos os bytes sobrepostos.

Como falante inglesa não nativa, admito que estou ligeiramente desafiado em entender esta frase.

Existe um cenário em que escreve para um byte de memória não é inserido na ordem de coerência e, portanto, o acima não se aplica? Se não, estou correto para dizer que encurtar e reformular a frase para o seguinte:

.

Se a carga for retornar pelo menos um byte do a gravação, então a carga deve retornar todos os bytes sobrepostos de um ponto não mais cedo do que onde a escrita os inseriu no Ordem de coerência de todos os bytes sobrepostos.

Ainda transporta o mesmo significado?

Foi útil?

Solução

Eu vejo essa redação no braço da ARMV8, que realmente tenta remover qualquer ambiguidade possível em muitos lugares (mesmo que faça a seção de encomenda de memória virtualmente ilegível).

Em termos de compreensão geral (em oposição a realmente implementando a especificação), um pouco de ambigüidade nem sempre se machuca, então, embora não faça isso absolutamente claro o que um "local de memória" significa, acho que o antigo manual V7 (DDI0406C.B) é uma leitura melhor neste caso:

.

Uma operação de leitura ou gravação é atômica única se as seguintes condições forem verdadeiras:

  • Após qualquer número de operações de gravação para um local de memória, o valor do local de memória é o valor escrito por uma das operações de gravação. É impossível que parte do valor do local da memória venha de uma operação de gravação e outra parte do valor para vir de uma operação de gravação diferente

  • Quando uma operação de leitura e uma operação de gravação são feitos no mesmo local de memória, o valor obtido pela operação de leitura é um dos:

    • o valor do local da memória antes da operação de gravação
    • o valor do local de memória após a operação de gravação.

    Nunca é o caso de que o valor da operação de leitura seja parcialmente o valor do local de memória antes da operação de gravação e parcialmente o valor do local da memória após a operação de gravação.

Portanto, o seu entendimento é certo - o ponto de definição de uma operação atômica de uma única cópia é que, a qualquer momento, você só poderá ver Tudo dele ou nenhum disso.

Há um caso em v7 pelo qual (se eu estiver interpretando certo) duas lojas atômicas normalmente cópias únicas que ocorrem no mesmo local ao mesmo tempo, mas com diferentes tamanhos quebram qualquer garantia de atomicidade, então em teoria poderia observar alguma mistura inesperada de bytes lá - isso parece ter sido removido em v8.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top