Вопрос

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

Что я знаю:

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

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

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

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

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

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

Это было полезно?

Решение

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

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

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

Другие советы

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

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

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

<Ол>
  • Для примера системные вызовы используют пространство ядра.
  • Вы можете иметь 64 ГБ физической памяти, но и на 32-битных платформах процессоры могут получить доступ только к 4gb из-за 32-разрядными виртуальную адресацию. На самом деле, вы можете иметь 1 Гб оперативной памяти и 3 ГБ подкачки и виртуальной адресации сделает его похожим на вас есть 4 Гб. На 64-битных платформах виртуальной адресации практически не ограничено.
  • Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top