En la administración de memoria de DOS , el área de memoria alta ( HMA ) es el área de RAM que consta de los primeros 65520 bytes por encima del megabyte en una computadora IBM AT o compatible.
En modo real , la arquitectura de segmentación de Intel 80286 y procesadores posteriores identifica ubicaciones de memoria con un segmento de 16 bits y un desplazamiento de 16 bits, que se resuelve en una dirección física mediante (segmento) × 16 + (desplazamiento). Aunque está destinado a abordar solo 1 Megabyte (MB) (2 20 bytes) de memoria, el segmento: direcciones de desplazamiento en FFFF:0010
y más allá de la memoria de referencia más allá de 1 MB ( FFFF0 + 0010 = 100000
). Por lo tanto, este modo puede abordar los primeros 65520 bytes de memoria extendida como parte del rango de 64 KB, comenzando 16 bytes antes de la marca de 1 MB, FFFF:0000 (0xFFFF0)
hasta FFFF:FFFF (0x10FFEF)
. Los procesadores Intel 8086 y 8088 , con solo 1 MB de memoria y solo 20 líneas de dirección , envueltas en el bit 20, por lo que la dirección FFFF:0010
era equivalente a 0000:0000
. [1]
Para permitir la ejecución de programas DOS existentes que se basaban en esta característica para acceder a poca memoria en sus computadoras IBM PC AT más nuevas , IBM agregó circuitos especiales en la placa base para simular el ajuste. Este circuito era una puerta lógica simple que podía desconectar la línea de direccionamiento número 21 del microprocesador, A20 , del resto de la placa base. Esta puerta se podía controlar, inicialmente a través del controlador del teclado , para permitir la ejecución de programas que querían acceder a toda la RAM. [1]
Los denominados manejadores A20 podrían controlar el modo de direccionamiento dinámicamente, [1] permitiendo así que los programas se carguen en la región de 1024–1088 KB y se ejecuten en modo real. [1] El primer usuario de HMA entre los productos de Microsoft fue Windows / 286 2.1 en 1988, que introdujo el controlador de dispositivo HIMEM.SYS . A partir de 1990 con Digital Research 's DR DOS 5.0 [2] (a través de config.sys HIDOS=ON ) y desde 1991 con MS-DOS 5.0 [2] (vía DOS=HIGH), partes del sistema operativo del BIOS y el núcleo se podrían cargar en el HMA como bueno, [2] [3] liberando hasta 46 KB de memoria convencional . [1] Otros componentes, como controladores de dispositivo y TSR , podrían al menos cargarse en el área de memoria superior (UMA), pero no en el HMA. En DOS 5.0 y superior, con DOS=HIGH, el sistema también intentó mover los búferes de disco al HMA. [3] Bajo DR DOS 6.0 (1991) y superior, los búferes de disco (a través de HIBUFFERS, y más tarde también BUFFERSHIGH), partes del procesador de comandos COMMAND.COM , así como varios controladores especiales auto-reubicables como KEYB , NLSFUNC y SHARE podrían cargarse en el HMA también (usando su /MHopción), liberando así aún más memoria convencional y memoria superior para que funcione el software DOS convencional. [1] TASKMAX parece haber reubicado partes de sí mismo en el HMA también. [4] [5] Novell 's NLCACHE de NetWare Lite y las primeras versiones de NWCACHE de NetWare personal y Novell DOS 7 podría utilizar el HMA también. [6] [7] [5] Bajo MS-DOS / PC DOS, aprox. La porción compartida de 2 KB de COMMAND.COM se puede reubicar en el HMA, [8] así como en los mapas de bits DISPLAY.SYS para las páginas de códigos preparadas . [8] Bajo MS-DOS 6.2 (1993) y superior, un ca. La porción de 5 KB de DBLSPACE.BIN / DRVSPACE.BIN puede coexistir con DOS en el HMA (a menos que se invoque DBLSPACE / DRVSPACE /NOHMA ). [3] [9] Bajo PC DOS 7.0 (1995) y 2000 , DOSKEY se carga en el HMA (si está disponible), [10] y SHARE también se puede cargar en el HMA (a menos que /NOHMAse dé su opción). [10] Bajo MS-DOS 7.0 (1995) a 8.0 (2000), partes del HMA también se utilizan como un bloc de notas para mantener una estructura de datos en crecimiento que registra varias propiedades de los controladores cargados en modo real. [5] [11]
Ver también
- Baja memoria (los primeros 64 KB de memoria)
- Memoria extendida (XMS)
- Memoria expandida (EMS)
- Modo irreal
- Rebasar
- Reubicación del límite de párrafo
- Reubicación de compensación intrasegmento
- SHELLHIGH (directiva CONFIG.SYS) SIZE = parámetro xxxx para anular la preasignación predeterminada de HMA (solo DR-DOS 7.02 y superior) [12]
- HMAREA (directiva CONFIG.SYS) para especificar el segmento HMA (solo PTS-DOS), similar al parámetro DR DOS HIDOS.SYS / BDOS = xxxx
Referencias
- ↑ a b c d e f Paul, Matthias R. (2 de febrero de 2002). "Treiber dynamisch nachladen (Intra-Segment-Offset-Relokation zum Laden von TSRs in die HMA)" [Carga de controladores dinámicamente ( Reubicación de offset intrasegmento para cargar TSR en el HMA)] (en alemán). Grupo de noticias : de.comp.os.msdos . Archivado desde el original el 9 de septiembre de 2017 . Consultado el 2 de julio de 2017 .(NB. Ofrece una descripción general completa de la historia y la "naturaleza" de la HMA y las limitaciones de diseño no obvias que deben observarse al desarrollar extensiones de sistemas residentes para cargarlas en la HMA. También describe cómo abordar estos problemas mediante el uso de apéndices . puertas traseras y reubicación de desplazamiento intrasegmento, un método utilizado por los controladores DR-DOS capaces de reubicarse en el HMA y similar a un método (más sofisticado) utilizado como base para la eliminación dinámica del código muerto en el controlador FreeKEYB del autor).
- ^ a b c Dryfoos, Mike, ed. (18 de septiembre de 1991) [19 de julio de 1991]. "Informe post-mortem de desarrollo de MS-DOS 5.0" (PDF) (correo como documento judicial). Microsoft . pag. 10. MS-PCA1179169 (MS-PCA1179159-MS-PCA1179191). MS7020988 (MS7020978-MS7021010). Depo. Ex. 1109. Viene contra Microsoft Demandante Prueba 3473. CA. No.2: 96CV645B Demandante Prueba 477. Archivado (PDF) desde el original el 2019-04-02 . Consultado el 22 de julio de 2019 .
[…] Uno de los estímulos más importantes para agregar características fue la presión competitiva de DRDOS 5.0 , que conocimos por primera vez en la primavera de 1990. El conjunto de características de DRDOS nos llevó a agregar soporte UMB , intercambio de tareas y Undelete. […] Gran parte de la atención de la gerencia del equipo se desvió a nuevas características como software de transferencia de archivos, restauración e instalación de red […] Finalmente, esta situación llegó a un punto crítico a fines de julio de 1990 y, liderada por BradS , el equipo la gerencia dedicó una ardua serie de reuniones a definir un cronograma y un proceso para cerrar el proyecto […]
(1 + 32 páginas) - ^ a b c Schulman, Andrew; Brown, Ralf D .; Maxey, David; Michels, Raymond J .; Kyle, Jim (1994) [noviembre de 1993]. Williams, Andrew (ed.). DOS sin documentar: una guía del programador para las estructuras de datos y funciones reservadas de MS-DOS, ampliada para incluir MS-DOS 6, Novell DOS y Windows 3.1 . The Andrew Schulman Programming Series (primera impresión, segunda edición). Reading, Massachusetts, EE.UU .: Addison Wesley Publishing Company . págs. 42, 349–350, 437–438. ISBN 0-201-63287-X. ISBN 978-0-201-63287-3 .(xviii + 856 + vi páginas, 3.5 "-floppy [1] ) Errata: [2] [3]
- ^ "Formato del bloque de memoria HMA (kernel DR DOS 6.0 cargado en HMA)" . RBIL . 2000. Archivado desde el original el 18 de febrero de 2020 . Consultado el 18 de febrero de 2020 .
- ^ a b c Paul, Matthias R. (10 de abril de 2002). "[fd-dev] Acceso a HMA desde TSR" . freedos-dev . Archivado desde el original el 9 de septiembre de 2017 . Consultado el 9 de septiembre de 2017 .
[…] MS-DOS 7.0 + agrega INT 21h / AX = 4A03h e INT 21h / AX = 4A04h. RBIL 61 INT 21h / AH = 52h tiene alguna información sobre la cadena MS-DOS 7.0+ HMA MCB […] La reubicación de HMA para TSR tiene mucho sentido para DR-DOS : aunque puede cargar grandes partes del BIOS y BDOS , el residente parte del shell, los BUFFERS y DR-DOS TSR como SHARE , KEYB y NLSFUNC (y en algunos problemas partes de TASKMGR y NWCACHE ) en el HMA, generalmente todavía hay espacio libre disponible, generalmente alrededor de 10 Kb (hasta ca. 20 Kb cuando utiliza un shell de terceros). También tiene sentido para MS-DOS 5.0 - 6.22 y PC DOS hasta 2000 , que normalmente dejan entre 4 y 7 Kb de la memoria HMA sin usar (SHARE, KEYB y NLSFUNC no se pueden cargar en el HMA, pero DBLSPACE y HIMEM sí pueden grado). El espacio disponible de HMA puede ser bastante reducido con MS-DOS 7.0 +, ya que este problema introdujo una estructura de datos RMD nueva y en su mayor parte indocumentada que generalmente se encuentra en el HMA. El kernel recopila y registra la configuración y los datos del controlador en modo real durante el arranque (tipo de controlador, interrupciones enganchadas por el controlador, línea de invocación CONFIG.SYS , etc.) y almacena esta información en un […] complicado […] y […] creciente estructura de datos. Presumiblemente, esta información está destinada a ser utilizada por el núcleo de Windows para obtener una mejor imagen de los controladores de modo real cargados en lugar de tratar DOS como un bloque monolítico, o incluso […] intentar desenganchar o descargar algunos de ellos, sin embargo, es solo se usa de manera muy limitada (por ejemplo, puede ver parte de la información reflejada en los archivos de registro creados en el inicio de Windows 9x, y algunas partes del administrador de configuración de Windows también lo utilizan), lo que deja espacio para la especulación mucho más allá del aspecto técnico, en particular porque nada de lo interesante está documentado ... [...]
- ^ Paul, Matthias R. (30 de julio de 1997) [1 de mayo de 1994]. "II.4. Undokumentierte Eigenschaften externer Kommandos". NWDOS-TIPs - Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds . MPDOSTIP . Release 157 (en alemán) (3 ed.). Archivado desde el original el 5 de noviembre de 2016 . Consultado el 11 de enero de 2012 .(NB.
NWDOSTIP.TXT
Es un trabajo completo sobre Novell DOS 7 y OpenDOS 7.01 , que incluye la descripción de muchas características y funciones internas indocumentadas. Es parte de laMPDOSTIP.ZIP
colección aún mayor del autor, mantenida hasta 2001 y distribuida en muchos sitios en ese momento. El enlace proporcionado apunta a una versión anterior del archivo convertida en HTML). [4] - ^ Paul, Matthias R. (9 de abril de 2001). "II.4. Undokumentierte Eigenschaften externer Kommandos". NWDOS-TIPs - Tips & Tricks rund um Novell DOS 7, mit Blick auf undokumentierte Details, Bugs und Workarounds . MPDOSTIP . Release 183 (en alemán) (3 ed.).
- ^ a b Chappell, Geoff (enero de 1994). Schulman, Andrew; Pedersen, Amorette (eds.). Internos de DOS . The Andrew Schulman Programming Series (primera impresión, primera edición). Addison Wesley Publishing Company . págs. 4, 21, 100-106, 127-129. ISBN 978-0-201-60835-9. ISBN 0-201-60835-9 .(xxvi + 738 + iv páginas, 3.5 "-floppy [5] [6] ) Fe de erratas: [7] [8] [9]
- ^ Cooper, Jim (2002). Utilizando MS-DOS 6.22 (especial 3.ª edición). Que Publishing . pag. 669. ISBN 0-78972573-8. ISBN 978-0-78972573-8 . Archivado desde el original el 18 de febrero de 2020 . Consultado el 18 de febrero de 2020 .
- ^ a b Brooks, Vernon C. (2014). "Esta es una lista detallada de los cambios que hice en PC DOS 7.0" . PC DOS Retro . Archivado desde el original el 18 de febrero de 2020 . Consultado el 18 de febrero de 2020 .
[…] DOSKEY.COM […] Mueva el código a HMA si está disponible. […] SHARE.EXE […] Mover el código a HMA si está disponible y se agregó la opción / NOHMA forzar carga baja. […]
- ^ Paul, Matthias R. (13 de agosto de 2002). "Suche freien Speicherbereich unterhalb von 1 MB, der nicht von OS überschrieben wird" (en alemán). Grupo de noticias : de.comp.lang.assembler.x86 . Archivado desde el original el 4 de septiembre de 2017 . Consultado el 3 de septiembre de 2017 .
- ^ Paul, Matthias R. (2 de octubre de 1997) [29 de septiembre de 1997]. "Caldera OpenDOS 7.01 / 7.02 Update Alpha 3 IBMBIO.COM - README.TXT y BOOT.TXT - Una breve descripción de cómo se inicia OpenDOS" . Archivado desde el original el 4 de octubre de 2003 . Consultado el 29 de marzo de 2009 . [10]
Otras lecturas
- Necasek, Michal (13 de septiembre de 2011). "¿Quién necesita la dirección envolvente, de todos modos?" . Museo OS / 2 . Archivado desde el original el 19 de febrero de 2020 . Consultado el 19 de febrero de 2020 .
[…] 86-DOS , y por lo tanto PC DOS / MS-DOS , utilizaron un truco ingenioso. El byte en el desplazamiento 5 de la PSP contenía un código de operación de llamada lejana (9Ah); la palabra en el desplazamiento 6 del PSP contenía el valor apropiado para indicar el tamaño del segmento del programa, y también la parte del desplazamiento de la llamada lejana. La palabra en el desplazamiento 8, que sirvió como parte del segmento de la llamada lejana, se diseñó de manera que cuando se combinara con el desplazamiento, se envolvería (una característica bien entendida de la CPU 8086 ) y apuntaría a la dirección 0: C0h, que contiene vector de interrupción 30h. […] La interfaz CALL 5 funciona incluso en emulación de DOS bajo Windows NT y OS / 2, y esos sistemas ciertamente no pueden ejecutarse con la línea A20 desactivada. ¿Cómo funciona eso entonces? […] En lugar de cortar los bits de dirección, el sistema refleja los cinco bytes en 0: C0h en 1000C0h. De hecho, la misma técnica se había utilizado en DOS 5 y versiones posteriores que se ejecutaban con DOS=HIGH. En ese caso, DOS se asegura de que la dirección lineal 1000C0h contenga la llamada lejana adecuada. […]
- Ingenoso, Tony (20 de diciembre de 1998). "Capítulo 13 - La puerta A20 y el HMA". Hacer que el código funcione mejor: cómo minimizar el tamaño del código de 80x86 y, a veces, hacerlo más rápido (libro electrónico). Archivado desde el original el 18 de noviembre de 2019 . Consultado el 18 de noviembre de 2019 .
- Kozierok, Charles M. (17 de abril de 2001) [1997]. "Área de memoria alta (HMA)" . La guía de PC . 2.2.0. Archivado desde el original el 16 de octubre de 2006 . Consultado el 15 de octubre de 2006 .