Что подразумевается под дырами в памяти Linux?

Я сталкивался с термином - дыры в памяти в Linux. Я считаю, что это память, которая перераспределяет ввод / вывод. Правильно ли мое понимание?

1 ответ

Решение

Дыры в памяти могут означать разные вещи:

1) Это может относиться к адресации физической памяти: по историческим причинам и причинам, связанным с загрузкой, в "стандартной архитектуре ПК" (x86) вся оперативная память системы не является непрерывной. В адресном пространстве есть "дыры", в которых находится отображенный в память ввод-вывод. Например, с самых ранних дней была область, зарезервированная для загрузочного ПЗУ (BIOS) и видеопамяти. Кроме того, существует большая область адресного пространства, зарезервированная для динамического назначения периферийным устройствам PCI (и PCI-X или PCI-Express). Эти области часто отображаются по мере необходимости в виртуальное адресное пространство ядра драйверами устройств (которые могут называться "переназначение ввода / вывода").

Контроллеры памяти, встроенные в материнскую плату, позволяют настраивать физический адрес ОЗУ (это обычно выполняется BIOS в стандартной архитектуре ПК). Другие архитектуры [не x86] часто имеют похожие дыры в физическом адресном пространстве.

2.) Термин также может относиться к неназначенным регионам в виртуальном адресном пространстве. Как виртуальное адресное пространство ядра, так и виртуальное адресное пространство пользовательских процессов обычно имеют "дыры". Например, linux не отображает никакую физическую память, соответствующую виртуальному адресу 0 (т. Е. Первая страница адресного пространства никогда не имеет допустимой памяти) - это позволяет перехватывать ссылки на нулевые указатели.

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

Другие вопросы по тегам