stringtranslate.com

Memoria convencional

Áreas de memoria de la familia IBM PC

En la gestión de memoria de DOS , la memoria convencional , también llamada memoria base , son los primeros 640 kilobytes de la memoria en IBM PC o sistemas compatibles. Es la memoria de lectura y escritura a la que el procesador puede acceder directamente 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

La barrera de los 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 , podía direccionar 1 MB (2 20  bytes), ya que el chip ofrecía 20 líneas de dirección . En el diseño del PC, la memoria por debajo de 640 KB estaba destinada a la memoria de acceso aleatorio en la placa base o en las placas de expansión y se 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, llamada área de memoria superior (UMA), estaban reservados para uso del sistema y dispositivos opcionales. UMA se utilizó para la ROM BIOS , memoria adicional de solo lectura , extensiones de BIOS para unidades de disco fijas y adaptadores de video, memoria de adaptadores de video y otros dispositivos de entrada y salida mapeados en memoria . El diseño de la PC IBM 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 del hardware para utilizar las direcciones reservadas, lo que resultó en que la RAM finalmente se asignara a estas áreas superiores no utilizadas para utilizar todo el espacio direccionable disponible. Esto introdujo un "agujero" reservado (o varios agujeros) en el conjunto de direcciones ocupadas por el hardware que podría usarse para datos arbitrarios. Evitar ese 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 agujeros se utilizaría como bloques de memoria superiores (UMB).

Para mantener la compatibilidad con sistemas operativos y aplicaciones más antiguos, la barrera de los 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 direccionar hasta 16 MB de memoria en modo protegido . La barrera de 1 MB también se mantuvo mientras el 286 estuviera funcionando en modo real , ya que DOS requería el modo real que utiliza 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 las PC compatibles con IBM hoy en día si se ejecutan en modo real, como el que utiliza DOS. Incluso los PC Intel más modernos todavía tienen reservada una superficie de entre 640 y 1024  KB . [3] [4] Sin embargo, esto es invisible para los programas (o incluso para la mayoría de los sistemas operativos) en sistemas operativos más nuevos (como Windows , Linux o Mac OS X ) que usan memoria virtual , porque no tienen conocimiento de la memoria física. direcciones en absoluto. En cambio, operan dentro de un espacio de direcciones virtuales, que se define independientemente de las direcciones RAM disponibles. [5]

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 fue instalar RAM adicional en el rango de direcciones de la memoria de video y aumentar el límite hasta el inicio del Adaptador de pantalla monocromática (MDA). A veces se necesitaba 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). [6] [7]

Los administradores de memoria en sistemas basados ​​en 386 (como QEMM o MEMMAX (+V) en DR-DOS ) podrían lograr el mismo efecto, añadiendo memoria convencional a 640 KB y moviendo la barrera a 704 KB (hasta el segmento B000, el inicio de MDA/HGC) o 736 KB (hasta el segmento B800, el inicio del CGA). [7] Sólo se podía usar CGA en esta situación, porque la memoria de video del Adaptador de gráficos mejorado (EGA) estaba inmediatamente adyacente al área de memoria convencional debajo de la línea de 640 KB; No se pudo utilizar la misma área de memoria tanto para el frame buffer de la tarjeta de video como para programas transitorios.

Las unidades de administración de memoria adicionales de All Computers, AllCard para XT- [8] [9] y Chargecard [10] para computadoras de clase 286/386SX, así como la placa adicional ECM (memoria convencional extendida) de MicroWay [11] permitió que la memoria normal se asignara al rango de direcciones A0000–EFFFF ( hexadecimal ), lo que proporciona hasta 952 KB para programas de DOS. Programas como Lotus 1-2-3 , que accedían directamente a la memoria de vídeo, necesitaban parches para manejar este diseño de memoria. Por lo tanto, se eliminó la barrera de los 640 KB a costa de la compatibilidad del hardware. [10]

