Файлы рабочего столаКогда мне стукнет x64

Уэс Миллер (Wes Miller)

Операционная система Windows XP выпускается в версии со встроенной поддержкой 64-разрядных архитектур уже больше пяти лет. Но, если только вы не были в числе рано перешедших на использование процессора Intel Itanium (Windows XP для Itanium вышла в один день с Windows XP), вероятнее всего, вы слышали об этом не так давно с выходом версий Windows XP и Windows

Server 2003 для систем x64. x64 – также упоминаемое в индустрии как x86-64 – общее название для архитектур AMD64 и EM64T разработки компаний AMD и Intel. Если вы приобрели новый ПК в течение последнего года или около того, то велики шансы, что он поддерживает 64-разрядный режим, даже если сейчас ведет 32-разрядное существование (как, вероятно, происходит с большинством).

Сейчас я работаю в небольшой начинающей компании в г. Остине, штат Техас. Из-за архитектуры одного из наших продуктов мы заинтересованы в использовании некоторых очень специфических преимуществ архитектуры x64 – почти как команда по разработке Microsoft® Ex­change 2007, которая провела черту и начала поставки исключительно для архитектуры x64. Аналогично, команда по разработке и тестированию, которой я руковожу, использует только 64-разрядные версии Windows® XP и Windows Server® 2003 на рабочих станциях разработчиков, портативных компьютерах, серверах и серверах эксплуатации. Более того, на моем личном портативном компьютере установлена операционная система Windows XP Professional (64-разрядная версия), чтобы проверять и отлаживать наш продукт.

Интересно, что первая реакция многих людей, когда я говорю, что пользуюсь 64-разрядной Windows – в особенности на портативном компьютере – весьма озадаченный вид. Если они знакомы с 64-разрядной вычислительной техникой, то это что-то вроде смеси недоверия, удивления и отвращения – из-за бытующего мнения, что тяжело подобрать драйверы устройств для 64-разрядных систем. В статье этого месяца я объясню, как и почему я использую Windows XP и Windows Server 2003 в 64-разрядном режиме на системах x64, а также опишу некоторые ожидаемые преимущества и трудности развертывания. Я также остановлюсь на деталях поддержки, развертывания и перехода на 64-разрядную версию Windows Vista™.

Немного истории

Как я отметил ранее, началом поддержки 64-разрядности в Windows явилась поддержка процессора Intel Itanium. (Хотя существовала версия Windows для 64-разрядного процессора Alpha, при работе на Alpha Windows никогда не была полностью 64-разрядной). В Windows XP и Windows Vista не включена поддержка Itanium, поэтому в настоящий момент архитектура x64 является основной для 64-разрядной версии Windows. Сейчас для x64 доступно большее число выпусков Windows Server 2003, чем для Itanium (предназначаемого исключительно под нагрузку информационных центров сверхвысокого уровня) – тенденция, которая, как мне кажется, продолжится в следующей версии Windows Server с кодовым именем «Longhorn», когда начнутся ее поставки.

Поддержка Windows для платформы x64 стала доступной с момента начала поставок пакета обновления 1 (SP1) для Win­dows Server 2003. Хотя это и слегка сбивает с толку, но в то же самое время стала доступной версия Win­dows XP для x64, что означает, что 32-разрядная и 64-разрядная версии Windows XP происходят от разных деревьев кода семейства Windows. В то время как для 32-разрядных версий существует второй пакет обновления, технически для 64-разрядной версии Win­dows XP пакетов обновления нет вовсе (или можно считать, что в нее уже заложен пакет обновления 1 (SP1) для Windows Ser­ver 2003).

