Memoria convencional - Conventional memory

Áreas de memoria de la familia IBM PC

En la gestión de memoria DOS , la memoria convencional , también llamada memoria base , son los primeros 640 kilobytes de memoria en una PC IBM o sistemas compatibles. Es la memoria de lectura y escritura directamente direccionable por el procesador para que la utilice el sistema operativo y los programas de aplicación. A medida que los precios de la memoria disminuyeron rápidamente, esta decisión de diseño se convirtió en una limitación en el uso de grandes capacidades de memoria hasta la introducción de sistemas operativos y procesadores que la hicieron irrelevante.

Barrera de 640 KB

Bloques de memoria IBM PC, PC / XT , 3270 PC y PCjr
Bloque 0 Primero 64 KB Memoria de usuario ordinaria hasta 64 KB (área de memoria baja)
1 bloque 2do 64 KB Memoria de usuario ordinaria hasta 128 KB
2 bloques 3. ° 64 KB Memoria de usuario ordinaria hasta 192 KB
3 bloques 4.o 64 KB Memoria de usuario ordinaria hasta 256 KB
4 bloques 5to 64 KB Memoria de usuario ordinaria hasta 320 KB
5 bloques 6. ° 64 KB Memoria de usuario ordinaria hasta 384 KB
6 bloques Séptimo 64 KB Memoria de usuario ordinaria hasta 448 KB
7 bloques Octavo 64 KB Memoria de usuario ordinaria hasta 512 KB
8 bloques Noveno 64 KB Memoria de usuario ordinaria hasta 576 KB
9 bloques 10. ° 64 KB Memoria de usuario ordinaria hasta 640 KB
Un bloque 11 ° 64 KB Memoria de video extendida ( EGA )
Bloque B 12. ° 64 KB Memoria de video estándar ( MDA / CGA )
Bloque C 13. ° 64 KB Expansión de ROM (XT, EGA, 3270 PC)
Bloque D 14 64 KB otro uso (cartuchos PCjr, LIM EMS )
Bloque E 15. ° 64 KB otro uso (cartuchos PCjr, LIM EMS)
Bloque F 16 ° 64 KB Sistema ROM-BIOS y ROM-BASIC

La barrera de 640 KB es una limitación arquitectónica de las PC compatibles con IBM PC . La CPU Intel 8088 , utilizada en la PC IBM original , pudo direccionar 1 MB (2 20  bytes), ya que el chip ofrecía 20 líneas de dirección . En el diseño de la PC, la memoria por debajo de 640 KB era para la memoria de acceso aleatorio en la placa base o en las placas de expansión, y se la denominaba área de memoria convencional.El primer segmento de memoria (64 KB) del área de memoria convencional se denomina memoria inferior o área de memoria baja . Los 384 KB restantes más allá del área de memoria convencional, denominada área de memoria superior (UMA), se reservaron para uso del sistema y dispositivos opcionales. UMA se utilizó para ROM BIOS , memoria adicional de solo lectura , extensiones de BIOS para unidades de disco fijas y adaptadores de video, memoria de adaptador de video y otros dispositivos de entrada y salida asignados en memoria . El diseño del IBM PC original colocó el mapa de memoria del Adaptador de gráficos en color (CGA) en UMA.

La necesidad de más RAM creció más rápido que las necesidades de hardware para utilizar las direcciones reservadas, lo que resultó en que la RAM eventualmente se mapeara en estas áreas superiores no utilizadas para utilizar todo el espacio direccionable disponible. Esto introdujo un "hueco" reservado (o varios huecos) en el conjunto de direcciones ocupadas por hardware que podría utilizarse para datos arbitrarios. Evitar tal agujero era difícil y feo y no era compatible con DOS ni con la mayoría de los programas que podían ejecutarse en él. Más tarde, el espacio entre los orificios se utilizaría como bloques de memoria superior (UMB).