También era posible usar la redirección de consola [12] (ya sea especificando un dispositivo de consola alternativo como AUX: al invocar inicialmente COMMAND.COM o usando CTTY más adelante) para dirigir la salida y recibir entradas desde una terminal tonta u otra computadora ejecutando un emulador de terminal . Suponiendo que el BIOS del sistema aún permitiera que la máquina arrancara (lo que suele ser el caso al menos con los BIOS para PC integradas), la tarjeta de video en una computadora llamada sin cabeza podría retirarse por completo y el sistema podría proporcionar un total de 960 KB. de memoria DOS continua para cargar programas.

Un uso similar era posible en muchas computadoras compatibles con DOS pero no compatibles con IBM con un diseño de memoria no fragmentada, por ejemplo, sistemas de bus SCP S-100 equipados con su tarjeta CPU 8086 CP-200B y hasta dieciséis tarjetas de memoria SCP 110A (con 64 KB de RAM en cada uno de ellos) para un total de hasta 1024 KB (sin tarjeta de video, pero utilizando la redirección de la consola y después de mapear la ROM de arranque/BIOS), [13] el Victor 9000 / Sirius 1 que admitía hasta 896 KB, o la PC Apricot con más memoria DOS continua para usar 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, se podrían utilizar software de controlador y utilidades denominados programas residentes de terminación y permanencia (TSR), además del software DOS estándar. Estos controladores y utilidades normalmente utilizaban parte de la memoria convencional de forma permanente, lo que reducía el total disponible para los programas estándar de DOS.

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

Como se puede ver arriba, 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 tenía que elegir entre poder ejecutar ciertos programas estándar de DOS o tener cargados todos sus controladores y TSR favoritos. Cargar la lista completa que se muestra arriba probablemente no sea práctico o imposible, si el usuario también desea ejecutar un programa DOS estándar.

En algunos casos, sería necesario descargar los controladores o TSR de la memoria para ejecutar ciertos programas y luego volver a cargarlos después de ejecutar el programa. Para los controladores que no se podían descargar, las versiones posteriores de DOS incluían 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 de DOS estándar de alto uso de memoria.

Bloques de memoria superiores y carga alta

A medida que las aplicaciones DOS crecieron y se volvieron más complejas a finales de los 80 y principios de los 90, 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 las 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 integrarse en DR DOS 5.0 en 1990 y luego en MS-DOS 5.0 en 1991. La mayoría de los usuarios utilizaron 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ía automáticamente en la memoria convencional.

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

DISPOSITIVO=C:\DOS\HIMEM.SYSDISPOSITIVO=C:\DOS\EMM386.EXE NOEMASDISPOSITIVO ALTO=C:\DOS\ANSI.SYS

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

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

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

Optimización de controladores y TSR

Las placas de expansión de hardware podían usar cualquiera del á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. Al cargar controladores y TSR en un nivel alto, se elegiría un bloque y se intentaría encajar el programa en él, hasta que se encontrara un bloque donde encajara, o iría a la memoria convencional.

Un aspecto inusual de los controladores y 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 cargaran repetidamente en diferentes órdenes y se verificara cuánta memoria quedaba libre después de cada permutación. Por ejemplo, si había una UMB de 50 KB y una UMB de 10 KB, y se cargaban programas que necesitaban 8 KB y 45 KB, los 8 KB podrían ir a la UMB de 50 KB, impidiendo que se cargara la segunda. Las versiones posteriores de DOS permitieron el uso de una dirección de carga específica para un controlador o TSR, para unir mejor los controladores/TSR.

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