Для использования 64-разрядной версии Windows – Win­dows XP, Windows Server 2003, Win­dows Vista или Windows Server «Long­horn» – требования совершенно одинаковы. Очевидно, для начала нужен 64-разрядный процессор. В случае AMD это означает подбор одно-, двух- или четырехъядерной системы, для которой анонсирована совместимость с AMD64 (см. amd.com/us-en/Processors/ProductInformation/0,,30_118,00.html). Для Intel это означает подбор одно-, двух- или четырехъядерной системы с поддержкой архитектуры EM64T или Intel 64 (см. intel.com/technology/intel64). Обратите внимание, что здесь все дело в деталях. Например, система Intel Core Duo не поддерживает 64 разряда. А система Intel Core 2 Duo поддерживает – хотя может называться просто Centrino Duo (как в случае с моим портативным компьютером).

Существование с x64

Определившись, поддерживает ли ваша система 64-разрядную версию Windows, вам предстоит разобраться с поддержкой устройств. К сожалению, несмотря на усилия корпорации Майкрософт поощрять производителей и сборщиков систем (как минимум два года проводились конференции по разработке аппаратного обеспечения под Windows – WinHEC) создавать и сертифицировать драйвера для своих устройств и систем, наиболее проблематичным при использовании 64-разрядных версий Windows является поиск драйверов для оборудования или программного обеспечения. По моему опыту, наиболее легко эксплуатировать 64-разрядные системы на серверах, где необходимость поддержки устройств ограничена и выигрыш от 64 разрядов наиболее логичен.

Тяжелее всего найти драйверы для настольных и портативных систем. Обычно лучше обстоят дела у крупных изготовителей систем или с системой, собранной из компонентов корпоративного класса, где вероятность применения в бизнесе поощряет поставщика или изготовителя создавать и подписывать драйверы, поддерживающие 64-разрядные ОС.

К счастью, в Windows Vista ситуация значительно улучшается. Вместо мира, где x86 является предпочитаемой архитектурой, а x64 - игнорируемая архитектура с драйверами с ограничениями для большей части оборудования, здесь все происходит наоборот. Для проверки совместимости устройства с Windows Vista производитель должен предоставить 64-разрядные драйверы устройства. На самом деле, драйверы для x86 необязательны вовсе, но могут быть включены. Концептуально это означает что некоторое оборудование – в особенности устройства, использующие новые возможности Windows Vista, – может поддерживаться только в Windows для x64 и не поддерживаться в x86.

На деле драйверы являются только одной из проблем, с которыми придется столкнуться при попытке использовать 64-разрядную версию Windows. Начать можно с того, что более крупной проблемой является установка (переход), но это мы обсудим позднее.

Зачем нужны 64 разряда?

Конечно же, AMD, Intel и Майкрософт перешли на 64-разрядную архитектуру не просто так. У перехода на 64 разряда несколько ключевых преимуществ. Как можно видеть на рис. 1, наиболее важным улучшением, предоставляемым архитектурой x64, является возможность адресации значительно большей памяти – до 16 терабайт (ТБ) по сравнению с 4 ГБ, которые может использовать 32-разрядная версия Windows. Обратите внимание, что, хотя 64-разрядные указатели могут содержать адрес до этого предела в 16 ТБ, приложениям доступно около 8 ТБ.

Figure 1 Размеры адресуемого пространства памяти

Пространство 64-разрядная Windows 32-разрядная Windows
Виртуальная память 16 ТБ 4 ГБ
Файл подкачки 512 ТБ 16 ТБ
Выгружаемый пул 128 ГБ 470 МБ
Невыгружаемый пул 128 ГБ 256 МБ
Системный кэш 1 ТБ 1 ГБ

Кроме того, версии Win­dows для x64 предоставляют аппаратно поддерживаемое предотвращение выполнения данных (Data Execution Prevention, DEP), также доступное в системах x86 с поддержкой NX (No Execute – не выполнять). Это создает аппаратное решение, используемое в Windows для предотвращения переполнения буферов. Оно предотвращает выполнение кода из области данных в памяти – для получения дополнительных сведений ознакомьтесь со статьей по адресу support.microsoft.com/kb/875352.

Версии Windows для x64, как и версии Windows для x86, предоставляют встроенную поддержку многопроцессорной и многоядерной архитектуры. Но одна из самых больших сложностей создания образов системы Windows XP устранена путем использования единого слоя абстрагирования оборудования (HAL) во всех вариантах Windows x64 – больше никаких усилий для определения используемого HAL на однопроцессорных или несовместимых с ACPI системах.

