
Cuando se inicia una PC x86, comienza a ejecutar un programa llamado BIOS, que se almacena en la memoria no volátil de la placa base. El trabajo del BIOS es preparar el hardware y luego transferir el control al sistema operativo.fuenteApéndice B. De una sesión de laboratorioaquíen la secciónEl espacio de direcciones físicas de la PCSe muestra el siguiente mapeo.
+------------------+ <- 0x00100000 (1MB)
| ROM del BIOS |
+-----------------+ <- 0x000F0000 (960KB)
¿Por qué el BIOS necesita usarlo, si no, para qué sirve? ¿Cómo se relaciona con el programa BIOS que se almacena en la memoria no volátil de la placa base como mencioné al principio? Aunque en el recurso de laboratorio se menciona que el diseño es para qemu(emulador x86) pero osdev [http://wiki.osdev.org/Memory_Map_%28x86%29#ROM_Area]También dice lo mismo sobre el diseño de la memoria. Estoy un poco confundido.
Respuesta1
DOS y otrosmodo realLos sistemas operativos utilizaban mucho los servicios de BIOS. Dado que el modo real de los procesadores x86 está vinculado a un espacio de direcciones de 2^20 = 1 Mb, los proveedores de sistemas i8086 decidieron que la BIOS debe asignarse al extremo superior del espacio de direcciones (al igual que hoy en día los núcleos de la mitad superior asignan su memoria virtual a el final del rango): desde 0xA0000 y superior.
El modo protegido convirtió esta memoria reservada en un espacio en el espacio de direcciones: los programas en modo protegido no pueden llamar funciones desde BIOS sin hackeos significativos, lo que la vuelve inutilizable en modo protegido y largo (en el que se ejecutan todos los sistemas operativos modernos), pero transfiriendo software de RM a El PM no fue rápido, por lo que los ingenieros de Intel dejaron una trampilla de escape, el modo v8086, que permitía ejecutar programas antiguos en modo real en una caja de arena dentro de un entorno en modo protegido (por ejemplo, OS/2 usaba intensamente el modo v8086 y la emulación de DOS en el sistema Windows). también depende de esta característica), aún requiere servicios de BIOS para compatibilidad.
Esta memoria todavía se usa en modo protegido para algunas tareas, como terminal VGA/salida de gráficos (la memoria del terminal está ubicada en 0xB8000, las fuentes de la consola también se pueden ajustar allí, el framebuffer de gráficos VGA está en 0xA8000, iirc). A veces, esta memoria incluso se usa para API comoVBE 3, pero sí, la asignación de BIOS en 0xA0000 es principalmente una cuestión de compatibilidad con versiones anteriores. Hay esfuerzos para reemplazarlo: un replanteamiento moderno de BIOS, UEFI, ahora está ganando popularidad constantemente.
Conclusión:El mapeo de BIOS en 0xA0000 es principalmente una cuestión de compatibilidad con versiones anterioresy hay esfuerzos para reemplazarlo con entornos de arranque más modernos como UEFI.
Respuesta2
AFAIK, esto se debe principalmente a razones históricas. El programa se almacena en el chip, pero para ejecutarlo, el código se carga en la RAM (sombra del BIOS), donde la CPU puede recuperar directamente las instrucciones. Esto es especialmente necesario para imágenes de BIOS comprimidas en chips menos costosos con capacidad mínima.
Deshabilitar la opción 'BIOS Shadow' podría ralentizar el proceso de arranque o rara vez causar problemas peores. Además, los sistemas operativos como MS DOS también usaban las rutinas BIOS para IO, que era una especie de HAL. Esto sería terriblemente lento e inseguro de usar en los sistemas operativos multiproceso actuales, por lo que después de entregar el control al sistema operativo, esa parte de RAM permanece inactiva.
Otros sistemas incluso tenían su núcleo en ese chip, por ejemplo Commodore Amiga Kickstart, que estaba disponible alternativamente como Floppy.