Dans la gestion de la mémoire DOS , la mémoire étendue est un système de commutation de banque qui fournissait de la mémoire supplémentaire aux programmes DOS au-delà de la limite de la mémoire conventionnelle (640 KiB). La mémoire étendue est un terme générique désignant plusieurs variantes technologiques incompatibles. La plus répandue était la spécification de mémoire étendue ( EMS ), développée conjointement par Lotus Development , Intel et Microsoft , d'où son appellation parfois « LIM EMS ». LIM EMS a connu trois versions : 3.0, 3.2 et 4.0. La première version largement déployée fut EMS 3.2, qui prenait en charge jusqu'à 8 Mio de mémoire étendue et utilisait une partie de l'espace d'adressage normalement dédié à la communication avec les périphériques ( mémoire supérieure ) pour mapper des portions de la mémoire étendue. EEMS , une norme de gestion de la mémoire étendue concurrente de LIM EMS 3.x, a été développée par AST Research , Quadram et Ashton-Tate (« AQA ») ; elle pouvait mapper n'importe quelle zone du 1 Mio inférieur. EEMS a finalement été intégrée à LIM EMS 4.0, qui prenait en charge jusqu'à 32 Mio de mémoire étendue et offrait également une certaine prise en charge du multitâche sous DOS. IBM, cependant, a créé sa propre norme de mémoire étendue appelée XMA . L'utilisation de la mémoire étendue est devenue courante avec les jeux et les programmes d'entreprise tels que Lotus 1-2-3 de la fin des années 1980 au milieu des années 1990, mais son utilisation a diminué à mesure que les utilisateurs passaient de DOS à des systèmes d'exploitation en mode protégé tels que Linux , IBM OS/2 et Microsoft Windows . Le processeur 8088 des IBM PC et IBM PC/XT peut adresser un mégaoctet (Mio, soit 2²⁰ octets) de mémoire. Il a hérité de cette limite du bus d'adresses externe 20 bits (et de l'architecture d'adressage mémoire globale) de l' Intel 8086. Les concepteurs du PC ont alloué les 640 Kio inférieurs (BIOS système , la mémoire vidéo et la mémoire sur les cartes périphériques d'extension. Bien que l' IBM PC AT , sorti en 1984, utilise la puce 80286 capable d'adresser jusqu'à 16 Mio de RAM en tant que mémoire étendue , il ne peut le faire qu'en mode protégé . La rareté des logiciels compatibles avec ce mode (aucune application DOS standard ne peut s'y exécuter) a laissé le marché ouvert à une autre solution. Pour accroître l'accessibilité de la mémoire, un système de commutation de banque a été mis au point, permettant d'accéder à certaines parties de la mémoire supplémentaire à un instant donné. Initialement, une unique fenêtre de mémoire de 64 Kio (2<sup> 16 </sup> octets), appelée cadre de page , était utilisée ; ce système a ensuite été assoupli. Les programmes sont conçus de manière spécifique pour accéder à la mémoire étendue. La fenêtre entre la mémoire conventionnelle et la mémoire étendue peut être ajustée pour accéder à différentes adresses au sein de cette dernière. Une première tentative d'utilisation d'une technique de commutation de banque a été réalisée par Tall Tree Systems avec ses cartes JRAM, mais celles-ci n'ont pas rencontré le succès escompté. (Tall Tree Systems a par la suite fabriqué des cartes basées sur la technologie EMS utilisant la même marque de JRAM. )
Spécification de mémoire étendue (EMS)
Lotus Development , Intel et Microsoft ont collaboré au développement de la norme EMS (également appelée LIM EMS). La première version publique d'EMS, la version 3.0, permettait d'accéder à 4 Mio de mémoire étendue. Cette capacité a été portée à 8 Mio avec la version 3.2. La version finale d'EMS, la version 4.0, a augmenté la capacité maximale de mémoire étendue à 32 Mio et prend en charge des fonctionnalités supplémentaires.Bill Gates, frappant du poing sur la table , déclara à propos de la mémoire étendue : « C'est de la camelote ! Un bricolage !… Mais nous allons le faire. » Les entreprises prévoyaient de lancer la norme au COMDEX du printemps 1985 , et de nombreux fabricants de cartes d'extension et d'éditeurs de logiciels annoncèrent leur soutien. AST Research , STB Systems , Persyst , Quadram et Tecmar conçurent rapidement des cartes compatibles EMS pour concurrencer la carte d'extension Above Board d'Intel. Dès le milieu de l'année 1985, certains considéraient déjà l'EMS comme une norme de facto .
La première version publique de la norme EMS, appelée EMS 3.0, a été publiée en 1985 ; cependant, EMS 3.0 n’a pratiquement pas été implémentée matériellement avant d’être remplacée par EMS 3.2. EMS 3.2 utilise une région de 64 Kio dans les 384 Kio supérieurs ( zone de mémoire supérieure ) divisée en quatre pages de 16 Kio, qui peuvent être utilisées pour mapper des portions de la mémoire étendue.
Quadram, AST et Ashton-Tate ont créé la norme Enhanced EMS (EEMS). EEMS, un sur-ensemble d'EMS 3.2, permet de mapper n'importe quelle région de 16 Kio de la RAM inférieure vers la mémoire étendue, à condition qu'elle ne soit pas associée à des interruptions ou à de la mémoire d'E/S dédiée, comme les cartes réseau ou vidéo. Ainsi, des programmes entiers peuvent être chargés et déchargés de la RAM supplémentaire. EEMS a également ajouté la prise en charge de deux ensembles de registres de mappage. Ces fonctionnalités sont utilisées par les premiers logiciels multitâches DOS, tels que DESQview . La spécification LIM EMS 4.0 de 1987 intégrait la quasi-totalité des fonctionnalités d'EEMS.
Une nouvelle fonctionnalité introduite dans LIM EMS 4.0 permet aux cartes EMS de disposer de plusieurs ensembles de registres de mappage de pages (jusqu'à 64 ensembles). Ceci autorise une forme primitive de multitâche DOS . Toutefois, la norme ne spécifie pas le nombre d'ensembles de registres qu'une carte doit posséder, ce qui entraîne une grande variabilité entre les implémentations matérielles à cet égard.
La spécification de mémoire étendue (EMS) décrit l'utilisation de la mémoire étendue. Les fonctions EMS sont accessibles via l' interruption logicielle 67h. Les programmes utilisant l'EMS doivent d'abord vérifier la présence d'un gestionnaire de mémoire étendue (EMM) installé en recherchant un pilote de périphérique portant le nom EMMXXXX0 .
Adaptateur de mémoire étendue (XMA)
IBM est restée silencieuse tandis que l'industrie adoptait largement la norme LIM. Le PC Tech Journal écrivait en février 1986 : « Cela doit être embarrassant pour IBM… IBM n'a pas tenu ses promesses. Intel et ses partenaires, si. » L'entreprise a développé sa propre norme de mémoire appelée Expanded Memory Adapter (XMA) ; le pilote DOS IBM correspondant est XMAEM.SYS. Contrairement à EMS, les cartes d'extension IBM peuvent être adressées à la fois via un modèle de mémoire étendue et comme mémoire étendue . L'interface matérielle de mémoire étendue utilisée par les cartes XMA est cependant incompatible avec EMS, mais un pilote XMA2EMS.SYS assure l'émulation EMS pour les cartes XMA. Les cartes XMA ont été introduites pour la première fois avec les modèles (remaniés) de 1986 du PC 3270.
Mises en œuvre
Cartes d'extension

L'insertion d'une fenêtre mémoire dans l'espace d'adressage périphérique n'était initialement possible qu'au moyen de cartes d'extension spécifiques, branchées sur le bus d'extension ISA de l'ordinateur. Parmi les cartes d'extension de mémoire les plus connues des années 1980, on peut citer l'AST RAMpage, l'IBM PS/2 80286 Memory Expansion Option, l'AT&T Expanded Memory Adapter et l' Intel chipsets de cartes mères pour ordinateurs basés sur le processeur Intel 80286 ont implémenté un système de mémoire étendue ne nécessitant pas de cartes d'extension, notamment le chipset NEAT . Généralement, des commutateurs logiciels déterminaient la quantité de mémoire à allouer à la mémoire étendue et celle à allouer à la mémoire étendue .
Pilotes de périphériques
Une carte à mémoire étendue, étant un périphérique matériel, nécessitait un pilote logiciel qui en assurait l'accès à ses services. Ce pilote était appelé gestionnaire de mémoire étendue . Son nom variait ; les cartes mentionnées précédemment utilisaient respectivement REMM.SYS (AST), PS2EMM.SYS (IBM), AEMM.SYS (AT&T) et EMM.SYS (Intel). Par la suite, l'expression s'est associée aux solutions logicielles nécessitant le processeur Intel 80386 , comme par exemple QEMM de Quarterdeck , 386 MAX de EMM386 par défaut sous MS-DOS, PC- DOS et DR-DOS .
Émulation logicielle
À partir de 1986, les fonctions de gestion de la mémoire intégrées au processeur Intel 80386 permettaient de modéliser librement l'espace d'adressage lors de l'exécution de logiciels en mode réel, rendant ainsi superflues les solutions matérielles. L'extension de la mémoire pouvait être simulée par logiciel.
Le premier logiciel de gestion (émulation) de mémoire étendue fut CEMM , disponible en septembre 1986 comme utilitaire pour le Compaq Deskpro 386. QEMM de Quarterdeck était une solution commerciale populaire et riche en fonctionnalités. Qualitas proposait également 386 MAX . Ces fonctionnalités furent ensuite intégrées à MS-DOS 4.01 en 1989, puis à DR DOS 5.0 en 1990, sous le nom d' EMM386 .
Les gestionnaires de mémoire étendue logicielle offraient généralement des fonctionnalités supplémentaires, mais étroitement liées. Ils permettaient notamment d'utiliser des parties de la zone de mémoire supérieure (UMA) (les 384 Kio supérieurs de l'espace d'adressage en mode réel) appelées blocs de mémoire supérieure (UMB) et fournissaient des outils pour charger de petits programmes, généralement des programmes résidents (« LOADHI » ou « LOADHIGH »).
L'interaction entre la mémoire étendue , l'émulation de mémoire étendue et les extendeurs DOS a finalement été régulée par les spécifications XMS, VCPI ( Virtual Control Program Interface ), DPMI ( DOS Protected Mode Interface ) et DPMS ( DOS Protected Mode Services ).
Certains programmes d'émulation, communément appelés LIMulators, ne s'appuyaient ni sur la carte mère ni sur les fonctionnalités du 80386. Ils réservaient 64 Kio de la RAM de base pour la mémoire étendue, où ils copiaient des données entre cette mémoire et le disque dur lors des changements de page demandés par les applications. Cette méthode était simple à implémenter, mais ses performances étaient faibles. Elle était proposée par AboveDisk (Above Software) et par plusieurs logiciels en version d'essai .
It is also possible to emulate EMS by using XMS memory on 286 CPUs using 3rd party utilities like EMM286 (.SYS driver).
Decline
Expanded Memory usage declined in the 1990s. New operating systems like Linux, Windows 9x, Windows NT, OS/2, and BSD/OS supported protected mode "out of the box". These and similar developments rendered Expanded Memory an obsolete concept.
Similar concepts
Other platforms have implemented the same basic concept – additional memory outside of the main address space – but in technically incompatible ways:
- Expanded storage was a feature on IBM mainframes providing additional memory outside of the main system memory, first introduced with the IBM 3090 high-end mainframe series in 1985. Expanded storage could not be directly addressed by applications; an MVS feature known as "window services" enabled applications to allocate movable windows to expanded storage within their own address space. There was also a "data mover" feature which could be invoked to move data between main memory (central storage) and expanded storage; later, an "Asynchronous Data Mover Facility" (ADMF) was introduced, which enabled applications to request data to be moved between the two in the background, while they performed other processing. By the mid-1990s, expanded storage had ceased to be a physically separate memory, and had become merely a logical division within the system memory enforced by firmware; but it was not until the November 2016 release of z/VM 6.4 that IBM finally removed all support for expanded storage from its mainframe operating systems.
- Address Windowing Extensions (AWE) is a conceptually similar feature in Microsoft Windows, used to enable 32-bit applications to access more memory than the 2–4GB that can fit in a 32-bit address space. Although still supported by current versions of Windows, its use has been superseded by 64-bit applications, which can access >4GB of memory directly.
- Virtual memory creates the illusion of available memory using, for instance, disk storage.