Introduction
Le mémoire EMS, dont son nom provient de l'abréviation d'origine anglaise d'«Expanded Memory System/Expanded Memory Manager», aussi appelé Mémoire paginée, fournit la possibilité de contourner la limite de 1 Mo que peuvent gérer les microprocesseurs 8086, 8088, 80188, 80186, NEC V20 et NEC V30 grâce à une technique de mémoire paginée. La variante de mémoire EMS la plus connue fut celle développer conjointement par Lotus Software, Intel et Microsoft et ayant l'appellation «LIM EMS». Cependant, il existe également la variante «EEMS» développée par AST Research, Quadram et Ashton-Tate fournissant la possibilité de cartographier n'importe quelle zone de mémoire sous les 1 Mo. Enfin, IBM a créé sa propre variante de mémoire qu'il nomma XMA. Ainsi, généralement, on constatera 4 plages de 16 Ko donnant un accès à une banque de mémoire pouvant aller jusqu'à 32 Mo. Le détail le plus intéressant de ce type de mémoire, c'est qu'il est possible de faire en sorte qu'il utilise le disque dur ou un autre support que la mémoire vive pour entreposer l'information.
Situation actuelle
Avec l'arrivée de Windows 95, ce type de mémoire vive a été progressivement abandonné à cause que le système d'exploitation permet de supporter plus de mémoire sans passer par un pilote. Donc, les systèmes d'exploitation modernes comme Windows, Mac OS X ou Linux ne supportent plus se type de mémoire bien qu'ils prennent tous en charge l'assembleur de la famille 80x86.
Remarques
- L'ensemble de puces 82C322 permet l'utilisation de ce type de mémoire par l'intermédiaire des ports d'entrée/sortie 0022h/0023h.
- Des cartes avec des fentes ISA comme «Emulex Persyst 4 MiB ISA» supportent de façon matérielle ce type de mémoire.
- Des cartes pour les micro-ordinateurs PS/2 d'IBM comme la «RamQuest 50/60» supportent de façon matérielle ce type de mémoire.
- Les systèmes d'exploitation MS-DOS fournissaient un support de ce type de mémoire en utilisant la mémoire XMS grâce au pilote «EMM386.EXE». Toutefois, il y avait également de nombreux utilitaires comme 386MAX, Memory Commander, QEMM386 ou QEMM fournissant le même genre de possibilité avec cependant plus d'efficacité.
- Bien que Windows est abandonné toute forme de support de ce type de mémoire, les systèmes d'exploitation OS/2 et eComStation supporte encore ce type de mémoire.
- Si vous utilisez le système d'exploitation OS/2 ou eComStation, vous devez vous assurer que le paramètre de session «EMS_MEMORY_LIMIT» soit supérieur à 0.
Fonction du pilote d'interface EMS/EMM
Fonction | Description |
---|---|
Interruption 67h, Fonction 40h | Cette fonction permet de demander l'état du pilote. |
Interruption 67h, Fonction 41h | Cette fonction permet de demander l'adresse de la structure de la mise en oeuvre des pages de mémoire. |
Interruption 67h, Fonction 42h | Cette fonction permet de demander le nombre de pages de mémoire. |
Interruption 67h, Fonction 43h | Cette fonction permet l'allocation d'un descripteur et de pages de mémoire. |
Interruption 67h, Fonction 44h | Cette fonction permet de fixer la cartographie d'une page de mémoire étendue. |
Interruption 67h, Fonction 45h | Cette fonction permet de libérer un identificateur de descripteur et des pages de mémoire lui étant associé. |
Interruption 67h, Fonction 46h | Cette fonction permet de demander le numéro de la version du pilote. |
Interruption 67h, Fonction 47h | Cette fonction permet de sauvegarder la structure d'implantation des pages de mémoire. |
Interruption 67h, Fonction 48h | Cette fonction permet de restaurer la structure d'implantation des pages de mémoire. |
Interruption 67h, Fonction 4Bh | Cette fonction permet de demander le nombre de descripteur utilisé. |
Interruption 67h, Fonction 4Ch | Cette fonction permet de demander le nombre de pages qu'utilise un descripteur. |
Interruption 67h, Fonction 4Dh | Cette fonction permet de demander le nombre de pages qu'utilisent tous les descripteurs réunis. |
Interruption 67h, Fonction 4Eh, Sous-Fonction 00h | Cette fonction permet de sauvegarder la structure d'implantation des pages de mémoire. |
Interruption 67h, Fonction 4Eh, Sous-Fonction 01h | Cette fonction permet de restaurer la structure d'implantation des pages de mémoire. |
Interruption 67h, Fonction 4Eh, Sous-Fonction 02h | Cette fonction permet de sauvegarder la structure d'implantation des pages de mémoire et dit copier le contenu d'un autre tampon. |
Interruption 67h, Fonction 4Eh, Sous-Fonction 03h | Cette fonction permet de demander la taille des informations contenu dans la structure d'une page de mémoire. |
Interruption 67h, Fonction 4Fh, Sous-Fonction 00h | Cette fonction permet de sauvegarder partiellement la structure d'implantation des pages de mémoire. |
Interruption 67h, Fonction 4Fh, Sous-Fonction 01h | Cette fonction permet de restaurer partiellement la structure d'implantation des pages de mémoire. |
Interruption 67h, Fonction 4Fh, Sous-Fonction 02h | Cette fonction permet de demander la taille des informations d'affectation des pages de mémoire. |
Interruption 67h, Fonction 50h, Sous-Fonction 00h | Cette fonction permet de rendre accessible plusieurs pages de mémoire à l'aide d'un numéro. |
Interruption 67h, Fonction 50h, Sous-Fonction 01h | Cette fonction permet de rendre accessible plusieurs pages de mémoire à partir d'une adresse. |
Interruption 67h, Fonction 51h | Cette fonction permet d'effectuer une nouvelle allocation de pages de mémoire associé à un descripteur. |
Interruption 67h, Fonction 52h, Sous-Fonction 00h | Cette fonction permet de demander l'attribut de volatilité d'un descripteur. |
Interruption 67h, Fonction 52h, Sous-Fonction 01h | Cette fonction permet de fixer l'attribut d'un descripteur. |
Interruption 67h, Fonction 52h, Sous-Fonction 02h | Cette fonction permet de demander les types d'attribut supporté par le pilote. |
Interruption 67h, Fonction 53h, Sous-Fonction 00h | Cette fonction permet de demander le nom d'un descripteur. |
Interruption 67h, Fonction 53h, Sous-Fonction 01h | Cette fonction permet de fixer le nom d'un descripteur. |
Interruption 67h, Fonction 54h, Sous-Fonction 00h | Cette fonction permet de demander les noms de tous les descripteurs. |
Interruption 67h, Fonction 54h, Sous-Fonction 01h | Cette fonction permet de trouver un descripteur à partir de son nom. |
Interruption 67h, Fonction 54h, Sous-Fonction 02h | Cette fonction permet de demander le nombre maximal de descripteur supporté par le pilote. |
Interruption 67h, Fonction 55h | Cette fonction permet de fixer l'affectation de pages et du nombre de page avant le saut. |
Interruption 67h, Fonction 56h, Sous-Fonction 00h | Cette fonction permet de fixer le numéro de pages physique et d'adresse d'appel. |
Interruption 67h, Fonction 56h, Sous-Fonction 01h | Cette fonction permet de fixer le segment de pages physique et d'adresse d'appel. |
Interruption 67h, Fonction 56h, Sous-Fonction 02h | Cette fonction permet de demander la taille nécessaire pour les fonctions «Adresse d'appel». |
Interruption 67h, Fonction 57h, Sous-Fonction 00h | Cette fonction permet d'effectuer une copie d'une zone de mémoire. |
Interruption 67h, Fonction 57h, Sous-Fonction 01h | Cette fonction permet d'échanger le contenu de zones de mémoires. |
Interruption 67h, Fonction 58h, Sous-Fonction 00h | Cette fonction permet de demander l'adresse des pages de mémoire disponibles. |
Interruption 67h, Fonction 58h, Sous-Fonction 01h | Cette fonction permet de demander le nombre de pages de mémoire disponibles. |
Interruption 67h, Fonction 59h, Sous-Fonction 00h | Cette fonction permet de demander la configuration matériel. |
Interruption 67h, Fonction 59h, Sous-Fonction 01h | Cette fonction permet de demander le nombre de pages total physiquement disponible. |
Interruption 67h, Fonction 5Ah, Sous-Fonction 00h | Cette fonction permet d'effectuer une allocation de descripteur et de pages de mémoire standard. |
Interruption 67h, Fonction 5Ah, Sous-Fonction 01h | Cette fonction permet d'effectuer une allocation de descripteur et de pages de mémoire non-standard. |
Interruption 67h, Fonction 5Bh, Sous-Fonction 00h | Cette fonction permet de demander les registres de cartographie alterné. |
Interruption 67h, Fonction 5Bh, Sous-Fonction 01h | Cette fonction permet d'initialiser les registres de cartographie alterné. |
Interruption 67h, Fonction 5Bh, Sous-Fonction 02h | Cette fonction permet de demander la taille et l'espace nécessaire de sauvegarde du registres de cartographie alterné. |
Interruption 67h, Fonction 5Bh, Sous-Fonction 03h | Cette fonction permet d'effectuer l'allocation d'un registre de cartographie alterné. |
Interruption 67h, Fonction 5Bh, Sous-Fonction 04h | Cette fonction permet de restaurer l'allocation d'un registre de cartographie alterné. |
Interruption 67h, Fonction 5Bh, Sous-Fonction 05h | Cette fonction permet d'effectuer l'allocation d'un registre de DMA initialisé. |
Interruption 67h, Fonction 5Bh, Sous-Fonction 06h | Cette fonction permet d'effectuer une validation DMA d'un registre de cartographie alterné. |
Interruption 67h, Fonction 5Bh, Sous-Fonction 07h | Cette fonction permet de restaurer la validation DMA d'un registre de cartographie alterné. |
Interruption 67h, Fonction 5Bh, Sous-Fonction 08h | Cette fonction permet de restaurer le contenu d'un registre DMA. |
Interruption 67h, Fonction 5Ch | Cette fonction permet de préparer le pilote à un démarrage à chaud immédiat de l'ordinateur. |
Interruption 67h, Fonction 5Dh, Sous-Fonction 00h | Cette fonction permet d'activer des fonctions EMM du système d'exploitation. |
Interruption 67h, Fonction 5Dh, Sous-Fonction 01h | Cette fonction permet de désactiver des fonctions EMM du système d'exploitation. |
Interruption 67h, Fonction 5Dh, Sous-Fonction 02h | Cette fonction permet de supprimer les clefs d'accès du pilote. |
Code source
Voici des exemples de code source d'utilitaires pour manipuler l'EMS :
Lien | Langage de programmation | Description | Projet |
---|---|---|---|
EMSTEST.PAS | Turbo Pascal | Cette commande permet de tester la mémoire EMS. Cette commande est un clone de la commande EMSTEST du Turbo Pascal 6. | Corail |
Voir également
Langage de programmation - Assembleur 80x86 - Interruption 67h: Gestionnaire EMS/EMM
Langage de programmation - Turbo Pascal - Référence de procédures et fonctions - «OVRINITEMS»
Langage de programmation - Turbo Pascal pour Windows - Référence de procédures et fonctions - «LIMITEMSPAGES»
Langage de programmation - C pour OS/2 - Référence procédures et fonctions - «LIMITEMSPAGES»
Système d'exploitation - MS-DOS 3.21 Enhanced Amdek - Références de commandes et de programmes - «VMEM»
Système d'exploitation - MS-DOS 5 - Références de commandes et de programmes - «EMM386»
Système d'exploitation - MS-DOS 6 - Références de commandes et de programmes - «EMM386»