Разделение виртуального адреса в Linux 3/1 - PullRequest
9 голосов
/ 02 ноября 2009

Я что-то упускаю, когда дело доходит до понимания необходимости использования highmem для работы с более чем 1 ГБ ОЗУ. Может ли кто-нибудь указать, где я ошибаюсь? Спасибо!

Что я знаю:

  • 1 ГБ виртуальной памяти процессов (область высокой памяти) зарезервировано для операций ядра. Пользовательское пространство может использовать оставшиеся 3 ГБ. Это разделение на 3/1.

  • Функции виртуальной памяти виртуальной машины отображают (непрерывные) страницы виртуальной памяти на физические страницы (RAM).

Чего я не знаю:

  • Какие операции используют виртуальную память ядра? Я предполагаю, что такие вещи, как kmalloc (...) в пространстве ядра, будут использовать виртуальную память ядра.

  • Я думаю, что по этой схеме можно использовать 4 ГБ ОЗУ. Я не понимаю, почему 1 ГБ виртуального пространства ядра является ограничивающим фактором при обращении к физическому пространству. Здесь мое понимание нарушается. Пожалуйста, сообщите.

Я читал это (http://kerneltrap.org/node/2450),, и это здорово. Но это не совсем соответствует моему вопросу на мой вкус.

Ответы [ 3 ]

9 голосов
/ 02 ноября 2009

Причина, по которой виртуальное пространство ядра является ограничивающим фактором для используемой физической памяти, заключается в том, что ядру необходим доступ ко всей физической памяти, а способ доступа к физической памяти - через виртуальные адреса ядра. Ядро не использует специальных инструкций, которые разрешают прямой доступ к физическим областям памяти - оно должно настроить записи таблицы страниц для любых физических диапазонов, с которыми оно хочет общаться.

В схеме «старого стиля» ядро ​​настроено так, чтобы таблицы страниц каждого процесса отображали виртуальные адреса от 0xC0000000 до 0xFFFFFFFF непосредственно на физические адреса от 0x00000000 до 0x3FFFFFFF (эти страницы были отмечены чтобы они были доступны только в кольцо 0 - режим ядра). Это «виртуальные адреса ядра». В соответствии с этой схемой ядро ​​может напрямую считывать и записывать любую область физической памяти без необходимости манипулировать MMU для изменения отображений.

В схеме HIGHMEM сопоставления виртуальных адресов ядра с физическими адресами не фиксированы - части физической памяти отображаются в виртуальном адресном пространстве ядра и из него, поскольку ядру необходим доступ к этой памяти. Это позволяет использовать больше физической памяти, но за счет необходимости постоянно менять виртуальные и физические отображения, что является довольно дорогой операцией.

4 голосов
/ 02 ноября 2009

Отображение 1 ГБ в ядро ​​в каждом процессе позволяет процессам переключаться в режим ядра, не выполняя также переключение контекста. Ответы на системные вызовы, такие как read(), mmap() и другие, могут быть соответствующим образом обработаны в адресном пространстве вызывающего процесса.

Если бы пространство для ядра не было зарезервировано в каждом процессе, переключение в «режим ядра» между выполнением кода пространства пользователя было бы более дорогостоящим, и было бы невозможно использовать виртуальное сопоставление адресов через аппаратный MMU (блок управления памятью) для системные вызовы обслуживаются.

Системы, работающие с 32-битным ядром с более чем 1 ГБ физической памяти, могут назначать области физической памяти в ZONE_HIGHMEM (примерно выше отметки 1 ГБ), что может потребовать, чтобы ядро ​​перепрыгивало через циклы для взаимодействия определенных операций их. Добавление PAE (расширение физических адресов) расширяет эту проблему, позволяя использовать до 64 ГБ физической памяти, уменьшая отношение памяти в памяти физических адресов на 1 ГБ к областям, выделенным в ZONE_HIGHMEM.

0 голосов
/ 02 ноября 2009
  1. Например, системные вызовы используют пространство ядра.
  2. Вы можете иметь 64 ГБ физической памяти, но на 32-разрядных платформах процессоры могут получить доступ только к 4 ГБ из-за 32-разрядной виртуальной адресации. На самом деле, вы можете иметь 1 ГБ ОЗУ и 3 ГБ подкачки, а виртуальная адресация будет выглядеть так, как если бы у вас было 4 ГБ. На 64-битных платформах виртуальная адресация практически не ограничена.
...