stringtranslate.com

Gestión de memoria DOS

Áreas de memoria física de la familia IBM PC

En la informática compatible con IBM PC , la gestión de memoria DOS se refiere al software y las técnicas empleadas para dar a las aplicaciones acceso a más de 640 kibibytes (640*1024 bytes) (KiB) de "memoria convencional". El límite de 640 KiB era específico de la PC IBM y muy compatibles; otras máquinas que ejecutaban MS-DOS tenían límites diferentes, por ejemplo la Apricot PC podía tener hasta 768 KiB y la Sirius Victor 9000, 896 KiB. La gestión de la memoria en la familia IBM se volvió compleja por la necesidad de mantener la compatibilidad con el diseño original de la PC [1] y el DOS en modo real , al tiempo que permitía a los usuarios de computadoras aprovechar grandes cantidades de memoria de bajo costo y nuevas generaciones de procesadores. . Dado que DOS ha dado paso a Microsoft Windows y otros sistemas operativos de 32 bits que no están restringidos por el límite arbitrario original de 640 KiB de la PC IBM, administrar la memoria de una computadora personal ya no requiere que el usuario manipule manualmente las configuraciones y parámetros internos de la computadora. sistema.

El límite de 640 KiB imponía una gran complejidad al hardware y al software destinados a eludirlo; La memoria física de una máquina podría organizarse como una combinación de memoria base o convencional (incluida la memoria inferior), memoria superior, memoria alta (no es lo mismo que memoria superior), memoria extendida y memoria expandida, todas manejadas de diferentes maneras.

Memoria convencional

El procesador Intel 8088 utilizado en la PC IBM original tenía 20 líneas de dirección y, por lo tanto, podía direccionar directamente 1 MiB (2 20 bytes) de memoria. Se asignaron diferentes áreas de este espacio de direcciones a diferentes tipos de memoria utilizadas para diferentes propósitos. Comenzando en el extremo más bajo del espacio de direcciones, la PC tenía instalada una memoria de acceso aleatorio (RAM) de lectura/escritura, que era utilizada por DOS y programas de aplicación. La primera parte de esta memoria se instalaba en la placa base del sistema (en las primeras máquinas, 64 KiB, posteriormente revisada a 256 KiB). Se podría agregar memoria adicional con tarjetas conectadas a las ranuras de expansión; cada tarjeta contenía correas o interruptores para controlar qué parte del espacio de direcciones accede a la memoria y a los dispositivos de esa tarjeta.

En el IBM PC, todo el espacio de direcciones hasta 640 KiB estaba disponible para la RAM. Esta parte del espacio de direcciones se llama "memoria convencional", ya que todas las versiones de DOS pueden acceder a ella automáticamente al iniciar. El segmento 0, los primeros 64 KiB de la memoria convencional, también se denomina área de baja memoria . Normalmente, la memoria de expansión está configurada para que sea contigua en el espacio de direcciones a la memoria de la placa base. Si hubiera un espacio no asignado entre la memoria de la placa base y la memoria de expansión, DOS no detectaría automáticamente que la memoria es utilizable.

Área de memoria superior

El área de memoria superior (UMA) se refiere al espacio de direcciones entre 640 y 1024 KiB (0xA0000–0xFFFFF). La región de 128 KiB entre 0xA0000 y 0xBFFFF estaba reservada para la memoria de pantalla VGA y SMM heredado. La región de 128 KiB entre 0xC0000 y 0xDFFFF estaba reservada para las ROM de opciones del dispositivo , incluida la BIOS de vídeo . Los 64 KiB del espacio de direcciones de 0xE0000 a 0xEFFFF estaban reservados para el BIOS o las ROM opcionales . La PC IBM reservó los 64 KiB superiores del espacio de direcciones de 0xF0000 a 0xFFFFF para el BIOS y la memoria de solo lectura (ROM) del Cassette BASIC . [2]

Por ejemplo, el área de memoria del adaptador de vídeo monocromático iba de 704 a 736 KiB (0xB0000–0xB7FFF). Si solo se usara un adaptador de pantalla monocromático, el espacio de direcciones entre 0xA0000 y 0xAFFFF podría usarse para la RAM, que sería contigua a la memoria convencional. [3]

Las ROM del BIOS del sistema deben estar en el extremo superior del espacio de direcciones porque la dirección inicial de la CPU está fijada por el diseño del procesador. La dirección inicial se carga en el contador de programa de la CPU después de un reinicio del hardware y debe tener un valor definido que perdure después de que se interrumpa la alimentación al sistema. Al reiniciar o encender, la CPU carga la dirección de la ROM del sistema y luego salta a una ubicación de ROM definida para comenzar a ejecutar la autoprueba de encendido del sistema y, finalmente, cargar un sistema operativo.

