Existe-t-il des implémentations de verrouillage matériel sans test-and-set ou swap?

19

Les verrous sont généralement implémentés via des instructions de test et de configuration et d'échange au niveau de la machine. Y a-t-il d'autres implémentations qui ne les utilisent pas?

Aussi, pouvons-nous dire que toutes les solutions de niveau matériel au problème de la section critique peuvent être classées en trois seulement, à savoir la désactivation des interruptions, le test et la configuration et l'échange?

Tamad Lang
la source

Réponses:

13

Oui, vous pouvez implémenter l'exclusion mutuelle avec uniquement des instructions de chargement de mémoire et de stockage. Il existe une longue tradition de conception de solutions successivement plus simples à ce problème.

La première version que je connaisse, appelée "la solution de Dekker", a été introduite à Dijkstra, Edsger W .; «Cooperating sequential process», dans F. Genuys, éd., Programming Languages: NATO Advanced Study Institute , pp. 43-112, Academic Press, 1968 . Il y a eu des dizaines de solutions depuis lors. Je ne discuterai que de quelques-uns des plus notables.

Lamport, Leslie; "Une nouvelle solution du problème de programmation simultanée de Dijkstra", Comm ACM 17 (8): 453-455, 1974 introduit "l'algorithme de boulangerie" (car il est basé sur l'analogie des personnes prenant des nombres pour déterminer l'ordre dans lequel elles seront servi à la boulangerie). L'une des caractéristiques particulièrement remarquables de cet algorithme est qu'il démontre qu'aucune atomicité matérielle n'est requise pour résoudre le problème d'exclusion mutuelle. Les lectures qui chevauchent les écritures au même emplacement peuvent renvoyer n'importe quelle valeur et l'algorithme fonctionne toujours. Lamport en discute un peu dans la description du document sur sa page d'accueil .

La solution de Peterson, Peterson, GL; "Mythes sur le problème de l'exclusion mutuelle", Inf. Proc. Lett. , 12 (3): 115-116, 1981 , est spécifiquement conçu pour être facile à comprendre et à raisonner. Enfin, un de mes favoris en particulier est Lamport, Leslie; «Un algorithme d'exclusion mutuelle rapide», ACM Trans. Comp. Sys. , 5 (1): 1-11, 1987. Dans cet article, Lamport essayait d'optimiser une solution au problème d'exclusion mutuelle dans le cas (commun) où il y avait peu de conflits pour la section critique. Il garantit l'exclusion mutuelle et la liberté de l'impasse, mais pas l'équité. C'est (je crois) le premier algorithme d'exclusion mutuelle utilisant uniquement des lectures et des écritures normales qui peut synchroniser N processeurs en temps O (1) lorsqu'il n'y a pas de conflit. (Lorsqu'il y a conflit, il retombe sur un test O (N).) Il donne une démonstration informelle que le mieux que vous puissiez faire dans le cas sans conflit est de sept accès à la mémoire. (Dekker et Peterson le font tous les deux avec 4, mais ils ne peuvent gérer que 2 processeurs, lorsque vous étendez leurs algorithmes à N, ils doivent ajouter un accès O (N) supplémentaire.)

Apparemment, les gens qui travaillent sur le problème de la résolution de l'exclusion mutuelle en utilisant uniquement les lectures et les écritures de mémoire sont frustrés par la compréhension (insuffisante) des autres du problème et de ses solutions. Ceci est démontré en partie par le titre de l'article de Peterson ("Mythes sur le problème d'exclusion mutuelle") et en partie par une courte note que Lamport a publiée en 1991: Lamport, Leslie; "Le problème d'exclusion mutuelle a été résolu", Comm ACM 34 (1): 110, 1991 , que Lamport décrit un peu amèrement sur sa page d'accueil .

Donc, pour répondre à votre deuxième question: Non. Il existe bien plus de trois catégories de solutions de niveau matériel au problème de la section critique (en utilisant uniquement les charges et les magasins en est une, d'autres impliquent des instructions de comparaison et d'échange, liées à la charge / conditionnelles au magasin instructions (en utilisant le protocole de cohérence du cache pour tester l'atomicité) et les instructions de récupération et d'ajout.) Dans un autre sens, il n'y a vraiment qu'une seule catégorie de solutions: celles qui impliquent d'obtenir un tas de processus asynchrones pour convenir d'un ordre global des événements .

(Notez que cette réponse est une modification (complète) d'une réponse antérieure que j'ai donnée pour une question très différente .)

Logique errante
la source
ll / sc peut, bien entendu, être étendu à une mémoire transactionnelle plus générale qui couvre la totalité de la section critique plutôt que l'acquisition du verrou. La distinction entre ce que garantit le matériel semble également importante; les progrès sont parfois garantis (c.-à-d., un agent gagnera la course pour obtenir un verrou à un moment donné), mais même les concepts faibles liés à l'équité semblent généralement être liés aux logiciels (de manière assez compréhensible).
Paul A. Clayton