Además, en algunos casos, empresas de terceros escribieron controladores multifunción especiales que combinarían las capacidades de varios controladores estándar de DOS y TSR en un único programa muy compacto que utilizaba sólo unos pocos kilobytes de memoria. Por ejemplo, las funciones de controlador de mouse, controlador de CD-ROM, soporte ANSI, recuperación de comandos DOSKEY y almacenamiento en caché de disco se combinarían en un solo programa, consumiendo sólo 1 a 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 sólo 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 utilizaron mucho fuera de los juegos de ordenador . Con un extensor de DOS de 32 bits, un juego podría beneficiarse de un espacio de direcciones plano de 32 bits y del conjunto completo de instrucciones de 32 bits sin los prefijos de anulación de direcciones/operandos 66h/67h. Los extensores de DOS de 32 bits requerían compatibilidad con compiladores (compiladores de 32 bits), mientras que XMS y EMS trabajaban con un compilador antiguo destinado a aplicaciones DOS de 16 bits en modo real. Las dos especificaciones más comunes para 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 , que se envía con Watcom . Era muy común en los juegos para DOS. Un juego de este tipo consistiría en un kernel DOS/4GW de 32 bits o un código auxiliar que carga un kernel DOS/4GW ubicado en la ruta o en el mismo directorio y un "ejecutable lineal" de 32 bits. Hay utilidades disponibles 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 admitieran una de ellas. estas especificaciones.