Para mantener la compatibilidad con los sistemas operativos y aplicaciones más antiguos, la barrera de 640 KB siguió siendo parte del diseño de la PC incluso después de que el 8086/8088 fuera reemplazado por el procesador Intel 80286 , que podía manejar hasta 16 MB de memoria en modo protegido . La barrera de 1 MB también se mantuvo mientras el 286 se ejecutara en modo real , ya que DOS requería el modo real que usa los registros de segmento y desplazamiento de manera superpuesta, de modo que las direcciones con más de 20 bits no son posibles. Todavía está presente en los compatibles con IBM PC hoy en día si se ejecutan en modo real, como lo usa DOS. Incluso las PC Intel más modernas todavía tienen un área reservada entre 640 y 1024  KB . Sin embargo, esto es invisible para los programas (o incluso la mayoría del sistema operativo) en los sistemas operativos más nuevos (como Windows , Linux o Mac OS X ) que usan memoria virtual , porque no tienen conocimiento de las direcciones de memoria física en absoluto. En su lugar, operan dentro de un espacio de direcciones virtual, que se define independientemente de las direcciones RAM disponibles.

Algunas placas base cuentan con la opción "Memory Hole at 15 Megabytes" requerida para ciertas tarjetas de video VGA que requieren acceso exclusivo a un megabyte en particular para la memoria de video. Las tarjetas de video posteriores que utilizan el bus AGP (espacio de memoria PCI) pueden tener 256 MB de memoria con un tamaño de apertura de 1 GB .

Memoria adicional

Una técnica utilizada en las primeras computadoras IBM XT era instalar RAM adicional en el rango de direcciones de la memoria de video y llevar el límite hasta el inicio del Adaptador de pantalla monocromática (MDA). A veces, se requería software o un decodificador de direcciones personalizado para que esto funcionara. Esto movió la barrera a 704 KB (con MDA / HGC) o 736 KB (con CGA).

Los administradores de memoria en sistemas basados en 386 (como QEMM o MEMMAX (+ V) en DR-DOS ) podrían lograr el mismo efecto, agregando memoria convencional a 640 KB y moviendo la barrera a 704 KB (hasta el segmento B000, el comienzo de MDA / HGC) o 736 KB (hasta el segmento B800, el inicio de la CGA). En esta situación, sólo se podía utilizar CGA, porque la memoria de vídeo del Adaptador de gráficos mejorados (EGA) estaba inmediatamente adyacente al área de memoria convencional por debajo de la línea de 640 KB; la misma área de memoria no se pudo usar tanto para el búfer de cuadros de la tarjeta de video como para programas transitorios.

Las unidades de administración de memoria agregadas de All Computers, AllCard para XT y Chargecard para computadoras de clase 286 / 386SX, así como el complemento ECM (Extended Conventional Memory) de MicroWay permitieron que la memoria normal se mapeara en el A0000 -Rango de direcciones EFFFF ( hexadecimal ), que da hasta 952 KB para programas de DOS. Los programas como Lotus 1-2-3 , que accedían directamente a la memoria de vídeo, debían parchearse para manejar este diseño de memoria. Por lo tanto, la barrera de 640 KB se eliminó a costa de la compatibilidad del hardware.

También era posible usar la redirección de consola (ya sea especificando un dispositivo de consola alternativo como AUX: cuando se invoca inicialmente COMMAND.COM o usando CTTY más adelante) para dirigir la salida y recibir la entrada de una terminal tonta u otra computadora que ejecute un emulador de terminal . Suponiendo que el BIOS del sistema aún permitiera que la máquina se iniciara (que suele ser el caso al menos con BIOS para PC integradas), la tarjeta de video podría quitarse por completo y el sistema podría proporcionar un total de 960 KB de memoria DOS continua para programas. cargar.