По существу, Windows x64 как архитектура позволяет использовать существующую инфраструктуру управления и существующие 32-разрядные приложения (в режиме эмуляции), а также 64-разрядные приложения с возможностью доступа к значительно большей памяти. На самом деле, немногими неприятными побочными эффектами при переходе на Windows x64 являются: полное отсутствие поддержки 16-разрядных приложений (включая шедевры вроде 32-разрядных приложений с 16-разрядными программами установки); проблемы с приложениями, не работающими корректно, когда включена аппаратная поддержка DEP (хотя DEP можно отключить для конкретных процессов, и команда по совместимости приложений Windows подправляет работу некоторых приложений, работающих неправильно с включенной DEP); и наконец, то, что в 64-разрядной Windows Vista все драйверы должны иметь цифровую подпись.

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

Есть еще две детали, на которые стоит обратить внимание, рассматривая Windows для 64-разрядных систем. Нет версий Windows XP для систем x64, обладающих возможностями, включенными в Windows Media® Center Edition и Windows Tablet PC Edition. В Windows Vista это меняется, и версии Windows для x64 обладают теми же возможностями, что и версии для x86.

Виртуализация

Я еще не упоминал виртуализацию. Я не имею в виду продукты для виртуализации Microsoft Virtual PC и VMWare; речь идет о виртуализации в операционной системе для 32-разрядных приложений. В 32-разрядных версиях Windows 16-разрядные приложения работают в контексте NTVDM – виртуального компьютера MS-DOS®. Как я уже упоминал раньше, в 64-разрядных версиях Windows нет поддержки 16-разрядных приложений. Вместо этого, хотя большая часть компонентов Windows работает как полностью 64-разрядные приложения, часть компонентов и многие программные продукты сторонних разработчиков выполняются как 32-разрядные приложения.

Windows предоставляет совершенно новый слой эмуляции, называющийся Windows On Windows (WOW), чтобы у этих 32-разрядных приложений было отдельное представление операционной системы – как будто выполнение осуществляется в 32-разрядной версии Windows. В WOW приложения x86 видят Program Files (X86) как просто Program Files. Аналогично, %WIN­DIR%\SysWOW64 виден приложениям x86 как %WINDIR%\System32, а раздел системного реестра HKLM\SOFT­WARE\Wow6432Node как HKLM\SOFT­WARE.

Используя средство Process Explorer, можно взглянуть на виртуализацию с другой стороны. Поскольку многие 32-разрядные приложения рассчитывают на взамодействие со встроенными программами 32-разрядной версии Windows, многие из этих программ поставляются в 64- и 32-разрядном вариантах. Это можно легко увидеть, включив дополнительный столбец в окне Process Explorer. На рис. 2 можно видеть два экземпляра cmd.exe – 32-разрядную версию и 64-разрядную версию. Обратите внимание, в выделенном 32-разрядном экземпляре можно видеть несколько библиотек DLL wow64*, подгруженных в 32-разрядный процесс. Их наличие свидетельствует о работе виртуализации, позволяющей 32-разрядным приложениям работать в 64-разрядной версии Windows. Также обратите внимание на рабочий каталог (Path), используемый 64- и 32-разрядной версиями cmd.exe.

Рис. 2 Process Explorer показывает 32-разрядную и 64-разрядную версии cmd.exe

Рис. 2** Process Explorer показывает 32-разрядную и 64-разрядную версии cmd.exe **(Щелкните изображение, чтобы увеличить его)

Последнее замечание к соображениям на тему виртуализации – хотя explorer.exe выполняется в Windows как полностью 64-разрядное приложение, у этого есть за и против. Самый сильный аргумент против – то, что все расширения проводника должны быть перекомпилированы для x64, чтобы работать (большинство не перекомпилированы).