EMS era una especificación disponible en todas las PC, incluidas las basadas en Intel 8086 e Intel 8088 , que permitía al hardware adicional paginar pequeños fragmentos de memoria dentro y fuera ( cambio de banco ) del espacio de direcciones en "modo real" (0x0400– 0xFFFF). Esto permitió que los programas DOS en modo real de 16 bits accedieran a varios megabytes de RAM a través de un agujero en la memoria real, normalmente (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 podrían usarse arbitrariamente hasta que sean reemplazadas 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 que programas DOS de 16 bits cargaran fragmentos de memoria extendida 80286 o 80386 en memoria baja (dirección 0x0400–0xFFFF). Un controlador XMS típico tenía que cambiar al modo protegido para poder cargar esta memoria. El problema con este enfoque es que mientras estaba en modo protegido 286, no se podían realizar llamadas directas a DOS. La solución fue implementar un mecanismo de devolución de llamada, que requería reiniciar el 286. En el 286, esto fue un problema importante. El Intel 80386 , que introdujo el " modo virtual 8086 ", permitió que el kernel invitado emulara el 8086 y ejecutara el sistema operativo host sin tener que forzar al procesador a volver al "modo real". HIMEM.SYS 2.03 y superiores usaron el modo irreal en las CPU 80386 y superiores, mientras que HIMEM.SYS 2.06 y superiores usaron LOADALL para cambiar registros internos no documentados en el 80286, lo que mejoró significativamente la latencia de interrupción al evitar cambios repetidos de modo real/modo protegido. [14]

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

Ver también

Referencias

  1. ^ Norton, Peter (1986). Dentro de la PC IBM, revisada y ampliada, Brady. ISBN  0-89303-583-1 , pág. 108.
  2. ^ Patente estadounidense 4.926.322 : emulación de software de memoria conmutada por banco utilizando un monitor DOS virtual y gestión de memoria paginada , Fig. 1
  3. ^ Yao, Jiewen; Zimmer, Vincent J. (febrero de 2015). "Informe técnico: un recorrido más allá del diseño de mapas de memoria BIOS en UEFI BIOS" (PDF) . Corporación Intel . Archivado desde el original (PDF) el 30 de septiembre de 2015 . Consultado el 25 de agosto de 2016 .
  4. ^ Russinovich, Mark Eugenio ; Salomón, David A.; Ionescu, Álex (2012). Partes internas de Windows . vol. Parte 2 (6ª ed.). Prensa de Microsoft . pag. 322. Observe el espacio en el rango de direcciones de memoria desde la página 9F000 hasta la página 100000...
  5. ^ Richter, Jeffrey. Aplicaciones de programación para Microsoft Windows . págs. 435 y siguientes.
  6. ^ Atkinson, Cy (2001). "¿Qué es High Memory, por qué me importa y cómo puedo utilizarla?". San José, California, Estados Unidos. Archivado desde el original el 3 de marzo de 2016 . Consultado el 13 de marzo de 2017 .
  7. ^ ab Paul, Matthias R. (30 de julio de 1997). NWDOS-TIPs: consejos y trucos para Novell DOS 7, con Blick auf undokumentierte Detalles, errores y soluciones [NWDOSTIPs: consejos y trucos para Novell DOS 7, con especial atención a detalles, errores y soluciones no documentados ]. MPDOSTIP (en alemán) (3 ed.). Archivado desde el original el 6 de junio de 2016 . Consultado el 6 de junio de 2016 .(NB. NWDOSTIP.TXT es un trabajo completo sobre Novell DOS 7 y OpenDOS 7.01 , que incluye la descripción de muchas características e componentes internos no documentados. Es parte de la colección MPDOSTIP.ZIP aún más grande del autor mantenida hasta 2001 y distribuida en muchos sitios en la hora. El enlace proporcionado apunta a una versión anterior convertida a HTML del archivo NWDOSTIP.TXT.)
  8. ^ Petzold, Charles (1986). "Más opciones para ampliar las dimensiones de la memoria". Revista PC . vol. 5, núm. 11. ISSN  0888-8507.
  9. ^ "Revisión de AllCard". Mundo de las computadoras personales . Septiembre de 1986. p. 138.
  10. ^ ab Zerbe, Klaus (noviembre de 1987). Burgwitz, Andreas (ed.). "Speicher-Kredit - Todas las tarjetas de crédito para AT". c't-magazin für computertechnik . Prüfstand (en alemán). vol. 1987, núm. 11. Verlag Heinz Heise GmbH & Co. KG . págs.58, 60. ISSN  0724-8679.
  11. ^ Petzold, Charles (16 de septiembre de 1986). "Destructor de números / ECM". Revista PC . Tableros aceleradores. vol. 5, núm. 15. págs. 148, 150. ISSN  0888-8507. Archivado desde el original el 3 de marzo de 2020 . Consultado el 3 de marzo de 2020 .
  12. ^ Guía del usuario de Kontron - COMe-cBTi6R. Revisión del documento 1.0. Kontrón . 2021. págs. 37, 60, 64. Archivado desde el original el 23 de septiembre de 2023 . Consultado el 23 de septiembre de 2023 .(89 páginas)
  13. ^ Paterson, Tim (24 de noviembre de 2007). "La primera máquina DOS". Tonterías de DosMan . Archivado desde el original el 18 de septiembre de 2021 . Consultado el 23 de diciembre de 2021 . IBM también reintrodujo limitaciones de memoria que había evitado específicamente al diseñar la [tarjeta] CPU 8086. Para las computadoras S-100 , una alternativa de bajo costo al uso de una terminal de computadora normal era usar una tarjeta de video. La tarjeta de video, sin embargo, consumió parte del espacio de direcciones de la memoria. La ROM de arranque normalmente también consumiría espacio de direcciones. Los sistemas SCP fueron diseñados para usarse con una terminal y la ROM de inicio se podía desactivar después del inicio. Esto hizo que todo el espacio de direcciones de memoria de 1 MB estuviera disponible para la RAM. IBM, por otro lado, había limitado el espacio de direcciones en su PC a 640 KB de RAM debido al video y la ROM de arranque/BIOS. Esta limitación ha sido denominada "barrera DOS 640K", pero no tenía nada que ver con DOS . Microsoft aprovechó al máximo la capacidad del sistema SCP . En 1988, años después del cierre de SCP, todavía estaban usando el sistema SCP para una tarea que sólo él podía realizar ("vincular al enlazador"). Su máquina estaba equipada con 1 MB completo de RAM: 16 de las tarjetas de 64 KB. Esa máquina no pudo retirarse hasta que se desarrollaron herramientas de software de 32 bits para el microprocesador 386 de Intel .
  14. ^ "HIMEM.SYS, modo irreal y LOADALL | Museo OS/2".
  15. ^ "Descripción general de la funcionalidad de gestión de memoria en MS-DOS". Soporte.microsoft.com. 2003-05-12 . Consultado el 13 de agosto de 2012 .

Otras lecturas