Un uso similar fue posible en muchas computadoras compatibles con DOS, pero no con IBM, con un diseño de memoria no fragmentado, por ejemplo, el Victor 9000 / Sirius 1 o el Apricot PC que admitía hasta 896 KB de memoria continua de DOS para ser utilizada en su versión personalizada. de MS-DOS.

Software de controlador de DOS y TSR

La mayoría de los programas estándar escritos para DOS no necesitaban necesariamente 640 KB o más de memoria. En su lugar, el software de controlador y las utilidades denominadas programas Terminate and Stay Resident (TSR) se podrían utilizar además del software estándar de DOS. Estos controladores y utilidades suelen utilizar de forma permanente parte de la memoria convencional, lo que reduce el total disponible para los programas estándar de DOS.

Algunos controladores de DOS y TSR muy comunes que utilizan memoria convencional incluyen:

  • ANSI.SYS: compatibilidad con texto en color y diferentes resoluciones de texto
  • ASPIxDOS.SYS, ASPIDISK.SYS, ASPICD.SYS: todos deben estar cargados para que funcionen las unidades SCSI y los CDROM de Adaptec
  • DOSKEY.EXE : permite la recuperación de comandos de DOS escritos previamente usando la flecha hacia arriba
  • LSL.EXE, E100BODI.EXE (u otro controlador de red), IPXODI.EXE, NETX.EXE: todos deben estar cargados para el acceso a la letra de unidad del servidor de archivos NetWare
  • MOUSE.EXE: soporte para dispositivos de mouse en programas de DOS
  • MSCDEX.EXE: compatibilidad con el acceso a la unidad de CDROM y la letra de la unidad, que se utiliza en combinación con un controlador específico del fabricante independiente. Se necesita además de los controladores SCSI anteriores para acceder a un dispositivo de CDROM SCSI.
  • SBCONFIG.EXE: compatibilidad con el dispositivo de audio Sound Blaster 16 ; se utilizó un controlador con un nombre diferente para otras tarjetas de sonido, que también ocupaba la memoria convencional.
  • SMARTDRV.EXE : instale la memoria caché de la unidad para acelerar la lectura y escritura del disco; aunque podía asignar varios megabytes de memoria más allá de 640 kb para el almacenamiento en caché de la unidad, todavía necesitaba una pequeña porción de memoria convencional para funcionar.

Como se puede ver anteriormente, muchos de estos controladores y TSR podrían considerarse prácticamente esenciales para el funcionamiento completo del sistema. Pero en muchos casos el usuario de la computadora tuvo que tomar una decisión para decidir si podía ejecutar ciertos programas estándar de DOS o tener cargados todos sus controladores y TSR favoritos. Es probable que cargar la lista completa que se muestra arriba sea poco práctica o imposible, si el usuario también desea ejecutar un programa estándar de DOS.

En algunos casos, los controladores o TSR tendrían que descargarse de la memoria para ejecutar ciertos programas y luego volver a cargarlos después de ejecutar el programa. Para los controladores que no se pudieron descargar, las versiones posteriores de DOS incluyeron una capacidad de menú de inicio para permitir al usuario de la computadora seleccionar varios grupos de controladores y TSR para cargar antes de ejecutar ciertos programas DOS estándar de alto uso de memoria.

Bloques de memoria superior y carga alta

A medida que las aplicaciones de DOS crecieron y se volvieron más complejas a fines de la década de 1980 y principios de la de 1990, se convirtió en una práctica común liberar memoria convencional moviendo los controladores de dispositivo y los programas TSR a bloques de memoria superior (UMB) en el área de memoria superior (UMA) en el arranque. , con el fin de maximizar la memoria convencional disponible para aplicaciones. Esto tenía la ventaja de no requerir cambios de hardware y preservaba la compatibilidad de las aplicaciones.

