В ядре linux mem_map
- это массив, который содержит все дескрипторы «struct page». Эти страницы включают 128MiB память в lowmem для динамического отображения highmem.Зачем нам нужно zone_highmem на x86?
Поскольку размер нижней части 1GiB, поэтому массив mem_map
имеет только 1GiB/4KiB = 256KiB записей. Если каждый размер записи составляет 32 байт, то размер памяти mem_map
= 8MiB. Но если бы мы могли использовать mem_map
для сопоставления всей физической памяти 4GiB (если у нас столько физической памяти на x86-32), то массив mem_map будет занимать 32MiB, это не так много памяти ядра (или я ошибаюсь?) ,
Так что мой вопрос: зачем мы должны использовать этот 128MiB в низком для косвенного отображения highmem в первую очередь? Или по-другому, почему бы не сопоставить всю эту максимальную физическую память 4GiB (если доступно) в ядре непосредственно?
Примечание: если мое понимание источника ядра выше неверно, исправьте. Благодаря!