Nel kernel linux, mem_map
è l'array che contiene tutti i descrittori di "struct page". Queste pagine includono la memoria da 128MiB in lowmem per la mappatura dinamica di highmem.perché abbiamo bisogno di zone_highmem su x86?
Poiché la dimensione del file di memoria è 1GiB, quindi l'array mem_map
ha solo voci 1GiB/4KiB = 256KiB. Se ciascuna dimensione della voce è 32 byte, la dimensione della memoria mem_map
= 8MiB. Ma se potessimo usare mem_map
per mappare tutta la memoria fisica 4GiB (se abbiamo così tanta memoria fisica disponibile su x86-32), allora l'array mem_map occuperebbe 32MiB, che non è un sacco di memoria del kernel (o sbaglio?) .
Quindi la mia domanda è: perché abbiamo bisogno di usare quel 128MiB in basso per la mappatura indiretta di highmem in primo luogo? In altre parole, perché non mappare direttamente tutte quelle massime memorie fisiche 4GiB (se disponibili) nello spazio del kernel?
Nota: se la mia comprensione della fonte del kernel sopra è errata, si prega di correggere. Grazie!