Esta característica fue proporcionada por primera vez por productos de terceros como QEMM , antes de incorporarse a DR DOS 5.0 en 1990 y luego a MS-DOS 5.0 en 1991. La mayoría de los usuarios usaban el controlador EMM386 adjunto proporcionado en MS-DOS 5, pero los productos de terceros de empresas como QEMM también resultaron populares.

Al inicio, los controladores se pueden cargar en alto usando la directiva " DEVICEHIGH =", mientras que los TSR se pueden cargar en alto usando las directivas " LOADHIGH ", " LH " o " HILOAD ". Si la operación fallaba, el controlador o TSR se cargarían automáticamente en la memoria convencional normal en su lugar.

CONFIG.SYS , cargando ANSI.SYS en UMB, sin soporte EMS habilitado:

DEVICE=C:\DOS\HIMEM.SYS
DEVICE=C:\DOS\EMM386.EXE NOEMS
DEVICEHIGH=C:\DOS\ANSI.SYS

AUTOEXEC.BAT , cargando MOUSE, DOSKEY y SMARTDRV en UMB si es posible:

LH C:\DOS\MOUSE.EXE
LH C:\DOS\DOSKEY.EXE
LH C:\DOS\SMARTDRV.EXE

La capacidad de las versiones 5.0 y posteriores de DOS para mover su propio código del núcleo del sistema al área de memoria alta (HMA) a través del comando DOS = HIGH dio otro impulso a la memoria libre.

Optimización del controlador / TSR

Las placas de expansión de hardware podrían usar cualquier área de memoria superior para el direccionamiento de ROM, por lo que los bloques de memoria superiores eran de tamaño variable y estaban en diferentes ubicaciones para cada computadora, según el hardware instalado. Algunas ventanas de memoria superior pueden ser grandes y otras pequeñas. Cargar controladores y TSR en un nivel alto seleccionaría un bloque e intentaría encajar el programa en él, hasta que se encontrara un bloque donde encajaba, o iría a la memoria convencional.

Un aspecto inusual de los controladores y los TSR es que usarían diferentes cantidades de memoria convencional y / o superior, según el orden en que se cargaron. Esto podría usarse con ventaja si los programas se cargan repetidamente en diferentes órdenes y se verifica cuánta memoria queda libre después de cada permutación. Por ejemplo, si había un UMB de 50 KB y un UMB de 10 KB, y se cargaron programas que necesitaban 8 KB y 45 KB, los 8 KB podrían pasar al UMB de 50 KB, evitando que se cargue el segundo. Las versiones posteriores de DOS permitieron el uso de una dirección de carga específica para un controlador o TSR, para ajustar los controladores / TSR más estrechamente.

En MS-DOS 6.0, Microsoft introdujo MEMMAKER, que automatizó este proceso de coincidencia de bloques, igualando la funcionalidad que ofrecían los administradores de memoria de terceros . Esta optimización automática a menudo todavía no proporcionaba el mismo resultado que hacerlo a mano, en el sentido de proporcionar la mayor memoria convencional libre.

También, en algunos casos, compañías de terceros escribieron controladores multifunción especiales que combinarían las capacidades de varios controladores DOS estándar y TSR en un solo programa muy compacto que usaba solo unos pocos kilobytes de memoria. Por ejemplo, las funciones de controlador de mouse, controlador de CD-ROM, compatibilidad con ANSI, recuperación de comandos de DOSKEY y almacenamiento en caché de disco se combinarían en un solo programa, consumiendo solo 1-2 kilobytes de memoria convencional para el acceso normal al controlador / interrupción, y almacenar el resto del código del programa multifunción en la memoria EMS o XMS.

Extensores de DOS

