En la gestión de memoria DOS , la memoria expandida es un sistema de conmutación de bancos que proporciona memoria adicional a los programas DOS más allá del límite de la memoria convencional (640 KiB).
Memoria expandida es un término genérico para varias variantes de tecnología incompatibles. La variante más utilizada fue la Especificación de memoria expandida ( EMS ), que fue desarrollada conjuntamente por Lotus Software , Intel y Microsoft , por lo que a esta especificación a veces se la denominaba " LIM EMS ". LIM EMS tenía tres versiones: 3.0, 3.2 y 4.0. La primera versión ampliamente implementada fue EMS 3.2, que admitía hasta 8 MiB de memoria expandida y usaba partes del espacio de direcciones normalmente dedicado a la comunicación con periféricos ( memoria superior ) para mapear porciones de la memoria expandida. EEMS , un estándar de administración de memoria expandida que competía con LIM EMS 3.x, fue desarrollado por AST Research , Quadram y Ashton-Tate ("AQA"); podía mapear cualquier área del 1 MiB inferior. EEMS finalmente se incorporó en LIM EMS 4.0, que admitía hasta 32 MiB de memoria expandida y también brindaba cierto soporte para la multitarea DOS. Sin embargo, IBM creó su propio estándar de memoria expandida llamado XMA .
El uso de memoria expandida se volvió común en juegos y programas comerciales como Lotus 1-2-3 a fines de la década de 1980 y mediados de la década de 1990, pero su uso disminuyó a medida que los usuarios cambiaron de DOS a sistemas operativos de modo protegido como Linux , IBM OS/2 y Microsoft Windows .
El procesador 8088 de IBM PC e IBM PC/XT podía direccionar un megabyte (MiB, o 220 bytes ) de memoria. Heredó este límite del bus de direcciones externo de 20 bits (y la arquitectura general de direccionamiento de memoria) del Intel 8086. Los diseñadores del PC asignaron los 640 KiB inferiores (655 360 bytes) de espacio de direcciones para la memoria de programa de lectura y escritura (RAM), llamada memoria convencional , y los 384 KiB restantes de espacio de memoria se reservaron para usos tales como el BIOS del sistema , la memoria de video y la memoria en las placas periféricas de expansión.
Aunque el IBM PC AT , presentado en 1984, utilizaba el chip 80286 que podía direccionar hasta 16 MiB de RAM como memoria extendida , sólo podía hacerlo en modo protegido . La escasez de software compatible con el modo protegido (no se podían ejecutar aplicaciones DOS estándar en él) significaba que el mercado todavía estaba abierto para otra solución. [1]
Para que hubiera más memoria accesible, se diseñó un esquema de conmutación de bancos , en el que solo se podía acceder a partes seleccionadas de la memoria adicional en un momento dado. Originalmente, se utilizaba una única ventana de memoria de 64 KiB ( 216 bytes), llamada marco de página ; más tarde, esto se hizo más flexible. Los programas debían escribirse de una manera específica para acceder a la memoria expandida. La ventana entre la memoria convencional y la memoria expandida podía ajustarse para acceder a diferentes ubicaciones dentro de la memoria expandida.
Un primer intento de utilizar una técnica de conmutación de bancos fue realizado por Tall Tree Systems con sus placas JRAM, [2] pero no tuvo éxito. [1] (Posteriormente, Tall Tree Systems fabricó placas basadas en EMS utilizando la misma marca JRAM).
Lotus Development , Intel y Microsoft colaboraron para desarrollar el estándar EMS (también conocido como LIM EMS). La primera versión de EMS disponible públicamente, la versión 3.0, permitía el acceso a hasta 4 MiB de memoria expandida. [ cita requerida ] Esto se incrementó a 8 MiB con la versión 3.2 de la especificación. La versión final de EMS, la versión 4.0, aumentó la cantidad máxima de memoria expandida a 32 MiB y admitió funcionalidad adicional.
Microsoft pensó que el cambio de banco era una medida provisional, poco elegante y temporal, pero necesaria. Bill Gates, dando un puñetazo sobre la mesa durante una entrevista, dijo sobre la memoria expandida: "¡Es basura! ¡Es una chapuza ! ... Pero lo vamos a hacer". Las empresas planeaban lanzar el estándar en la COMDEX de la primavera de 1985 , y muchas empresas de tarjetas de expansión y software anunciaron su apoyo. [3] [4]
La primera versión pública del estándar EMS, llamada EMS 3.0, se lanzó en 1985; sin embargo, EMS 3.0 casi no tuvo implementaciones de hardware antes de ser reemplazado por EMS 3.2. [1] EMS 3.2 utilizó una región de 64 KiB en los 384 KiB superiores ( área de memoria superior ) dividida en cuatro páginas de 16 KiB, que podrían usarse para mapear porciones de la memoria expandida. [1]
A su vez, EMS 3.2 fue mejorado por un grupo de otras tres empresas: AST Research, Quadram y Ashton-Tate, que crearon su propio estándar Enhanced EMS (EEMS). EEMS permitía que cualquier región de 16 KiB en la RAM inferior se asignara a la memoria expandida, siempre que no estuviera asociada con interrupciones o memoria de E/S dedicada, como tarjetas de red o de vídeo. De este modo, se podían conmutar programas completos dentro y fuera de la RAM adicional. EEMS también añadió soporte para dos conjuntos de registros de asignación. Estas características fueron utilizadas por el primer software multitarea de DOS, como DESQview . Lanzada en 1987, la especificación LIM EMS 4.0 incorporó prácticamente todas las características de EEMS. [1]
Una característica nueva añadida en LIM EMS 4.0 fue que las placas EMS podían tener múltiples conjuntos de registros de mapeo de páginas (hasta 64 conjuntos). Esto permitió una forma primitiva de multitarea DOS . Sin embargo, la salvedad era que el estándar no especificaba cuántos conjuntos de registros debería tener una placa, por lo que había una gran variabilidad entre las implementaciones de hardware a este respecto. [5]
La especificación de memoria expandida (EMS) es la especificación que describe el uso de la memoria expandida. Las funciones de EMS son accesibles a través de la interrupción de software 67h. Los programas que utilizan EMS deben primero establecer la presencia de un administrador de memoria expandida (EMM) instalado verificando si hay un controlador de dispositivo con el nombre de dispositivo EMMXXXX0 .
IBM desarrolló su propio estándar de memoria llamado Adaptador de Memoria Expandida (XMA); el controlador IBM DOS para ello era XMAEM.SYS. A diferencia de EMS, las placas de expansión IBM podían ser direccionadas tanto utilizando un modelo de memoria expandida como como memoria extendida . [6] Sin embargo, la interfaz de hardware de memoria expandida utilizada por las placas XMA es incompatible con EMS, [7] pero un controlador XMA2EMS.SYS proporcionaba emulación EMS para las placas XMA. [6] Las placas XMA se introdujeron por primera vez para los modelos de 1986 (renovados) del PC 3270. [7]
Esta inserción de una ventana de memoria en el espacio de direcciones periféricas se podía lograr originalmente sólo a través de placas de expansión específicas, conectadas al bus de expansión ISA del ordenador. Las placas de memoria expandida más famosas de la década de 1980 fueron AST RAMpage, IBM PS/2 80286 Memory Expansion Option, AT&T Expanded Memory Adapter y la Intel Above Board. Teniendo en cuenta el precio de la RAM durante ese período, hasta varios cientos de dólares por MiB, y la calidad y reputación de las marcas mencionadas anteriormente, una placa de memoria expandida era muy cara.
Más tarde, algunos chipsets de placa base de ordenadores basados en Intel 80286 implementaron un esquema de memoria expandida que no requería placas adicionales, en particular el chipset NEAT . Normalmente, los conmutadores de software determinaban cuánta memoria se debía utilizar como memoria expandida y cuánta como memoria extendida .
Una placa de memoria expandida, al ser un periférico de hardware, necesitaba un controlador de dispositivo de software , que exportaba sus servicios. Dicho controlador de dispositivo se denominaba administrador de memoria expandida . Su nombre era variable; las placas mencionadas anteriormente utilizaban REMM.SYS (AST), PS2EMM.SYS (IBM), AEMM.SYS (AT&T) y EMM.SYS (Intel) respectivamente. Más tarde, la expresión se asoció a soluciones solo de software que requerían el procesador Intel 80386 , por ejemplo QEMM de Quarterdeck , 386 MAX de Qualitas o el EMM386 predeterminado en MS-DOS, PC DOS y DR-DOS.
A partir de 1986, las funciones de gestión de memoria integradas del procesador Intel 80386 modelaron libremente el espacio de direcciones al ejecutar software de modo real heredado, lo que hizo innecesarias las soluciones de hardware. La memoria expandida se podía simular en el software.
El primer programa de gestión de memoria expandida (emulación) fue CEMM , disponible en septiembre de 1986 como una utilidad para el Compaq Deskpro 386. Una solución comercial popular y con buenas características fue QEMM de Quarterdeck. Un competidor fue 386 MAX de Qualitas . La funcionalidad se incorporó más tarde a MS-DOS 4.01 en 1989 y a DR DOS 5.0 en 1990, como EMM386 .
Los administradores de memoria expandida por software en general ofrecían funciones adicionales, pero estrechamente relacionadas. En particular, permitían utilizar partes del área de memoria superior (UMA) (los 384 KiB superiores del espacio de direcciones en modo real) llamadas bloques de memoria superior (UMB) y proporcionaban herramientas para cargar programas pequeños, generalmente programas residentes en el interior que se terminan y permanecen ("LOADHI" o "LOADHIGH").
La interacción entre la memoria extendida , la emulación de memoria expandida y los extensores DOS terminó siendo regulada por las especificaciones XMS, Virtual Control Program Interface (VCPI), DOS Protected Mode Interface (DPMI) y DOS Protected Mode Services (DPMS).
Ciertos programas de emulación, conocidos coloquialmente como LIMulators, no dependían en absoluto de las características de la placa base o del 80386. En su lugar, reservaban 64 KiB de la RAM base para la ventana de memoria expandida, donde copiaban datos hacia y desde la memoria extendida o el disco duro cuando los programas de aplicación solicitaban cambios de página. Esto era fácil de implementar mediante programación, pero el rendimiento era bajo. Esta técnica la ofrecían AboveDisk de Above Software y varios programas shareware .
También es posible emular EMS utilizando memoria XMS en CPU 286 utilizando utilidades de terceros como EMM286 (controlador .SYS).
El uso de la memoria expandida disminuyó en la década de 1990. El IBM AT Intel 80286 admitía 24 bits de espacio de direcciones (16 MiB) en modo protegido , y el 386 admitía direcciones de 32 bits, o 4 gigabytes (2 32 ) de RAM, 4096 veces el espacio direccionable del 8086 original. El propio DOS no admitía directamente el modo protegido, pero Microsoft desarrolló finalmente DPMI y se publicaron varios extensores de DOS basados en él. Los programas de DOS como Doom podían usar extensores como DOS/4G para ejecutarse en modo protegido mientras seguían usando la API de DOS . A principios de la década de 1990, nuevos sistemas operativos como Linux , Windows 9x , Windows NT , OS/2 y BSD/OS admitían el modo protegido "listo para usar". Estos y otros desarrollos similares hicieron que la memoria expandida fuera un concepto obsoleto.
Otras plataformas han implementado el mismo concepto básico (memoria adicional fuera del espacio de direcciones principal), pero de formas técnicamente incompatibles: