# Memoria convencional

En informática, la memoria convencional son los primeros 640 kibibytes de memoria, en computadoras IBM PC y compatibles.
Antes de las especificaciones como Expanded Memory Specification (EMS), Extended Memory Specification (XMS) e High Memory Area (HMA), las aplicaciones de modo real solo podían usar esta parte de la memoria. Incluso cuando la memoria extendida está presente, las aplicaciones de modo real tienen que ser especialmente programadas para usarla, implementando un sistema complejo de relaciones (overlays) usando memoria paginada, por lo tanto, muchas aplicaciones continuaron usando solamente memoria convencional.

## Historia

A finales de los años 1980, a medida que las aplicaciones DOS se volvieron más grandes y más complejas, se convirtió en una práctica común liberar tanta memoria convencional como fuera posible, moviendo drivers y programas Terminate and Stay Resident (TSR) dentro de los Upper Memory Blocks (UMB).
Para viejos sistemas operativos de modo real como MS-DOS, frecuentemente valía la pena afinar el sistema para cargar drivers y otros componentes del sistema en los UMB (trozos de memoria extendida remapeados en el Upper Memory Area o UMA) para así dejar libre tanta memoria convencional como fuera posible para poder correr grandes aplicaciones.
Con los sistemas operativos modernos y las máquinas de 32 bits, la distinción entre la memoria convencional y extendida es raramente relevante puesto que, en modo protegido, toda la memoria se puede alcanzar uniformemente.

## Barrera de los 640 KiB

La barrera de los 640 KiB es un aspecto de las IBM PC y las compatibles, cuando estaban trabajando bajo MS-DOS el cual solo podía direccionar hasta 640 KiB de memoria para las aplicaciones corrientes. Esto era debido a las limitaciones de IBM PC original, que usó CPU Intel 8088, y al mapa de memoria que fue diseñado por IBM para esta computadora.
El término se refiere al tamaño de la memoria convencional de la PC. Los 8088 y 8086 eran solamente capaces de direccionar 1024 KiB (1 MiB) de memoria (2$^{20}$ bytes), dado que estos chips ofrecían solamente 20 líneas de dirección. De estos 1024 KiB, la IBM reservó los 384 KiB superiores para propósitos del sistema, esta sección o área fue llamada UMA ("Área de Memoria Superior"). Esto dejó solamente los restantes 640 KiB más bajos para los programas y los datos del usuario. Al momento en que la IBM PC fue lanzada, en 1981, 640 KiB habrían parecido más que abundantes para el usuario típico, y tomó algunos años hasta que la mayoría de las nuevas PC incluso tenían toda esa memoria instalada. Cuando apareció la PC, la microcomputadora más popular existente, Apple II+, tenía solamente 64 KiB en la configuración más común y no se podía ampliar fácilmente más allá de esto. El valor de la compatibilidad de las generaciones descendientes de microcomputadoras todavía no era percibido tan claramente entonces como lo fue a mediados de los años 1980, de modo que probablemente pocas personas en la IBM o alguna otra parte esperaban que la arquitectura de la IBM PC duraría más de algunos años en el mercado.
Para mantener compatibilidad con sistemas operativos viejos, la barrera de los 640 KiB seguía siendo parte del diseño de la PC incluso después que el 8088 fuera reemplazado por el procesador Intel 286, que podía direccionar hasta 16 MiB de memoria. Hoy en día todavía está presente en compatibles del IBM PC cuando están corriendo MS-DOS, y todavía en las más modernas PC basadas en Windows, la memoria RAM sigue teniendo un "agujero" en el área entre 640 y 1024 kibibytes, que sin embargo es invisible, los programas de aplicación gracias a la paginación y a la memoria virtual.

## Superando la barrera

La barrera fue solamente superada con la llegada de los DOS extenders, que permitieron a las aplicaciones DOS correr en memoria extendida, pero estos no fueron utilizados muy extensamente fuera del área de videojuegos. Los primeros sistemas operativos de la PC en integrar esta tecnología fueron el DOS 3.31 de Compaq (vía CEMM) y Windows/386 2.1, ambos lanzados en 1988. Las aplicaciones Windows no sufrieron de la barrera de los 640 KiB.
Antes de los DOS extenders, si un usuario instalaba memoria adicional y deseaba usarla bajo DOS, primero tenía que instalar y configurar drivers para soportar la Expanded Memory Specification (EMS) o la Extended Memory Specification (XMS) para la RAM, y en la mayoría de los casos las aplicaciones solamente podían mover datos hacia afuera del espacio adicional, pero no usarla in-situ; esto hizo a la memoria más allá de la barrera de los 640 KiB lenta e incómoda para usar.
Una técnica usada en las primeras computadoras IBM XT con pantallas Monochrome Display Adapter (MDA) o Color Graphics Adapter (CGA), era agregar más memoria a la tarjeta madre y usar un chip decodificador de dirección por encargo de programmable read only memory (PROM) para hacer aparecer esta memoria en los 640 KiB; esto movió la barrera a 704 KiB.
Los gestores de memoria en los sistemas basados en el 386 (como QEMM o MemoryMax en DR-DOS) podían alcanzar el mismo efecto, agregando memoria convencional en los 640 KiB y moviendo la barrera a 704 KiB o a 736 KiB. En esta situación, se podría utilizar solamente el CGA, porque el Enhanced Graphics Adapter (EGA) usaba esta memoria para sí mismo.
El AllCard, una tarjeta add-on de Unidad de Manejo de Memoria (Memory Management Unit, MMU) para las computadoras de la clase XT, permitía a la memoria normal ser mapeada en el rango de direcciones A0000-EFFFF (hex), dando hasta 952 KiB para los programas de DOS. Programas como el Lotus 1-2-3, que accedían a la memoria de vídeo directamente, necesitaron ser parcheados para manejar esta disposición de memoria. Por lo tanto, la barrera de los 640 KiB fue eliminada con el costo de compatibilidad de hardware.

## Notas y referencias

* ↑ Este artículo (o una versión anterior) está basado originalmente en material de Free On-line Dictionary of Computing, utilizado con permiso. Actualícelo a discreción.
* ↑ http://www.textfiles.com/computers/pc869kb.txt
* ↑ Gestor de memoria, manejador de memoria o administración de memoria.
* Atkinson, C. (unknown date). "What is high memory, why do I care, how do I use it?". Retrieved, 2 de mayo de 2006.
* http://www.pcguide.com/ref/ram/logicHMA-c.html
* AllCard review, Personal Computer World, septiembre de 1986, pág. 138.