Existem implementações de bloqueio de hardware sem testar e configurar ou trocar?

19

Os bloqueios geralmente são implementados por meio de instruções de teste e configuração e troca de nível de máquina. Existem outras implementações que não as utilizam?

Além disso, podemos dizer que todas as soluções em nível de hardware para o problema de seção crítica podem ser categorizadas em apenas três, a saber: interrupção de desativação, teste e configuração e troca?

Tamad Lang
fonte

Respostas:

13

Sim, você pode implementar exclusão mútua apenas com instruções de carregamento e armazenamento de memória. Há uma longa tradição de desenvolver soluções sucessivamente mais simples para esse problema.

A versão mais antiga que eu conheço, chamada "solução de Dekker", foi introduzida em Dijkstra, Edsger W .; "Cooperating sequential process", em F. Genuys, ed., Programming Languages: NATO Advanced Study Institute , pp. 43-112, Academic Press, 1968 . Existem dezenas de soluções desde então. Vou discutir apenas alguns dos mais notáveis.

Lamport, Leslie; "Uma nova solução do problema de programação simultânea de Dijkstra", Comm ACM 17 (8): 453-455, 1974 introduz o "algoritmo de padaria" (porque é baseado na analogia de pessoas que recebem números para determinar a ordem em que serão servido na padaria). Uma das características particularmente notáveis ​​desse algoritmo é que ele demonstra que nenhuma atomicidade de hardware é necessária para resolver o problema de exclusão mútua. As leituras que sobrepõem gravações no mesmo local podem retornar qualquer valor e o algoritmo ainda funciona. Lamport discute isso um pouco na descrição do artigo em sua home page .

Solução de Peterson, Peterson, GL; "Mitos sobre o problema da exclusão mútua", Inf. Proc. Lett. , 12 (3): 115-116, 1981 , é aquele especificamente projetado para ser fácil de entender e raciocinar. Finalmente, um dos meus favoritos em particular é Lamport, Leslie; "Um algoritmo de exclusão mútua rápida", ACM Trans. Comp. Sys. , 5 (1): 1-11, 1987. Neste artigo, Lamport estava tentando otimizar uma solução para o problema de exclusão mútua no caso (comum) de que há pouca contenção para a seção crítica. Garante exclusão mútua e liberdade de impasse, mas não justiça. É (acredito) o primeiro algoritmo de exclusão mútua usando apenas leituras e gravações normais que podem sincronizar N processadores no tempo O (1) quando não há contenção. (Quando há contenção, ele recorre a um teste O (N).) Ele dá uma demonstração informal de que o melhor que você pode fazer no caso sem contenção é sete acessos à memória. (Dekker e Peterson fazem isso com 4, mas eles só podem manipular 2 processadores, quando você estende seus algoritmos para N, eles precisam adicionar um acesso extra de O (N).)

Aparentemente, as pessoas que trabalham no problema de solucionar a exclusão mútua usando apenas leituras e gravações de memória ficam frustradas com a (falta de) compreensão de outras pessoas sobre o problema e suas soluções. Isso é demonstrado em parte pelo título do artigo de Peterson ("Mitos sobre o problema da exclusão mútua") e em parte por uma breve nota que Lamport publicou em 1991: Lamport, Leslie; "O problema da exclusão mútua foi resolvido", Comm ACM 34 (1): 110, 1991 , que Lamport descreve um tanto amargamente em sua página inicial .

Portanto, para responder à sua segunda pergunta: Não. Existem muitas mais de três categorias de soluções no nível de hardware para o problema de seção crítica (usar apenas cargas e lojas é uma, outras envolvem instruções de comparação e troca, vinculadas à carga / condicionais à loja instruções (usando o protocolo de coerência de cache para testar a atomicidade) e instruções de busca e adição.) Em outro sentido, há realmente apenas uma categoria de soluções: aquelas que envolvem a obtenção de vários processos assíncronos para concordar com uma ordem global de eventos. .

(Observe que esta resposta é uma edição (extensa) de uma resposta anterior que dei para uma pergunta muito diferente .)

Lógica Errante
fonte
É claro que o ll / sc pode ser estendido para uma memória transacional mais geral, que cobre toda a seção crítica, e não apenas a aquisição do bloqueio. A distinção entre o que garante o hardware fornece também parece significativa; Às vezes, é garantido o progresso futuro (ou seja, um agente vencerá a corrida para obter um bloqueio em um determinado momento), mas mesmo conceitos fracos relacionados à imparcialidade parecem ser geralmente direcionados ao software (de maneira compreensível).
Paul A. Clayton