En el kernel de Linux, mem_map
es la matriz que contiene todos los descriptores de "struct page". Esas páginas incluyen la memoria de 128MiB en lowmem para mapear dinámicamente highmem.¿por qué necesitamos zone_highmem en x86?
Dado que el tamaño de lowmem es 1GiB, la matriz mem_map
tiene solo 1GiB/4KiB = 256KiB. Si cada tamaño de entrada es de 32 bytes, entonces el tamaño de memoria mem_map
= 8Mib. Pero si pudiéramos usar mem_map
para mapear toda la memoria física 4GiB (si tenemos tanta memoria física disponible en x86-32), entonces la matriz mem_map ocuparía 32MiB, eso no es mucha memoria del núcleo (¿o estoy equivocado?) .
Así que mi pregunta es: ¿por qué tenemos que usar ese 128MiB en baja para el mapeo de alto valor indirecto en primer lugar? O dicho de otra manera, ¿por qué no mapear directamente la memoria física máxima de 4GiB (si está disponible) en el espacio del kernel?
Nota: si mi comprensión de la fuente del núcleo anterior es incorrecta, corríjala. ¡Gracias!