В ядре Linux, mem_map
- это массив, который содержит все дескрипторы "struct page". Эти страницы включают в себя 128 МБ памяти в формате lowmem для динамического отображения highmem.
Поскольку минимальный размер составляет 1 ГБ, массив mem_map
содержит только записи 1 ГБ / 4 КБ = 256 КБ. Если размер каждой записи составляет 32 байта, то объем памяти mem_map
= 8 МБ. Но если бы мы могли использовать mem_map
для отображения всей физической памяти 4 ГБ (если бы у нас было столько физической памяти на x86-32), то массив mem_map занимал бы 32 МБ, что не так много памяти ядра (или я ошибаюсь) ?).
Итак, мой вопрос: почему мы должны использовать этот 128MiB в низком для непрямого отображения highmem в первую очередь? Или, другими словами, почему бы не отобразить всю эту максимальную физическую память 4 ГБ (если имеется) непосредственно в пространство ядра?
Примечание: если мое понимание исходного кода ядра неверно, пожалуйста, исправьте. Спасибо!