Dado que una tarjeta de expansión , como un adaptador de vídeo, un controlador de disco duro o un adaptador de red, podía utilizar asignaciones de memoria en muchas de las áreas de memoria superiores, la configuración de algunas combinaciones de tarjetas requería una lectura cuidadosa de la documentación o experimentación para encontrar la configuración de la tarjeta y Mapeos de memoria que funcionaron. La asignación de dos dispositivos para que utilicen las mismas direcciones de memoria física podría provocar un sistema bloqueado o inestable. [3] No todas las direcciones en el área de memoria superior se utilizaron en un sistema típico; Las direcciones físicas no utilizadas devolverían datos indefinidos y dependientes del sistema si el procesador accediera a ellas.

Memoria expandida

A medida que los precios de la memoria bajaron, los programas de aplicación como las hojas de cálculo y los dibujos asistidos por computadora se cambiaron para aprovechar cada vez más memoria física en el sistema. La memoria virtual en el 8088 y el 8086 no era compatible con el hardware del procesador, y la tecnología de disco de la época la haría demasiado lenta y engorrosa para ser práctica. La memoria expandida era un sistema que permitía a los programas de aplicaciones acceder a más RAM de la directamente visible en el espacio de direcciones del procesador. El proceso fue una forma de cambio de banco . Cuando se necesitaba RAM adicional, el software del controlador hacía temporalmente accesible al procesador una parte de la memoria expandida; cuando se actualizaban los datos de esa parte de la memoria, se podía intercambiar otra parte en el espacio de direcciones del procesador. Para IBM PC e IBM PC/XT , con sólo 20 líneas de dirección, se fabricaron tarjetas de memoria expandida de propósito especial que contenían quizás un megabyte, o más, de memoria expandida, con lógica en la placa para hacer que esa memoria fuera accesible al procesador en partes definidas del espacio de direcciones 8088.

La asignación y el uso de la memoria ampliada no eran transparentes para los programas de aplicación. La aplicación tenía que realizar un seguimiento de qué banco de memoria expandida contenía un dato en particular, y cuando se requería acceso a esos datos, la aplicación tenía que solicitar (a través de un programa controlador) a la placa de memoria expandida que asignara esa parte de la memoria a el espacio de direcciones del procesador. Aunque las aplicaciones podían utilizar memoria ampliada con relativa libertad, muchos otros componentes de software, como controladores y programas residentes de terminación y permanencia (TSR), todavía estaban normalmente restringidos a residir dentro del área de "memoria convencional" de 640K, que pronto se convirtió en un área críticamente escasa. recurso.

El 80286 y el área de alta memoria.

Cuando se introdujo IBM PC/AT , la arquitectura de memoria segmentada de los procesadores de la familia Intel tenía el subproducto de permitir direccionar un poco más de 1 MiB de memoria en el modo "real". Dado que el 80286 tenía más de 20 líneas de dirección, ciertas combinaciones de segmento y desplazamiento podrían apuntar a la memoria por encima de la ubicación 0x0100000 (2 20 ). El 80286 podría direccionar hasta 16 MiB de memoria del sistema, eliminando así el comportamiento de direcciones de memoria "ajustándose". Dado que ahora existía la línea de dirección requerida, la combinación F800:8000 ya no apuntaría a la dirección física 0x0000000 sino a la dirección correcta 0x00100000.

Como resultado, algunos programas de DOS ya no funcionarían. Para mantener la compatibilidad con la PC y el comportamiento de XT, el AT incluyó una puerta de línea A20 (Puerta A20) que hizo que las direcciones de memoria en el AT se ajustaran a memoria baja como lo habrían hecho en un procesador 8088. Esta puerta podría controlarse, inicialmente a través del controlador del teclado , para permitir que los programas en ejecución que fueron diseñados para esto accedan a 65,520 bytes (64 KiB) adicionales de memoria en modo real . En el momento del arranque , el BIOS primero habilita A20 al contar y probar toda la memoria del sistema, y ​​lo deshabilita antes de transferir el control al sistema operativo. Habilitar la línea A20 es uno de los primeros pasos que realiza un sistema operativo x86 en modo protegido en el proceso de arranque, a menudo antes de que el control se haya pasado al kernel desde el arranque (en el caso de Linux, por ejemplo).

El área de memoria alta ( HMA ) es el área de RAM que consta de los primeros 64 KiB, menos 16 bytes , de la memoria extendida en una IBM PC/AT o microcomputadora compatible.

Originalmente, la puerta lógica era una puerta conectada al controlador de teclado Intel 8042 . Controlarlo fue un proceso relativamente lento. Desde entonces, se han agregado otros métodos para permitir una multitarea más eficiente de programas que requieren esta combinación con programas que acceden a toda la memoria del sistema. Al principio había una variedad de métodos, pero finalmente la industria se decidió por el método PS/2 de usar un bit en el puerto 92h para controlar la línea A20.

Desconectar A20 no limitaría todos los accesos a la memoria por encima de 1 MiB, solo aquellos en los rangos de 1 MiB, 3 MiB, 5 MiB, etc. El software en modo real solo se preocupaba por el área ligeramente superior a 1 MiB, por lo que la Puerta A20 era suficiente.

