Projète Mémoire Conventionelle dans un Bloc de Mémoire
![[1.0]](../1.0.gif)
Projète des adresses linéaires en dessous du premier Mo sur l'adresse
linéaire d'un bloc mémoire précedemment alloué avec
l'Int 31H Fonction 0504H.
Appel avec

AX = 0509H
ESI = handle du bloc de mémoire
EBX = offset dans le bloc de mémoire de(s) page(s) à
projeter(doit être aligné sur une page)
ECX = nombre de pages à projeter
EDX = adresse linéaire de la mémoire conventionelle (doit être
aligné sur une page)
Retourne

si la fonction réussit
Carry flag = 0
si la fonction échoue
Carry flag = 1
AX = code d'erreur
8001H | fonction non supportée (Conventional Memory
Mapping Capability not supported) |
8003H | integrité du système (invalid conventional
memory address) |
8023H | handle invalide (dans ESI) |
8025H | adresse linéaire invalide(l'étendue specifiée
n'est pas dans le bloc specifié ou EBX/EDX
n'est pas aligné sur une page) |
Notes
- Les hôtes DPMI 16-bit ne supportent pas cette fonction. Un client 16-bit
d'un hôte DPMI 32-bit 1.0 peut utiliser cette function.
- Le support de cet appel par les hôtes 32-bit DPMI est optionnel.
Les applications ou DOS Extenders qui requièrent cet appel pour pouvoir
s'exécuter ne sont pas compatible-DPMI .
- Toutes pages engagées ou projetées dans l'étendue de l'adresse linéaire
seront désengagées ou "déprojetées"automatiquement par l'hôte.
- Le client doit seulement projeter la mémoire conventionelle qu'il possède
déjà; c.a.d la mémoire que le client a précedemment alloué
avec l'Int 31H Fonction 0100H ouen appelant l'Int DOS
21H Fonction 48H directement via les services de traduction.
- Toutes les pages crées par cet appel ont le bit "projeté"(bit 2)posé
dans les attributs retournés par l'(Int
31H Function 0506H).
- Les hôtes DPMI qui n'implémentent pas la mémoire virtuelle
peuvent supporter cette fonction en copiant la table d'entrées des pages.
Les entrées doivent être marquées comme projetées ainsi l'hôte sait qu'il
ne faut pas libérer ces pages physiques quand le bloc mémoire est
libéré .
- Les hôtes DPMI qui fournissent de la mémoire virtuelle doivent
implementer une forme de "page aliasing" de manière à supporter cette
fonction.
- La fonction peut fournir ungrand espace mémoire contigu sans
le support de la mémoire virtuelle .
- Les implementeurs d'hôtes DPMI qui ne fournissent pas de mémoire virtuelle
sont encouragés à supporter cette fonction. Sans elle,la mémoire
conventionelle est inaccessible à un client 32-bit non segmenté, car le client
a besoin de mémoire linéaire contigue pour son code et ses données.
Les clients 32-bit peuvent toujours s'assurer que la mémoire
conventionelle n'est pas gaspillée avec la stratégie suivante:
- Appeler DOS pour allouer toute mémoire conventionelle libre
- Si l'hôte DPMI supporte la mémoire virtuelle, appeler
l' (Int 31H Fonction 0602H) pour s'assurer
que l'hôte n'a pas vérouillé la mémoire conventionelle.
- Si l'hôte ne supporte pas la mémoire virtuelle mais supporte
l' (Int 31H Fonction 0509H),allouer un bloc mémoire
avec des pages non engagées , puis utiliser la Fonction 0509H
pour rendre la mémoire physique allouée en dessous de 640 Ko adressable
dans le bloc mémoire,et par conséquent utilisable par l'application
32-bit .