С обозревателем Internet Ex­plorer® все наоборот – по умолчанию выполняется 32-разрядная версия. Так сделано в первую очередь для того, чтобы обилие элементов управления ActiveX®, уже использующихся в Интернете, успешно продолжало работать как есть. Без этого, поскольку 64-разрядные приложения не могут подгружать 32-разрядные библиотеки и драйверы внутрь процесса, не существует способа загружать 32-разрядные элементы управления ActiveX, то есть практически все имеющиеся, в 64-разрядную версию обозревателя, что означает, что значительная часть содержимого Интернета станет недоступна. Чтобы увидеть это на практике, попробуйте запустить C:\Program Files\Internet Explorer\iexplore.exe в 64-разрядной системе Win­dows и посетить любой веб-узел, загружающий содержимое ActiveX (даже Win­dows Update) – результатом будут разнообразные ошибки. Веб-узел Windows Up­date (см. рис. 3) был обновлен, чтобы в такой ситуации запускалась 32-разрядная версия Internet Explorer. В будущем, несомненно, часть содержимого ActiveX будет обновлена, чтобы воспользоваться преимуществами 64-разрядной версии Internet Explorer. Но, поскольку большинство систем на сегодня использует только 32-разрядные версии Windows, необходимость обновления содержимого ActiveX не является критически важной. Я ожидаю, что ситуация не изменится еще долго.

Рис. 3 Ошибки 32-разрядных элементов управления ActiveX в 64-разрядной версии обозревателя Internet Explorer

Рис. 3** Ошибки 32-разрядных элементов управления ActiveX в 64-разрядной версии обозревателя Internet Explorer **(Щелкните изображение, чтобы увеличить его)

64-разрядные версии Windows в компании Pluck

В начале статьи я отметил, что в компании Pluck мы начали переход на 64-разрядные версии Windows. Мы проделали это для трех различных версий Windows: Windows XP Professional (64-разрядная версия), Windows Server 2003 Enter­prise (64-разрядная версия) и Windows Vista (64-разрядная версия).

Наша организация сравнительно невелика, так что, начав разрабатывать наш самый новый продукт, мы смогли начать переход на 64-разрядную версию Windows, чтобы воспользоваться ее преимуществами. Это означало, что все заказываемое оборудование должно было быть совместимым с x64. По сути, увеличение размеров памяти в x64 вкупе с виртуализацией являются фактором, позволяющим нам запускать наш продукт так, как мы это делаем. Все наши физические серверы выполняются как 64-разрядные виртуальные серверы на 64-разрядном сервере размещения. В каждом сервере размещения установлено 16 ГБ оперативной памяти, разделяемой между запускаемыми на нем виртуальными серверами (обычно по 2 ГБ для каждой виртуальной машины для разработки и по 3 ГБ для каждой производственной виртуальной машины).

Используя полностью поддерживаемые системы (системы 1 уровня) и виртуализованное оборудование, мы добиваемся практически 100% поддержки устройств. В моем портативном компьютере, например, есть три устройства, для которых нет драйверов для 64-разрядных Windows. Устройства эти относятся к фоновым ресурсам материнской платы, не особо важны, и система отлично работает без них. Интересно, что при установке 64-рахзрядной версии Windows Vista RC1 ничего не поменялось с точки зрения поддержки устройств, хотя, поскольку система снабжена эмблемой Windows Vista Capable, наверняка производитель вскоре выпустит отсутствующие драйверы.

Поскольку наше использование систем сводится к запуску Microsoft Of­fice, Visual Studio® и нескольких дополнительных средств, применяемых нами в процессе разработки и сборки, мы не обременены старыми приложениями, могущими вызвать проблемы совместимости при переходе. Пока значительная часть нашей организации продолжает пользоваться 32-разрядными версиями Windows, мы начали переход на 64 разряда на новом оборудовании, и это происходит сравнительно легко.

Развертывание 64-разрядных версий и переход на них