La barrera solo se superó con la llegada de los extensores de DOS , que permitieron que las aplicaciones de DOS se ejecutaran en modo protegido de 16 o 32 bits , pero no se usaban mucho fuera de los juegos de computadora . Con un extensor DOS de 32 bits, un juego podría beneficiarse de un espacio de direcciones planas de 32 bits y el conjunto completo de instrucciones de 32 bits sin los prefijos de anulación de operando / dirección 66h / 67h. Los extensores de DOS de 32 bits requerían compatibilidad con el compilador (compiladores de 32 bits), mientras que XMS y EMS funcionaban con un compilador antiguo que apuntaba a aplicaciones DOS de modo real de 16 bits. Las dos especificaciones más comunes para los extensores de DOS fueron VCPI , y más tarde DPMI, compatible con Windows 3.x.

El extensor de DOS compatible con DPMI más notable puede ser DOS / 4GW , incluido en Watcom . Era muy común en juegos para DOS. Tal juego consistiría en un kernel DOS / 4GW de 32 bits, o un stub que cargue un kernel DOS / 4GW ubicado en la ruta o en el mismo directorio y un "ejecutable lineal" de 32 bits. Hay disponibles utilidades que pueden eliminar DOS / 4GW de dicho programa y permitir al usuario experimentar con cualquiera de los varios, y quizás mejorados, clones de DOS / 4GW.

Antes de los extensores de DOS, si un usuario instalaba memoria adicional y deseaba usarla en DOS, primero tenía que instalar y configurar controladores para admitir la especificación de memoria expandida (EMS) o la especificación de memoria extendida (XMS) y ejecutar programas que admitan uno de los siguientes. estas especificaciones.

EMS era una especificación disponible en todas las PC, incluidas las basadas en Intel 8086 e Intel 8088 , que permitía que el hardware adicional ingresara y saliera pequeños fragmentos de memoria ( conmutación de banco ) del espacio de direccionamiento en "modo real" (0x0400– 0xFFFF). Esto permitió que los programas DOS de modo real de 16 bits tuvieran acceso a varios megabytes de RAM a través de un agujero en la memoria real, típicamente (0xE000–0xEFFF). Entonces, un programa tendría que solicitar explícitamente que se acceda a la página antes de usarla. Estas ubicaciones de memoria se pueden utilizar de forma arbitraria hasta que se sustituyan por otra página. Esto es muy similar a la memoria virtual paginada moderna . Sin embargo, en un sistema de memoria virtual, el sistema operativo maneja todas las operaciones de paginación , mientras que la paginación era explícita con EMS.

XMS proporcionó un protocolo básico que permitía a los programas DOS de 16 bits cargar fragmentos de memoria extendida 80286 o 80386 en memoria baja (dirección 0x0400-0xFFFF). Un controlador XMS típico tuvo que cambiar al modo protegido para cargar esta memoria. El problema con este enfoque es que mientras está en modo protegido, no se pudieron realizar llamadas directas a DOS. La solución fue implementar un mecanismo de devolución de llamada, que requería un reinicio del 286. En el 286, esto era un problema importante. El Intel 80386 , que introdujo el " modo 8086 virtual ", permitió al kernel invitado emular el 8086 y ejecutar el sistema operativo host sin tener que forzar al procesador a volver al "modo real". HIMEM.SYS 2.03 y versiones posteriores utilizaron el modo irreal en las CPU 80386 y superiores, mientras que HIMEM.SYS 2.06 y versiones superiores utilizaron LOADALL para cambiar registros internos indocumentados en el 80286, mejorando significativamente la latencia de interrupciones al evitar cambios repetidos de modo real / modo protegido.

Windows instala su propia versión de HIMEM.SYS en DOS 3.3 y superior. Windows HIMEM.SYS lanza el proveedor de servicios XMS (n) .0 en modo protegido de 32 bits para el Administrador de máquinas virtuales de Windows, que luego proporciona servicios XMS (n-1) .0 a las cajas DOS y la máquina Windows de 16 bits (por ejemplo, DOS 7 HIMEM.SYS es XMS 3.0 pero ejecutar el comando 'MEM' en una ventana de Windows 95 DOS muestra información de XMS 2.0).

Ver también

Referencias

Otras lecturas