пятница, 19 июня 2009 г.

Execution protection (NX) и PAE

Это перевод Execution protection (NX) and PAE. Автор: Carmen Crincoli.

Комментарий к предыдущей записи об управлении памятью поставил хороший вопрос. Как PAE взаимодействует с новым механизмом No Execute (NX), включаемым на Opteron, Athlon64 и новых Xeon на основе Prescott?

В Windows XP SP2 и Server 2003 SP1 оба они неразрывно связаны. Двухуровневая схема трансляции адресов, используемая не-PAE ядром, не имеет достаточно места для размещения какой-либо описательной информацию об отдельных страницах памяти. Трёх-уровневая схема, которая необходима PAE, позволяет использовать новый атрибут NX (это просто бит в Page Table Entry (PTE), который указывает, что на память в этом месте не разрешается ссылаться по instruction pointer (EIP). “Не Выполнять Под Угрозой Смерти”).

Когда вы используете ключ /NoExecute в этих ОС-ах, то ntldr теперь загружает PAE-ядро, но в специальном режиме. Вы не получите доступа к памяти выше 4 Гб, и, что более важно, ваши драйвера тоже не получат физических адресов выше 4 Гб. Это важно, потому что мы обнаружили, что многие устройства и драйвера устройств, особенно на потребительском рынке, счастливо полагают, что они никогда не получат адрес памяти в пространстве выше границы 4 Гб.

Хотя вы можете использовать максимум только 4 Гб памяти в XP, это не означает, что часть её не может иметь физических адресов выше границы в 4 Гб. BIOS или устройства могут перепроецировать память оттуда в предположении, что её нельзя увидеть или использовать. И когда PAE-ядро начинает использовать адреса на эти страницы памяти, могут происходить плохие вещи. Простейшим путём убедиться, что всё будет работать, как и в прошлом - гарантировать, что мы не будем исользовать никаких адресов выше границы в 4 Гб.

Если вы добавите ключ /PAE, то вы получите обычное поведение PAE. Конечно же, это в точности то, что вы хотели получить в серверном пространстве; в конце концов, у вас есть причина, чтобы устанавливать эту дополнительную память, верно? Также заметьте, что эти свойства не транзитивны. Хотя и /PAE и /NoExecute используют один и тот же файл ядра (ntkrnlpa.exe или ntkrpamp.exe) и механизм трансляции адресов, но вам нужно включать оба ключа, чтобы задействовать обе возможности.

Заметьте, что вся информация выше применима только к NX на процессорах в режиме x86. Платформы IA-64 и x64 имеют родную поддержку NX, которая доступна начиная с первого релиза Server 2003 и XP для 64bit. Обе эти платформы уже используют трёхуровневую схему трансляции адресов, но она никак не связана с PAE. Они адресуют 64 бита напрямую (natively), а структуры памяти имеют достаточно места для информации о NX. Нам надо было просто добавить эту поддержку в ОС.

Комментариев нет:

Отправить комментарий

Можно использовать некоторые HTML-теги, например:

<b>Жирный</b>
<i>Курсив</i>
<a href="http://www.example.com/">Ссылка</a>

Вам необязательно регистрироваться для комментирования - для этого просто выберите из списка "Анонимный" (для анонимного комментария) или "Имя/URL" (для указания вашего имени и ссылки на сайт). Все прочие варианты потребуют от вас входа в вашу учётку.

Пожалуйста, по возможности используйте "Имя/URL" вместо "Анонимный". URL можно просто не указывать.

Ваше сообщение может быть помечено как спам спам-фильтром - не волнуйтесь, оно появится после проверки администратором.

Примечание. Отправлять комментарии могут только участники этого блога.