Необходимо учесть несколько соображений относительно развертывания. Корпорация Майкрософт предоставляет версию среды предустановки Windows (Windows PE) специально для архитектуры x64. Однако, поскольку в системах x64 есть совместимость с x86, вы можете принять решение использовать Windows PE для x86, особенно если вы используете решение с образами. Если вы развертываете Windows XP, используя автоматическую установку, версия Windows PE должна соответствовать архитектуре, поскольку приложение winnt32.exe должно выполняться в той же архитектуре, которая развертывается. Поскольку в Windows PE нет 32-разрядного слоя совместимости, а winnt32.exe для x64 является 64-разрядным приложением, для развертывания 32-разрядных версий Windows необходима 32-разрядная версия Windows PE. Это справедливо и для 64-разрядных версий Windows, которым необходима 64-разрядная версия Windows PE.

Служба удаленной установки (Remote Installation Services, RIS) в этом плане отличается, поэтому мы в компании Pluck используем RIS. Начиная с версии Windows Server 2003 SP1, RIS может развертывать 64-разрядную версию Windows в дополнение к архитектурам x86 и Itanium. Когда к серверу RIS подключается система x64, в конфигурации по умолчанию сервер предложит версии образов RISetup и RIPrep как для x86, так и для x64. RIS также можно настроить предлагать клиентам x64 исключительно образы для x86 или исключительно образы для x64. Был оставлен выбор по умолчанию, чтобы предоставить наилучшие возможности работы для оборудования x64.

Обратите внимание, что я еще не упомянул процесс обновления. Тому есть причина. К сожалению, обновление всей ОС с x86 на x64 является сложным предприятием. Поэтому с учетом ограниченного развертывания 64-разрядной версии Windows XP Pro невозможно обновить версию Windows для x86 на 64-разрядную версию Windows XP, и также невозможно обновить Windows XP (32- и 64-разрядные версии) на 64-разрядную версию Windows Vista. 64-разрядную версию Windows Vista, так же как и 64-разрядную версию Windows XP Pro до нее, можно только устанавливать с нуля. Поэтому многие организации рассматривают переход на x64 только в связи с планируемыми обновлениями оборудования. Ожидается, что многие организации воспользуются схожим подходом к переходу на Windows Vista (логично совмещая два обновления).

Но это вовсе не означает, что пользователям или организациям, переходящим с 32-разрядной версии Windows на 64-разрядную, не доступны никакие готовые средства. Версии средства переноса файлов и параметров пользователя (USMT) для Windows XP и для Windows Vista были дополнены возможностью поддержки перехода (а не обновления ОС) с одной установки Windows на другую. Все равно это наиболее часто встречающийся способ, используемый большинством компаний для развертывания Windows – удалить и установить заново, даже на тот же самый компьютер – поэтому использование того же механизма для перехода на Windows для совершенно новой архитектуры не должно стать большим препятствием, чем раньше.

Заключение

Хотя постепенный переход на x64 в нашей небольшой компании может быть значительно легче, чем сложный процесс перехода, предстоящий более крупным организациям, каждый специалист по информационным технологиям должен раньше или позже начать задумываться о переходе на архитектуру x64. Соль в том, что, хотя архитектура x86 и версии Windows для нее все еще будут активно использоваться в следующем десятилетии, архитектура x64 определенно является будущим корпоративного использования компьютеров. Поскольку корпорация Майкрософт полностью переходит на 64-разрядные мощности в Exchange Server и других продуктах, вам стоит понять, где место 64-разрядных систем в вашей архитектуре и плане перехода на Windows Vista, а также используете ли вы Windows XP и Windows Server 2003 в полностью 64-разрядном режиме.

Уэс Миллер (Wes Miller) – менеджер по разработке в компании Pluck (www.pluck.com) в г. Остине, штат Техас. Ранее Уэс работал в компании Winternals Software, а также в корпорации Майкрософт в должности руководителя программы и менеджера по продуктам Windows. С Уэсом можно связаться по адресу электронной почты technet@getwired.com.

© 2008 Корпорация Майкрософт и компания CMP Media, LLC. Все права защищены; полное или частичное воспроизведение без разрешения запрещено.