Sérialise la Mémoire Partagée
![[1.0]](../1.0.gif)
Requiert la sérialiation d'un bloc de mémoire partagée .
La sérialiation réussie symbolise la propriété ou les droits d'accès à un bloc,
et peut être utilisée par les clients DPMI pour synchroniser l'inspection ou
la modification d'un bloc de mémoire partagée.
Appel avec

AX = 0D02H
SI:DI = handle du bloc de mémoire partagée
DX = flags des options
Bit | Signification |
0 | 0 = suspend le client jusqu'à une sérialisation disponible |
1 = renvoie immediatement une error si la sérialisation n'est pas disponible |
1 | 0 = sérialisation exclusive requise |
1 = sérialisation partagée requise |
2-15 | reservé, doit être zéro |
Retourne

si la fonction réussit
Carry flag = 0
si la fonction échoue
Carry flag = 1
AX = code d'erreur
8004H | impasse (l'hôte a detecté une situation
inextricable) |
8005H | requète annulée avec l' Int 31H Fonction
0D03H |
8017H | compte des verrous dépassé |
8018H | sérialisation exclusive déjà acquise a un
autre client |
8019H | sérialisation partagée déjà acquise a un
autre client |
8023H | handle invalide |
Notes
- Pour chaque client, l'hôte DPMI maintient quatre comptes
de sérialisation locaux différents (exclusive,partagée ,attendant le
partage, et attendant l'exclusivité) pour chaque bloc de mémoire partagée,
en même temps qu'un compte global de sérialisation . Le compte global de sérialisation
est mis à jour seulement quand la somme des comptes de sérialisation exclusive
et partagée d'une machine virtuelle passe de 0 à 1 (sérialise) ou de 1 à 0 (libère).
- Une sérialisation exclusive réussie bloque toute requète de sérialisation
(exclusive ou partagée) pour le même bloc par une autre machine
virtuelle. La sérialisation exclusive peut être considérée comme "propriété
pour l'écriture" et doit être requise seulement si le client à l'intention
de modifier le bloc. Une sérialisation partagée réussie bloquera
seulement les requètes de sérialisation exclusive par un autre client.
La sérialisation partagée peut être considérée comme "accès lecture seule",
et doit être utilisée si le client à l'intention d'inspecter le bloc et ne
veut pas changer son contenu.
- Fixer le bit 0 de DX à 1 quand la requète de sérialisation est faite
permet au client de determiner si une zone de mémoire partagée
est sérialisée sans qu'elle soit suspendue. Les clients qui "scrutent"
la disponibilité d'une ressource de cette facon sont encouragés à libérer
le CPU avec l' Int 2FH Fonction 1680H à des intervalles
appropriés .
- Un appel de sérialisation qui suspend un client to peut être annulée
par une routine de service d'interruption du client (comme un gestionnaire
d'interruption clavier ou timer) en appelant l'
(Int 31H Fonction 0D03H). Dans ces cas,
la requète de sérialisation originale retournera avec le flag Carry posé
et AX = 8005H.
- Un client suspendu en attendant la sérialisation d'un bloc de mémoire
partagée peut toujours servir les interruptions. Certains hôtes
auront besoin de réemmetre la requète de sérialisationon au nom du client
après le retour de la routine d'interruption,mais cet évènement sera
invisible par le client.
- Les hôtes ne sont pas obligés de detecter les "impasses". Les clients
qui restent résidents , en s'executant dans le contexte d'autres clients,
doivent être prudents pour éviter les "impasses" et autre séquences
incorrectes d'acquisition et de libération des ressources.