La plupart des systèmes de MDP (spécifiquement les systèmes fondés sur la gestion de pages) implémentent des protocoles de cohérence forte qui séquentialisent l'ensemble des accès à une même donnée partagée. A l'inverse, les sémantiques de cohérence faible autorisent la duplication des objets partagés permettant ainsi d'effectuer des lectures en parallèle. En contrepartie, elles induisent un surcoût important au niveau des protocoles de maintien de la cohérence entre les différentes copies d'une même donnée.
DOSMOS implémente un modèle de cohérence faible (la release
consistency [GLL 90]). Ce modèle de cohérence est basé sur
l'utilisation de deux primitives de synchronisation ``acquire'' et
``release'' [Mos93]. La première permet à un processus
d'acquérir un droit accès en écriture exclusif (sur
une variable) en définissant non pas une section critique au sens propre du terme, c'est-à-dire durant
laquelle un seul processus pourrait accéder à cette variable, mais une
section à accès restreint (SAR) durant laquelle le processus pourra manipuler
sans restriction une copie de la variable, sans qu'il soit cependant
interdit aux
autres processus d'accéder à leur propre copie
. A
l'instar des sections
critiques, sur une même variable, une seule section à accès restreint peut être
active à un instant donné. L'opérateur ``release'' termine une section à accès
restreint en relâchant la variable qui redevient accessible aux autres
processus. Cette opération conduit à invalider ou à mettre à jour les autres
copies de l'objet. L'approche implémentée dans DOSMOS est adaptative en fonction
de la taille de la variable. Dans le cas d'une variable de petite taille, DOSMOS
effectue une mise à jour
dans la mesure où son coût est alors sensiblement le même
que celui d'une d'invalidation (messages de tailles comparables).
A l'inverse, les objets de taille importante sont seulement invalidés.
On peut donc distinguer 4 types d'accès à une variable:
Les opérateurs acquire et release, outre la release consistency, permettent d'implémenter très simplement
deux sémantiques de cohérence fortes : la cohérence séquentielle et la cohérence
stricte [GLL 90]. En effet, il
suffit d'effectuer toutes les écritures dans des sections à accès restreint
pour garantir une exécution séquentiellement cohérente. En
imposant en outre que l'ensemble des lectures soient réalisées dans des
sections à accès restreint, on débouche de facto sur une
cohérence d'exécution stricte puisque tous les accès se font alors en section critique.