Связь ZONE_NORMAL с ядром/страницами пользователя

альтернативный текст

Выше представлен случай, когда у меня всего 512 Мб физической памяти. До сих пор я читал, что ZONE_NORMAL сопоставляется с виртуальным адресным пространством ядра, как показано. По сути, у меня есть 512 МБ физической памяти, из которых 496 МБ на ZONE_NORMAL отображаются на виртуальное пространство ядра. Исходя из этого понимания, у меня возникает следующий вопрос:

  • Состоит ли ZONE_NORMAL из только страниц пространства ядра?
  • Если ZONE_NORMAL состоит только из страниц ядра и полностью сопоставляется с диапазоном виртуальных адресов пространства ядра, где размещаются страницы пользовательского пространства?? Кажется, что в физической памяти нет места для страниц пользовательского пространства.

Я полностью запутался в случае, когда физическая память меньше 4 ГБ, как показано в этом случае, который я представил. Я "пропустил" здесь ZONE_HIGHMEM? Как определяется, какая часть физической памяти занимает ZONE_NORMAL, а какая — ZONE_HIGHMEM?

Был бы очень признателен, если кто-то может пролить свет на это.


person TheLoneJoker    schedule 25.12.2010    source источник


Ответы (1)


ZONE_NORMAL состоит только из страниц пространства ядра?

=== NO.

ZONE_NORMAL означает, что она линейно отображается в физической памяти. Смещение между виртуальным адресом и соответствующим физическим адресом является постоянной величиной (обычно это 0xc000,0000). Например, если виртуальный адрес — 0xc123 0000, то его физический адрес — 0x0123 0000.

Страницы в ZONE_NORMAL могут использоваться либо ядром, либо процессами пользовательского уровня, если они не конфликтуют друг с другом.

ZONE_HIGHMEM существует только тогда, когда объем физической памяти превышает 896 МБ.

person Jiang    schedule 30.04.2011
comment
Обратите внимание на вопрос и ответ о 32-битной архитектуре. В новом 64-битном мире нормальная зона намного больше, и, вероятно, вам не нужна ZONE_HIGHMEM. - person Jiang; 22.01.2015
comment
Я не думаю, что ваше утверждение ZONE_NORMAL означает, что оно линейно отображается в физическую память, верно. - person Pradeep Goswami; 17.12.2015