Небольшая заметка о (не) совместимости

Измерение про­из­во­ди­тель­но­с­ти ра­ри­тет­ных, а ино­гда да­же ан­ти­квар­ных плат­форм яв­ля­ет­ся важ­ным на­прав­ле­ни­ем в те­ма­ти­ке «Ком­пос­те­ра». Да­вай­те ос­та­но­вим­ся на од­ном из мно­го­чис­лен­ных пре­пят­ст­вий, не­из­беж­но со­про­вож­да­ю­щих ис­сле­до­ва­ния про­ш­ло­го.

Условия эксперимента

Нашей целью была инсталляция Windows 10 на платформах, поддерживающих только уставревшие модели про­цес­со­ров Pen­­ti­um 4. В порядке эксперимента мы попытались установить 32-битную версию современной опе­ра­ци­он­ной сис­те­мы на ма­те­рин­ской плате ASRock P4Dual-915GL с Intel Pentium 4 (Northwood) на борту. Про­цес­сор работает на частоте 2400 MHz (18 x 133), оперативная память — два DIMM-модуля DDR400 общим объ­е­мом 2 гигабайта.

Проблема

Инсталлятор в режиме загрузки с носителя, на который записан ISO-образ (Flash Drive или DVD), циклически пе­ре­за­гру­жа­ет­ся. Что­бы получить больше информации о причинах сбоя, запустим инсталлятор Windows 10 в сре­де ра­нее ус­та­нов­лен­ной операционной системы Windows 7.

This processor does not support a critical feature NX

Рис 1. Сообщение, выдаваемое инсталлятором Windows 10 при запуске в среде Windows 7

ОС сообщает о критической важности технологии NX. Проверяем информацию, доступную посредством ин­ст­рук­ции CPUID. Фун­к­ци­о­наль­ность NX действительно отсутствует в данном процессоре:

Детектирование поддержки NX посредством инструкции CPUID function 80000001h, register EDX, bit 20 = NX

Рис 2. Детектирование поддержки NX посредством инструкции CPUID function 80000001h, register EDX, bit 20 = NX

Почему нельзя выполнять данные?

Аббревиатура NX (No eXecute pages protection) и ее синоним XD (eXecution Disable) запрещают платформе ин­тер­пре­ти­ро­вать дан­ные как выполняемый код (запрет выполнения данных). Так выполняется блокировка вре­до­нос­ных сце­на­ри­ев — один из способов защиты персональной платформы от вирусных атак.

В основе этой технологии — добавление в дескрипторы страниц дополнительного бита, содержащего атрибут за­щи­ты от вы­пол­не­ния. В клас­си­че­ской 32-битной архитектуре дифференцирование между кодом и данными осу­щест­вля­ет­ся сред­ст­ва­ми сег­мен­та­ции, хотя роль сегментации нивелируется даже 32-битными ОС. В 64-битной ар­хи­тек­ту­ре роль сег­мен­та­ции су­щест­вен­но ми­ни­ми­зи­ро­ва­на, поэтому стал актуальным пе­ре­нос механизма диф­фе­рен­ци­ро­ва­ния кода и данных на уровень страниц. 32-битные процессоры с под­держ­кой NX — это, как правило, про­цес­со­ры под Socket 775, вы­пу­щен­ные уже после появления 64-битных чи­пов.

Формат элемента Page Directory Entry в режиме 64-битной трансляции страниц (фрагмент документации AMD)

Рис 3. Формат элемента Page Directory Entry в режиме 64-битной трансляции страниц
(фрагмент документации AMD)

Как следует из иллюстрации, флаг NX, используемый механизмом защиты соответствует биту 63 де­скрип­то­ра ка­та­ло­га стра­ниц (Page Directory Entry) или дескриптора страницы PTE (Page Table Entry) и доступен толь­ко в слу­чае ис­поль­зо­ва­ния 64-бит­ной транс­ля­ции страниц, когда размер дескриптора составляет 64 бита.

Использование NX в среде 32-битной ОС возможно только при условии активности режима PAE (Physical Ad­dress Ex­ten­sion), что по­зво­ля­ет совместить 32-битную базовую архитектуру и 64-битный механизм вир­ту­аль­ной ад­ре­са­ции. За­ме­тим, в 64-бит­ной ОС режим PAE обязателен.

Попытка выполнения инструкции, хранящейся в странице, дескриптор которой содержит установленный бит NX, при­во­дит к ге­не­ра­ции ис­клю­че­ния процессором и аппаратной передаче управления привилегированному коду ОС для вы­яс­не­ния при­чин. Дан­ный механизм клас­си­фи­ци­ру­ет­ся как ап­па­рат­ный вариант реализации тех­но­ло­гии DEP или Da­ta Ex­ecu­tion Pre­ven­tion.

Неочевидные особенности

Внимательный читатель мог заметить, что в информации CPUID некоторые биты, соответствующие тех­но­ло­ги­ям, ко­то­рые дан­ный про­цес­сор поддерживает, обнулены. Например, MMX, бит EDX.23. В силу ис­то­ри­че­ских причин, функ­ция 80000001h (ex­tend­ed cpuid) резервировалась для возможностей, добавляемых по ини­ци­а­тиве «аль­тер­на­тив­ных» с точ­ки зре­ния In­tel про­из­во­ди­те­лей, в частности AMD. Поддержку MMX для Intel следует проверять по состоянию бита EDX.23 после выполнения функции 00000001h (standard cpuid).

Для возможностей, появившихся на раннем этапе развития архитектуры AMD64, основным источником ин­фор­ма­ции яв­ля­ет­ся фун­к­ция 80000001h. Здесь, как известно, лидерство принадлежит AMD.

Практические рекомендации

В рассмотренном случае процессор официально несовместим с Windows 10 в силу аппаратных причин, хотя во­прос по­ис­ка об­ход­ных путей не закрыт. Вместе с тем, получив аналогичное сообщение об ошибке на более со­вре­мен­ной плат­фор­ме, следует проверить установки CMOS Setup, так как доступность технологии NX мо­жет за­ви­сеть от ини­ци­а­ли­за­ции процессора процедурами firmware.

Опция PAE/NX в установках Oracle VirtualBox

Рис 4. Опция PAE/NX в установках Oracle VirtualBox

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