El modo virtual 8086 , introducido con Intel 80386 , permite simular el envolvente A20 utilizando las funciones de memoria virtual del procesador: la memoria física se puede asignar a múltiples direcciones virtuales, lo que permite que la memoria se asigne en el primer megabyte de La memoria virtual se puede asignar nuevamente en el segundo megabyte de memoria virtual. El sistema operativo puede interceptar cambios en la Puerta A20 y realizar los cambios correspondientes en el espacio de direcciones de la memoria virtual, lo que también hace irrelevante la eficiencia de la conmutación de la Puerta A20.

El primer usuario de HMA entre los productos de Microsoft fue Windows 2.0 en 1987, que introdujo el controlador de dispositivo HIMEM.SYS . A partir de las versiones 5.0 de DR-DOS (1990) y de MS-DOS (1991), también se pudieron cargar partes del sistema operativo en HMA, liberando hasta 46 KiB de memoria convencional . Otros componentes, como controladores de dispositivos y TSR, podrían cargarse en el área de memoria superior (UMA).

controlador A20

El controlador A20 es un software que controla el acceso al área de memoria alta. Los administradores de memoria extendida suelen proporcionar esta funcionalidad. En DOS, los administradores de áreas de alta memoria, como HIMEM.SYS, tenían la tarea adicional de administrar A20 y proporcionaban una API para abrir/cerrar A20. El propio DOS podría utilizar el área para algunas de sus necesidades de almacenamiento, liberando así más memoria convencional para programas. Esta funcionalidad fue habilitada por la directiva " DOS =HIGH" en el archivo de configuración CONFIG.SYS .

Puerta A20 en procesadores posteriores

Intel 80486 y Pentium agregaron un pin especial llamado A20M# , que cuando se afirma en nivel bajo obliga al bit 20 de la dirección física a ser cero para todos los accesos a la caché en el chip o a la memoria externa. Esto era necesario ya que el 80486 introdujo un caché en el chip y, por lo tanto, ya no era posible enmascarar este bit en la lógica externa. El software aún necesita manipular la puerta y aún debe lidiar con periféricos externos (el chipset ) para eso. [4]

80386 y procesadores posteriores

Los procesadores Intel desde el 386 en adelante permitieron un modo virtual 8086 , que simplificó el hardware necesario para implementar memoria expandida para aplicaciones DOS. Los administradores de memoria expandida, como el producto QEMM de Quarterdeck y el EMM386 de Microsoft, admitían el estándar de memoria expandida sin necesidad de placas de memoria especiales.

En los procesadores 386 y posteriores, los administradores de memoria como QEMM podrían mover la mayor parte del código de un controlador o TSR a la memoria extendida y reemplazarlo con un pequeño dedo que fuera capaz de acceder al código residente en la memoria extendida. Podrían analizar el uso de la memoria para detectar controladores que requirieron más RAM durante el inicio que la que necesitaron posteriormente, y recuperar y reutilizar la memoria que ya no era necesaria después del inicio. Incluso podrían reasignar áreas de memoria que normalmente se utilizan para E/S asignadas en memoria. Muchos de estos trucos implicaban suposiciones sobre el funcionamiento de los controladores y otros componentes. De hecho, los administradores de memoria podrían realizar ingeniería inversa y modificar el código de otros proveedores sobre la marcha. Como era de esperar, estos trucos no siempre funcionaron. Por lo tanto, los administradores de memoria también incorporaron sistemas muy elaborados de opciones configurables y disposiciones para la recuperación en caso de que una opción seleccionada hiciera que la PC no pudiera arrancar (algo que ocurre con frecuencia).

Instalar y configurar un administrador de memoria puede implicar horas de experimentación con opciones, reiniciar repetidamente la máquina y probar los resultados. Pero la memoria convencional era tan valiosa que los propietarios de PC sintieron que ese tiempo estaba bien invertido si el resultado era liberar 30 o 40 KiB de espacio en la memoria convencional.

Memoria ampliada

En el contexto de las computadoras compatibles con IBM PC, la memoria extendida se refiere a la memoria en el espacio de direcciones del 80286 y procesadores posteriores, más allá del límite de 1 megabyte impuesto por las 20 líneas de dirección del 8088 y 8086. Dicha memoria no está disponible directamente para Aplicaciones DOS que se ejecutan en el llamado "modo real" de los procesadores 80286 y posteriores. Solo se puede acceder a esta memoria en los modos protegido o virtual de los procesadores 80286 y superiores.

Ver también

Referencias

  1. ^ Mueller, Scott (1994). "7". Actualización y reparación de PC (4ª ed.). Que . ISBN 1-56529-932-9.
  2. ^ "Mapa de memoria (x86) - OSDev Wiki". wiki.osdev.org . Consultado el 20 de diciembre de 2020 .
  3. ^ ab Mueller, Scott (1999). "6: Memoria". Actualización y reparación de PC (11ª ed.). Que Corporación . ISBN 0-7897-1903-7.
  4. ^ Shanley, Tom (1996). Arquitectura de software en modo protegido . Taylor y Francisco . pag. 60.ISBN 0-201-55447-X.

Enlaces externos