¿Cómo sabe Linux su rango máximo de direcciones físicas, especialmente cuando construye la jerarquía de tablas de paginación? ¿Cómo sabe que no debe asignar una dirección virtual a una dirección física que está más allá de la memoria RAM de hardware máxima disponible? ¿Hay alguna instrucción de CPU para esto, o obtiene la información en otra parte?
Consulte la página wiki de OSDev relacionada :
Hay funciones de BIOS para obtener la información, por ejemplo, esta (Cita de OSDev):
Con mucho, la mejor manera de detectar la memoria de una PC es usando el comando INT 0x15, EAX = 0xE820. Esta función está disponible en todas las PC construidas desde 2002 y en la mayoría de las PC existentes antes de esa fecha. Es la única función del BIOS que puede detectar áreas de memoria por encima de 4G. Está destinado a ser la última función BIOS de detección de memoria.
Otra fuente de información es la página de wikipedia del E820 (¡observe el E820 en la cita anterior!). Que yo sepa, detect_memory_e820() , que se encuentra en arch/x86/boot/memory.c para la arquitectura x86, recupera el mapa de memoria físico del BIOS.
Consulte también http://www.uruk.org/orig-grub/mem64mb.html para obtener una descripción detallada de las interrupciones relacionadas con el mapa de direcciones físicas.