
En la gestión de memoria de DOS , la memoria expandida es un sistema de conmutación de bancos que proporcionaba memoria adicional a los programas de DOS más allá del límite de la memoria convencional (640 KiB).
La memoria expandida es un término genérico que engloba varias variantes tecnológicas incompatibles. La variante más utilizada fue la Especificación de Memoria Expandida ( EMS ), desarrollada conjuntamente por Lotus Development , Intel y Microsoft , por lo que a veces se la denominaba " LIM EMS ". LIM EMS tuvo 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 utilizaba 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 gestió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 MiB inferior. Finalmente, EEMS se incorporó a LIM EMS 4.0, que admitía hasta 32 MiB de memoria expandida y también ofrecía cierta compatibilidad con la multitarea de DOS. Sin embargo, IBM creó su propio estándar de memoria expandida llamado XMA .
El uso de memoria expandida se generalizó en juegos y programas empresariales como Lotus 1-2-3 desde finales de la década de 1980 hasta mediados de la década de 1990, pero su uso disminuyó a medida que los usuarios pasaron de DOS a sistemas operativos en modo protegido como Linux , IBM OS/2 y Microsoft Windows .
Fondo

El procesador 8088 del IBM PC y del IBM PC/XT puede direccionar un megabyte (MiB, o 2²⁰ bytes) de memoria. Heredó este límite del bus de direcciones externas de 20 bits (y de 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 están reservados para usos como la BIOS del sistema , la memoria de vídeo y la memoria en las tarjetas de expansión de periféricos.
Aunque el IBM PC AT , presentado en 1984, utiliza el chip 80286 que puede direccionar hasta 16 MiB de RAM como memoria extendida , solo puede hacerlo en modo protegido . La escasez de software compatible con el modo protegido (ninguna aplicación estándar de DOS puede ejecutarse en él) significó que el mercado seguía abierto a otra solución. [ 1 ]
Para aumentar el acceso a la memoria, se ideó un esquema de conmutación de bancos , donde solo se puede acceder a partes seleccionadas de la memoria adicional en un momento dado. Originalmente, se utilizaba una única ventana de memoria de 64 KiB ( 2¹⁶ bytes), denominada marco de página ; posteriormente, esto se hizo más flexible. Los programas se escriben de una manera específica para acceder a la memoria expandida. La ventana entre la memoria convencional y la memoria expandida se puede ajustar para acceder a diferentes ubicaciones dentro de la memoria expandida.
Tall Tree Systems realizó un primer intento de utilizar una técnica de conmutación de bancos con sus placas JRAM, [ 2 ] pero estas no tuvieron éxito. [ 1 ] (Posteriormente, Tall Tree Systems fabricó placas basadas en EMS utilizando la misma marca de JRAM. [ 3 ] )
Especificación de memoria ampliada (EMS)
Lotus Development , Intel y Microsoft colaboraron en el desarrollo del estándar EMS (también conocido como LIM EMS). La primera versión pública de EMS, la versión 3.0, permite el acceso a hasta 4 MiB de memoria expandida. Esta capacidad 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 admite funcionalidades adicionales.
Microsoft pensó que el cambio de banco era una medida provisional poco elegante y temporal, pero necesaria. Golpeando la mesa con el puño durante una entrevista, Bill Gates dijo sobre la memoria expandida: "¡Es basura! ¡Es una chapuza !… Pero lo vamos a hacer". Las empresas planearon lanzar el estándar en la COMDEX de primavera de 1985 , con muchas empresas de tarjetas de expansión y software anunciando su apoyo. [ 4 ] [ 5 ] AST Research , STB Systems , Persyst , Quadram y Tecmar diseñaron rápidamente tarjetas compatibles con EMS para competir con la tarjeta de expansión Above Board de Intel. A mediados de 1985, algunos ya llamaban a EMS un estándar de facto . [ 3 ]
La primera versión pública del estándar EMS, denominada EMS 3.0, se publicó en 1985; sin embargo, EMS 3.0 prácticamente no tuvo implementaciones de hardware antes de ser reemplazada por EMS 3.2. EMS 3.2 utiliza una región de 64 KiB en los 384 KiB superiores ( área de memoria superior ) dividida en cuatro páginas de 16 KiB, que se pueden usar para mapear porciones de la memoria expandida. [ 1 ]
Quadram, AST y Ashton-Tate crearon el estándar Enhanced EMS (EEMS). EEMS, un superconjunto de EMS 3.2, permite que cualquier región de 16 KiB en la RAM inferior se asigne a la memoria expandida, siempre que no esté asociada con interrupciones o memoria de E/S dedicada, como tarjetas de red o de vídeo. De este modo, se pueden conmutar programas completos entre la RAM adicional y la memoria expandida. EEMS también añadió compatibilidad con dos conjuntos de registros de asignación. Estas características son utilizadas por software multitarea de DOS primitivo, como DESQview . La especificación LIM EMS 4.0 de 1987 incorporó prácticamente todas las características de EEMS. [ 1 ]
Una nueva característica añadida en LIM EMS 4.0 fue que las placas EMS pueden tener múltiples conjuntos de registros de mapeo de páginas (hasta 64 conjuntos). Esto permite una forma primitiva de multitarea de DOS . Sin embargo, cabe señalar que el estándar no especifica cuántos conjuntos de registros debe tener una placa, por lo que existe una gran variabilidad entre las implementaciones de hardware en este aspecto. [ 6 ]
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, comprobando la existencia de un controlador de dispositivo con el nombre de dispositivo EMMXXXX0 .
Adaptador de memoria expandida (XMA)
IBM permaneció en silencio mientras la industria adoptaba ampliamente el estándar LIM. [ 3 ] PC Tech Journal escribió en febrero de 1986: "Esto debe ser vergonzoso para IBM... IBM no cumplió. Intel y sus socios sí". [ 7 ] La compañía desarrolló su propio estándar de memoria llamado Expanded Memory Adapter (XMA); el controlador de IBM DOS para él es XMAEM.SYS. A diferencia de EMS, las tarjetas de expansión de IBM se pueden direccionar tanto usando un modelo de memoria expandida como como memoria extendida . [ 8 ] Sin embargo, la interfaz de hardware de memoria expandida utilizada por las tarjetas XMA es incompatible con EMS, [ 9 ] pero un controlador XMA2EMS.SYS proporciona emulación de EMS para tarjetas XMA. [ 8 ] Las tarjetas XMA se introdujeron por primera vez para los modelos de 1986 (renovados) de la PC 3270. [ 9 ]
Implementaciones
Placas de expansión

La inserción de una ventana de memoria en el espacio de direcciones de los periféricos solo era posible originalmente mediante tarjetas de expansión específicas, conectadas al bus de expansión ISA del ordenador. Algunas tarjetas de memoria expandida famosas de la década de 1980 fueron AST RAMpage, IBM PS/2 80286 Memory Expansion Option, AT&T Expanded Memory Adapter e Intel Above Board . Dado el precio de la RAM en aquella época, que alcanzaba varios cientos de dólares por MiB, y la calidad y reputación de las marcas mencionadas, una tarjeta de memoria expandida resultaba muy cara.
chipsets de la placa base
Posteriormente, algunos chipsets de placas base de ordenadores basados en Intel 80286 implementaron un sistema de memoria expandida que no requería tarjetas adicionales, en particular el chipset NEAT . Normalmente, unos interruptores de software determinaban cuánta memoria debía utilizarse como memoria expandida y cuánta como memoria extendida .
Controladores de dispositivos
Una tarjeta de memoria expandida, al ser un periférico de hardware, requería un controlador de dispositivo de software que exportara sus servicios. Dicho controlador se denominaba administrador de memoria expandida . Su nombre variaba; las tarjetas mencionadas anteriormente utilizaban REMM.SYS (AST), PS2EMM.SYS (IBM), AEMM.SYS (AT&T) y EMM.SYS (Intel), respectivamente. Posteriormente, la expresión se asoció con soluciones exclusivamente 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 .
Emulación de software
A partir de 1986, las funciones de gestión de memoria integradas del procesador Intel 80386 permitieron modelar libremente el espacio de direcciones al ejecutar software heredado en modo real, lo que hizo innecesarias las soluciones de hardware. La memoria ampliada podía simularse mediante software.
El primer programa de software para la gestión de memoria expandida (emulación) fue CEMM , disponible en septiembre de 1986 como utilidad para el Compaq Deskpro 386. Una solución comercial popular y completa fue QEMM de Quarterdeck. Otro competidor fue 386 MAX de Qualitas . Posteriormente, su funcionalidad se incorporó a MS-DOS 4.01 en 1989 y a DR DOS 5.0 en 1990, bajo el nombre de EMM386 .
Los gestores de memoria expandida por software generalmente ofrecían funcionalidades adicionales, aunque 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), denominadas bloques de memoria superior (UMB), y proporcionaban herramientas para cargar programas pequeños, normalmente programas que terminan y permanecen residentes ("LOADHI" o "LOADHIGH").
La interacción entre la memoria extendida , la emulación de memoria expandida y los extensores de DOS terminó estando regulada por las especificaciones XMS, Virtual Control Program Interface (VCPI), DOS Protected Mode Interface (DPMI) y DOS Protected Mode Services (DPMS).
Algunos programas de emulación, conocidos coloquialmente como LIMulators, no dependían en absoluto de las características de la placa base ni del microcontrolador 80386. En su lugar, reservaban 64 KiB de la RAM base para la ventana de memoria expandida, donde copiaban datos desde y hacia la memoria extendida o el disco duro cuando las aplicaciones solicitaban cambios de página. Esto era fácil de implementar mediante programación, pero el rendimiento era bajo. Esta técnica la ofrecía AboveDisk de Above Software y varios programas shareware .
También es posible emular EMS utilizando memoria XMS en CPU 286 mediante utilidades de terceros como EMM286 (controlador .SYS).
Rechazar
El uso de la memoria expandida disminuyó en la década de 1990. Los nuevos sistemas operativos como Linux , Windows 9x , Windows NT , OS/2 y BSD/OS ofrecían soporte para el modo protegido de forma nativa. Estos y otros avances similares convirtieron la memoria expandida en un concepto obsoleto.
Conceptos similares
Otras plataformas han implementado el mismo concepto básico (memoria adicional fuera del espacio de direcciones principal), pero de maneras técnicamente incompatibles:
- El almacenamiento expandido era una característica de los mainframes de IBM que proporcionaba memoria adicional fuera de la memoria principal del sistema, introducida por primera vez con la serie de mainframes de gama alta IBM 3090 en 1985. [ 10 ] Las aplicaciones no podían acceder directamente al almacenamiento expandido; una característica de MVS conocida como "servicios de ventana" permitía a las aplicaciones asignar ventanas móviles al almacenamiento expandido dentro de su propio espacio de direcciones. También existía una característica de "movimiento de datos" que podía invocarse para mover datos entre la memoria principal (almacenamiento central) y el almacenamiento expandido; posteriormente, se introdujo una "Instalación de movimiento de datos asíncrono" (ADMF), que permitía a las aplicaciones solicitar que se movieran datos entre ambos en segundo plano, mientras realizaban otros procesos. A mediados de la década de 1990, el almacenamiento expandido había dejado de ser una memoria físicamente separada y se había convertido simplemente en una división lógica dentro de la memoria del sistema impuesta por el firmware ; pero no fue hasta el lanzamiento de z/VM 6.4 en noviembre de 2016 que IBM finalmente eliminó todo el soporte para el almacenamiento expandido de sus sistemas operativos para mainframes. [ 11 ]
- Las Extensiones de Ventana de Dirección (AWE) son una función conceptualmente similar en Microsoft Windows, que permite a las aplicaciones de 32 bits acceder a más memoria que los 2-4 GB que caben en un espacio de direcciones de 32 bits. Aunque las versiones actuales de Windows aún la admiten, su uso ha sido reemplazado por las aplicaciones de 64 bits, que pueden acceder directamente a más de 4 GB de memoria.
- La memoria virtual crea la ilusión de memoria disponible utilizando, por ejemplo, almacenamiento en disco .
Véase también
- Memoria convencional
- Gestión de memoria de DOS
- Memoria extendida (XMS)
- Área de memoria alta (HMA)
- Superposición (programación)
- Área de memoria superior (UMA)
- Especificación de importación global de EMM (GEMMIS)
- Segmentación de memoria x86
- Extensiones de ventana de direcciones (AWE)
- Extensión de dirección física (PAE)
- Espacio de direcciones lateral en el ordenador doméstico Acorn BBC Micro
Referencias
- 1 2 3 4 Mendelson, Edward (1989-12-12). "Una ranura llena de RAM" . PC Magazine . Vol. 8, n.º 21. Ziff Davis Publishing Co. págs. 169–. Archivado del original el 8 de febrero de 2020. Recuperado el 8 de febrero de 2020 .
- ↑ "Hoja de datos del producto de Tall Tree Systems" (Folleto). Tall Tree Systems. Octubre de 1983.
- 1 2 3 Maremaa, Tom (17 de junio de 1985). "Los fabricantes de tableros se suman al nuevo estándar" . InfoWorld . Vol. 7, n.º 24 , págs. 30-34 . Recuperado el 1 de mayo de 2025 .
- ↑ Machrone, Bill (14 de mayo de 1985). "El esquema de memoria supera los 640K" . PC Magazine . Vol. 4, n.º 10. Ziff Davis Publishing Co. pág. 33. Consultado el 28 de octubre de 2013 .
- ↑ "Los fracasos tecnológicos más memorables" . PC Magazine . Enero de 2008. págs. 88–89 . Consultado el 5 de septiembre de 2020 .
- ↑ Rosch, Winn L. (1989-12-12). "EMS 4.0: El estándar que no fue" . PC Magazine . Vol. 8, n.º 21. Ziff Davis Publishing Co. pp. 174–175 . Archivado del original el 8 de febrero de 2020. Consultado el 8 de febrero de 2020 .
- ↑ Fastie, Will (febrero de 1986). "Impresiones de COMDEX" . PC Tech Journal . Vol. 4, n.º 2, págs. 11-12 . Consultado el 15 de marzo de 2026 .
- 1 2 "Tutorial general sobre las diversas formas de memoria" . Microsoft . Archivado del original el 22 de octubre de 2012.
- 1 2 Welch, Marc J. (1986-04-14). "3270 Demand Not Expected To Rise" . InfoWorld . Vol. 8, no. 15. InfoWorld Media Group, Inc. p. 5. ISSN 0199-6649 . Archivado del original el 2020-02-08 . Recuperado el 2020-02-08 .
- ↑ Sakaki, M.; Samukawa, H.; Honjou, N. (1988). "Utilización eficaz del almacenamiento virtual grande del IBM 3090 en los cálculos numéricamente intensivos de orbitales moleculares ab initio" . IBM Systems Journal . 27 (4): 528– 540. doi : 10.1147/sj.274.0528 . ISSN 0018-8670 .
- ↑ "IBM: Configuración del almacenamiento" . www.vm.ibm.com . 29 de agosto de 2006. Consultado el 3 de mayo de 2023 .
Lecturas adicionales
- Especificación de memoria expandida . Versión 4.0. Lotus , Intel , Microsoft . Octubre de 1987. 300275-005. Archivado del original el 8 de febrero de 2020. Consultado el 8 de febrero de 2020 .
- Tischer, Michael (1989). Programación de sistemas de PC para desarrolladores . Ábaco. ISBN 1-55755-036-0.
- Borrett, Lloyd Robert (enero-febrero de 1989). "Entendiendo EMS 4.0" . Technical Cornucopia . Archivado del original el 8 de febrero de 2020. Recuperado el 8 de febrero de 2020 .
- Gestión de memoria X86
- Gestión de memoria de DOS
- Expansión de memoria