Контент

Преимущества 64 битной windows 7 перед 32. Windows XP x64: обещания и реальность. битные проблемы ноутбуков

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

Прежде 64-битные системы были уделом профессионалов и использовались для программ, требующих огромных ресурсов. Домашние пользователи обходились 32-битной версией Windows. И хотя 64-разрядные процессоры появились на рынке уже в 2003 году, (в 2005 году появилась 64-битная Windows XP), на новых компьютерах 64-битная система стала устанавливаться только с выходом Windows 7.

Итак, чем же хороша 64-битная архитектура? Какие преимущества мы получаем и работает ли она быстрее? С какими проблемами нам, простым пользователям, придётся столкнуться?

На экране 32-битная и 64-битная версии Windows 7 выглядят абсолютно одинаково. Возможности идентичны, программы одни и те же, однако, различия существенны!

1. Скорость обработки данных выше в 2 раза. 64-разрядный процессор способен обрабатывать за один такт 64 бита данных (8 байт) в отличие от 32-битного, обрабатывающего только 32 бита (4 байта) за единицу времени, то есть скорость обработки данных в 2 раза выше! Соответственно, и программы для 64-битных операционных систем работают гораздо быстрее, чем аналогичные, работающие на 32-битных ОС.

2. Доступно больше оперативной памяти. 32-битная версия Windows максимально использует только 3,5 Гб памяти, при этом она не полностью доступна программам. К примеру, операционная система занимает 1 Гб памяти, плюс до 1 Гб может быть зарезервировано для видеопамяти, и для программ останется всего 1,5 Гб. А если программы особо «прожорливы», памяти не хватит.

У 64-битных версий Windows этих проблем нет. Windows 7 Home Premium использует максимум 16 Гб рабочей памяти и благодаря этому Windows реже использует файл подкачки (используется системой для размещения данных, не помещающихся в оперативной памяти), а компьютер работает значительно быстрее.

Требования 64-разрядной системы к компьютеру

1. Процессор . Как Вы уже догадались, одно из необходимых условий для работы 64-битной ОС – это 64-битная архитектура процессора. У Intel эта технология называется EM64T, а у одного из крупнейших производителя процессоров AMD она называет AMD64.

2. Оперативная память . 64-битная Windows требуется не менее 4 Гб оперативной памяти. И в отличие от 32-битных операционных систем 64-битные ОС других особых требований к комплектации компьютера не имеют.

Чтобы проверить версию Вашей операционной системы, нажмите «Пуск» –> кликните правой кнопкой мыши по “Компьютер” и в выпадающем меню выберите «Свойства» –> в открывшемся окне, с правой стороны, отображена версия Вашей операционной системы.

Недостатки 64-разрядной системы

1. Требуются новые драйверы . Как Вы уже догадались, для 64-битной Windows 7 требуются новые драйвера (аналогичные драйвера для 32-битной операционной системы не подходят). Последние модели устройств выпускаются уже с новыми драйверами, но с утаревшими модулями могут возникнуть проблемы, так как производители не разрабатывают драйверов для 64-битной версии Windows. Будьте внимательны, перед тем как переходить на 64-битную Windows, зайдите на сайты производителей устройств и проверьте наличие 64-битных версий драйверов для вашего оборудования.

2. Нужно больше памяти . Необходимо помнить, что у большинства 64-битных программ размер структуры данных 8 байт (64 бит) и на жестких дисках они занимают примерно на 10–20% больше пространства, чем версии 32-битных программ со структурой в 4 байта. Потребление оперативной памяти повышается примерно на 15%

Возможно ли установить 64-разрядную Windows 7 на нетбук?

С появлением семейства 64-разрядных процессоров «Pineview» (N450 и выше) у нетбуков появилась возможность использовать 64-битное программное обеспечение. Однако, камнем преткновения может стать оперативная память. Большинство нетбуков оснащено 1 Гб памяти. И если даже сделать апгрейд до 2 Гб, то это едва будет дотягивать до минимальных требований 64-битной Windows 7. Так что, Друзья, об эффективном использовании 64-разрядной системы на нетбуках, речь пока не идет (требуется не менее 4 Гб оперативной памяти).

Возможно ли использовать 32-битные программы для 64-битной ОС?

В 64-битной Windows имеется подсистема преобразования Windows-on-Windows 64-bit (WoW64), которая обеспечивает совместимость работы 32-битного программного обеспечения с 64-битной ОС. Большая часть 32-битных программ безукоризненно работает с помощью WoW64, тем не менее, существуют некоторые исключения:

  • Программы для резервного копирования . При создании бэкапов программы напрямую обращаются к системными папкам Windows, а WoW64 в некоторых случаях перенаправляет доступ 32-битного программного обеспечения в другие папки. Т.е. если не перенастроить программы резервирования, то результат их работы может оказаться неполными и ошибочным.
  • Программы для оптимизации Windows . Программы, созданные для оптимизации 32-битной Windows, ни в коем случае нельзя использовать на 64-битной Windows 7, вреда от их работы будет гораздо больше чем помощи.
  • Программы для защиты ПК . Если Вам нужна отличная защита компьютера, то для 64-битной Windows используйте только 64-битные версии антивирусных программ. Старое 32-битное программное обеспечение не в состоянии обеспечить надёжную защиту и пропустит вирусные атаки, разработанные для 64-битной ОС.
  • Скорость работы . Устаревшее 32-битное ПО на 64-битной Windows работает медленнее, чем в родной 32-битной среде. Причиной тому лишние временные затраты на преобразования подсистемой WoW64.

Чтобы посмотреть какие 32-битные программы работают в 64-битной системе, достаточно запустить Диспетчере Задач (нажимаем клавиши Ctrl+Shift+Esc), и найти программы, помеченное значком *32.

Итак, Дорогие Друзья, подведем итог

При переходе на работу с 64-битной Windows 7 следует обратить внимание на несколько значимых факторов.

1. Требования к комплектации компьютера:

  • 64-битная архитектура процессора;
  • 4 ГБ оперативной памяти.

2. Совместимость программного обеспечения:

  • наличие необходимых новых драйверов для Ваших устройств;
  • доступность обновления ПО до новейших 64-битных программ.

1. Проверить совместимость программного обеспечения Ваших устройств с 64 битной ОС можно в «Центре совместимости Windows 7».

2. При работе со сбоями 32-битной программы на 64-битной системе помогает обновление ПО до новой версии, которую обычно можно найти на сайте производителя.

У вас работает 64-битная операционная система? Если вы не знаете ответа на этот вопрос, то наверняка нет. 32- и 64-битные версии Windows очень похожи друг на друга, так что отличить внешне вариант ОС не так легко. Проще всего вызвать окно просмотра сведений о компьютере, выбрав "Панель управления" -> "Система" (или нажав правой клавишей на "Компьютер" и выбрав "Свойства"). В окне будут выведены детальные сведения о версии Windows и типе системы. В нашем случае это "64-разрядная операционная система". Но в чём кроются различия между 32- и 64-разрядными системами?

Разница между 32- и 64-битными системами

Когда мы говорим о 64-битных или 64-разрядных операционных системах, нам нужно различать 64-битные вычисления, которые важны для высокой производительности, а также 64-битную адресацию для поддержки больших объёмов памяти. У 64-битной операционной системы используются регистры шириной 64 бита, 64-битные типы данных, и система внутри себя может адресовать данные с помощью 64-битной адресации (что даёт поддержку максимального объёма памяти 16 экзабайт вместо 4 гигабайт). Впрочем, внешняя адресация и шины могут отличаться. В качестве примера можно привести адресацию памяти, которая обычно ограничена 40 или 48 битами.

64-битная ОС для своей работы требует использование 64-битного процессора. Большинство 64-битных систем могут выполнять 32-битное программное обеспечение в так называемом "режиме совместимости", который важен по причине того факта, что "родные" 64-битные приложения всё ещё встречаются довольно редко. Процессор при необходимости переключается в 32-битный режим. Запуск же 32-битной ОС на 64-битном CPU обычно приводит к тому, что процессор всё время работает в наследственном режиме. Если 64-битное программное обеспечение может на 64-битной ОС работать быстрее (если оно должным образом оптимизировано), то 32-битные приложения на 64-битных ОС обычно дают прежний уровень производительности.

Преимущества 64 бит

У 64-битных операционных систем есть несколько преимуществ. Во-первых, 32-битная версия Windows ограничена поддержкой максимум 4 Гбайт памяти, и даже при этом она не будет отдавать весь объём вашим приложениям - система Windows будет использовать часть памяти для собственных нужд, в результате вы получите 3 Гбайт или чуть больше. Поэтому максимальный объём памяти 32-битной Windows на самом деле ограничен 3+ Гбайт. 64-битная версия Windows будет поддерживать любой объём памяти, доступный сегодня.

Во-вторых, 64-битные ОС с большим количеством памяти лучше работают с большими файлами. Представьте себе 5-Гбайт файл под 32-битной версией Windows, где доступно всего 3 Гбайт памяти: системе придётся работать с файлом, загружая его в память по частям.

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

Недостатки 64 бит

Недостатком 64-битных вычислений является другая модель памяти, которая позволила увеличить максимальную ёмкость, а также отсутствие 64-битных приложений в целом. С одной стороны, не все приложения выигрывают от перехода на 64 бита. С другой стороны, низкоуровневые компоненты, такие как драйверы, доступны не для всех устройств, с которыми вы планируете работать. Драйверы являются прослойкой между операционной системой и "железом", то есть почти все они не могут выполняться в 32-битном режиме совместимости. Другими словами, если для сканера, принтера, звуковой карты или любого другого устройства нет 64-битного драйвера, то вы не сможете использовать его в 64-битном окружении.

Детали и проблемы операционных систем

Розничные версии Windows обычно доступны как в 32-, так и в 64-битных версиях. Есть специальные диски для разработчиков, которые содержат обе версии системы: например, Vista DVD для подписчиков Microsoft MSDN. Однако при установке уделите внимание тому, правильную ли версию Windows вы устанавливаете, поскольку после установки изменить версию не получится.

Сколько памяти вам нужно?

Переход на 64-битную операционную систему и большой объём памяти даст не только дополнительное "жизненное пространство", но и позволит операционным системам, таким как Windows Vista, работать более эффективно. Во-первых, операционная система будет реже записывать данные в медленный файл подкачки на жёстком диске, что она выполняет при нехватке оперативной памяти. Во-вторых, Vista может использовать дополнительную память с помощью функции SuperFetch, предварительно загружающей данные приложений в порядке значимости: то есть самые популярные приложения уже будут буферизованы в памяти после загрузки ОС. В итоге приложения будут запускаться практически мгновенно. Комплекты памяти на 4 или даже 8 гигабайт сегодня стоят вполне доступно, поэтому мы рекомендуем оснастить компьютер, по крайней мере, 4 Гбайт памяти. Опытным пользователям и энтузиастам сегодня можно рекомендовать уже 8 Гбайт памяти для 64-битной системы. 2 Гбайт памяти - тоже популярный объём, но при этом вы не получите особого выигрыша от возможностей адресации 64-битной системы (фактически, 64-битная ОС занимает чуть больше места в памяти, чем 32-битная, поэтому ставить 64-битную ОС на компьютер с памятью 3, 2 или 1 Гбайт можно только с точки зрения будущего апгрейда).

32-битные проблемы Windows

Как мы уже упоминали выше, 32-битная версия Windows не даст вам полный объём 4 Гбайт памяти, которую вы установили в систему, поскольку компоненты и устройства Windows требуют выделенного адресного пространства в пределах первых 32 бит (4 Гбайт) оперативной памяти. Видеокарта с 512 Мбайт памяти требует привязки этой памяти к оперативной, что снижает доступную ёмкость на 512 Мбайт. Windows Vista обычно ограничивает доступную память 3,12 Гбайт, но, в зависимости от "железа", эффективный доступный объём может быть ещё ниже. Добавления, такие как оснастка Microsoft .NET, могут потреблять 200 Мбайт или больше. Linux делает всё несколько по-иному, поскольку ядро никогда не требует больше 1 Гбайт; поэтому процессам можно отводить до 3 Гбайт памяти.

Physical Address Extension вместо 64-битной Windows?

Некоторые версии Windows поддерживают функцию под названием Physical Address Extension (PAE), позволяющую использовать больше 4 Гбайт памяти благодаря специальной технологии переадресации. Но Windows при этом использует систему переадресации с тремя уровнями страниц, а не с двумя. Технология PAE успешно зарекомендовала себя в серверах, но в настольных системах её поддержка сталкивалась с проблемами совместимости драйверов из-за недостаточной стандартизации.

Проблемы с драйверами

Поскольку драйверы работают между "железом" и операционной системой, вы не сможете установить 32-битные драйверы на 64-битную операционную систему, пусть даже почти все 32-битные приложения будут работать под вашей 64-битной Windows. Поэтому первым шагом при подготовке перехода на 64-битную версию является тщательная проверка доступности драйверов в 64-битных вариантах. Если вы просто хотите познакомиться и поработать с версией x64 Windows, то можете временно установить её на компьютер - Microsoft даёт 30-дневный ознакомительный период, который позволяет поработать с системой, протестировать её и проверить появление проблем с драйверами. А уже потом активируйте вашу копию Windows.

XP и Vista

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

Некритичные драйверы

Вам не потребуются драйверы чипсета или видеокарты, если им насчитывается несколько лет. В таком случае Windows Vista x64 сможет поддержать вашу систему благодаря встроенным драйверам, пусть даже их производительность будет чуть хуже. AMD и Intel обычно быстро выпускают драйверы платформы для важных операционных систем, да и AMD/ATI и Nvidia вовремя предоставляют драйверы для актуальных видеокарт Radeon и GeForce. Причём сегодня они поддерживают концепцию унифицированного драйвера, когда в одном комплекте вы получаете набор всех необходимых драйверов, то есть искать и скачивать драйверы по отдельности не нужно.

Критичные драйверы

Намного сложнее найти драйверы для нестандартных компонентов, особенно периферии. Каждый принтер, сканер, "картовод", мышь, клавиатура и сетевая карта несут потенциальный риск несовместимости, если им исполнилось больше полутора-двух лет. Поэтому проверьте наличие драйверов для вашей старой периферии, пусть даже она выпущена такими крупными игроками, как Brother, Canon, HP, Samsung и другими. Даже популярные марки просто не гарантируют наличие 64-битных драйверов.

64-битная операционная система на ноутбуках

Хотя ноутбуки выглядят иначе, чем обычные настольные ПК, да и стоят дороже, технологически они недалеко от них ушли. Они используют меньшие по размеру 2,5" или 1,8" жёсткие диски, более эффективные процессоры и видеокарты, да и все комплектующие сделаны компактными, лёгкими и эффективными. Но принцип построения компьютера такой же, что и у ПК.

В результате почти все ноутбуки, продаваемые сегодня, могут работать с 64-битными операционными системами, да и падение цен на память для ноутбуков было таким же существенным, что и для настольных ПК, то есть сегодня можно установить 4 Гбайт памяти в ноутбук за совершенно разумные деньги.

Некоторые ноутбуки, базирующие на чипсете Intel GM45, например, многие модели Lenovo, поддерживают до 8 Гбайт памяти. Но большинство ноутбуков такой поддержкой не обладают.

Много памяти на ноутбуке

Большой объём памяти необходим для настольного ПК если вы хотите выжать из него максимальную производительность, и у ноутбуков ситуация сравнимая, пусть и немного иная. В данном случае дополнительная память тоже не помешает, но если вы хотите избежать лишних падений производительности. Помните, что жёсткие диски для ноутбуков по-прежнему примерно на 50% медленнее настольных моделей, то есть нужно как можно реже обращаться к винчестеру за данными. Конечно, можно купить быстрый твёрдотельный накопитель (SSD) на флэш-памяти, но такой апгрейд обойдётся существенно дороже, чем добавление памяти.

Ноутбуки тоже страдают из-за ограничения 3+ Гбайт в 32-битной версии Windows, но никто не мешает установить 64-битную версию Windows Vista для поддержки полного объёма 4 Гбайт. Некоторые ноутбуки позволяют установить даже 8 Гбайт памяти, но большинство ограничивают память 4 Гбайт. Подобный объём памяти позволяет снизить использование файла подкачки, да и функция SuperFetch будет работать более эффективно. Единственный недостаток при этом кроется во времени гибернации - чем больше объём памяти, тем дольше будет выполняться этот процесс.

64-битные проблемы ноутбуков

Все проблемы с драйверами, которые мы упоминали выше, также можно отнести и к ноутбукам. Причём в данном случае проблемы будут более острыми, поскольку ноутбуки обычно содержат больше встроенной периферии по сравнению с настольным ПК, и каждому устройству требуется драйвер. Каждый ноутбук содержит тач-пад, который программируемый, но драйвер ему тоже нужен. Встроенные компоненты, такие как модуль Bluetooth, чип TPM, датчик отпечатка пальцев и другие тоже требуют драйверы.

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

Потенциальные проблемы с накопителями

Мы уже обсудили некоторые проблемы, но есть ещё один фактор, который станет всё более значимым в будущем: накопители. Здесь есть два "подводных камня", из которых только второй связан с 32 битами против 64. Но мы рассмотрим оба.

GPT вместо MBR позволяет создавать разделы больше 2 Тбайт. Однако для загрузки с такого раздела требуется расширенная версия EFI вместо обычного BIOS.

В ожидании EFI

Возможно, вы уже знаете об ограничениях записи Master Boot Record (MBR), являющейся частью тома жёсткого диска. Из неё BIOS берёт код загрузки для запуска операционной системы. К сожалению, MBR ограничивается ёмкостью в 2 Тбайт, и, как все мы знаем, жёсткие диски уже достигли подобного объёма. Проблему можно решить, установив последний пакет обновления (Service Pack) на Windows XP и Windows Server 2003, либо перейдя на Windows Vista или Server 2008. Во всех случаях MBR будет заменена так называемой GPT, GUID Partition Table, для разделов размером больше 2 Тбайт. В отличие от MBR, GUID поддерживает разделы до 256 Тбайт, чего на данный момент вполне достаточно.

Однако если GPT поддерживает создание крупных разделов для чтения и записи, загружаться с такого раздела вы сможете только если ваша платформа основана на Extensible Firmware Interface (EFI) или Unified EFI (UEFI, также известный как EFI 2.0) вместо классического BIOS. Рано или поздно этот интерфейс станет стандартом общения между операционной системой и "железом". К сожалению, EFI медленно распространяется в мире ПК; только Apple достаточно умно сразу же перешла на EFI для компьютеров Mac на процессорах Intel. Поэтому если вы хотите загружаться с раздела больше 2 Тбайт, то приготовьтесь к апгрейду платформы. Ситуация осложняется тем, что MBR нельзя конвертировать в GPT, поэтому с RAID-массивами могут возникнуть проблемы: если вы превысите ёмкость массива 2 Тбайт, то можете потерять возможность загрузки с него.

Список функций, которые добавляет EFI, включает DRM, поддержку сетевых функций администрирования, поддержку видеокарты до загрузки ОС, оболочку для запуска приложений EFI, а также драйверы, которые работают как модули EFI. В результате разработка драйверов будет идти на уровне, более близком к "железу", то есть они могут стать независимы от ОС. Windows 7 на системах EFI не придётся запускать драйверы; они будут активироваться в момент загрузки ПК.

Проблемы с драйвером

Наконец, могут возникнуть проблемы с накопителями ёмкостью больше 2 Тбайт и под 64-битной операционной системой, несмотря на наличие драйверов для 64-битных окружений. Некоторые драйверы, которые заявлены для 64-битных окружений и подписаны соответствующим образом, могут внутри использовать 32-битную адресацию секторов - в результате Windows будет неправильно отображать ёмкость. Когда мы тестировали накопитель LaCie 4big Quadra , то обнаружили, что на одной тестовой системе он распознался с ёмкостью около 800 Гбайт, хотя суммарная ёмкость должна была составлять 2800 Гбайт (2,8 Гбайт, то есть 3-Гбайт конфигурация RAID 5 с четвёртым 1-Тбайт жёстким диском внутри LaCie). Вероятно, первые 32 бита адресации не работали, в результате чего операционная система смогла адресовать только ёмкость за пределами 2 Гбайт.

Всё это может привести к печальным результатам: представьте себе конфигурацию, в которой вы создаёте массив RAID 0 с полной ёмкостью 4 Тбайт. Вы форматируете раздел и начинаете с ним работать. Когда вы достигнете 2 Тбайт, то Windows не сможет использовать оставшийся объём, из-за сбойного драйвера Windows начнёт повторную запись с первых секторов, уничтожая записанные там данные. Вряд ли с восстановлением такого кошмара легко справятся даже соответствующие компании.

Поэтому перед использованием накопителя с ёмкостью больше 2 Тбайт мы рекомендуем тщательно проверить его ёмкость с помощью Diskpart. Или даже провести тесты с ёмкостью больше 2 Тбайт, чтобы убедиться, что всё в порядке.

Заключение

Некоторые проблемы, рассмотренные в нашей статье, разочаровывают, особенно если учесть небольшой прирост производительности при переходе на 64-битную версию Windows (а потенциально и отсутствие прироста). Однако есть несколько ключевых моментов, которые следует принимать во внимание:

  • 64-битная версия ОС даёт больше преимуществ, чем недостатков, особенно поддержку конфигураций с памятью больше 3 Гбайт, которые в свете недорогих 8-Гбайт наборов смотрятся всё привлекательнее;
  • 64-битная ОС работает примерно так же, как и 32-битные системы за исключением некоторых high-end приложений;
  • Ситуация с драйверами за последние месяцы улучшилась, но будьте готовы столкнуться с проблемами поиска 64-битного драйвера для некоторого "железа";
  • Поиск драйвера для ноутбука может быть по-прежнему проблематичным;
  • Нет ничего страшного в использовании 32-битной версии Windows, но учтите тот факт, что 64-битная версия потребует полной переустановки (в том числе и приложений);
  • Любая конфигурация с системным разделом больше 2 Тбайт требует использования EFI вместо привычного BIOS для загрузки операционной системы;

Настало время перейти к выводам:

  • Комплекты памяти на 4 или даже 8 Гбайт сегодня стоят очень доступно, при этом подобный объём заметно ускоряет работу системы из-за снижения обращений к файлу подкачки и работы функции SuperFetch под Windows Vista;
  • Энтузиастам настоятельно рекомендуется переходить на 64-битную систему, пусть даже при этом придётся заменить старую периферию или "железо";
  • 64-битное окружение на ноутбуке имеет меньше смысла, поскольку платформа обычно ограничивает память объёмом 4 Гбайт. Впрочем, если есть все необходимые драйверы, мы рекомендуем сделать подобный переход в целях повышения производительности;
  • Сегодня использовать 64-битную систему вполне безопасно, если вы покупаете новый ПК или ноутбук, особенно если она уже входит в комплект;
  • Перенос существующей системы на 64-битное окружение требует предварительной работы по поиску совместимых драйверов, также следует обратить внимание и на другие проблемы, описанные выше.

Наиболее заметный прогресс в развитии возможностей Windows после появления Windows NT и Windows 95 связан с приходом 64-разрядного программирования и расширением Win32 до Win64. На объединенный API обычно ссылаются просто как на Windows API, и именно такой практики мы придерживались на протяжении всей книги. API Win64 обеспечивает возможность выполнения в Windows наиболее крупных и требовательных в отношении ресурсов приложений уровня предприятий и приложений для научных расчетов. 64-разрядные системы позволяют программам использовать гигантские адресные пространства, которые выходят далеко за предел 4 Гбайт, обусловленный 32-битовой адресацией.

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

Нынешнее состояние Win64

В данном разделе анализируется состояние поддержки компанией Microsoft интерфейса Win64 на различных системах и процессорах, сложившееся к концу первого полугодия 2004 года. Поскольку ситуация постоянно меняется, приведенную ниже информацию следует рассматривать лишь в качестве "моментального снимка" реального положения дел. Тем не менее, на охватываемых здесь аспектах программирования эволюция поддержки Win64 никак не сказывается.

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

Поддержка процессоров

Win64 поддерживается или, о чем можно говорить почти с полной уверенностью, будет поддерживаться, по крайней мере, на трех различных семействах процессоров:

Семейство процессоров Itanium (Itanium Processor family, IPF) компании Intel, архитектура которых полностью отличается от известной архитектуры Intel x86. IPF предоставляет большие регистровые файлы (включающие 128 регистров общего назначения), каналы многоадресных команд, встроенные трехуровневые кэши, а также множество других средств, обеспечивающих высокую производительность и 64-битовую адресацию. В настоящее время на рынок поставляются процессоры Itanium 2, и хотя их предшественник - процессор Itanium - является теперь уже устаревшим, нам будет удобно ссылаться на все семейство просто как на "процессоры Itanium".

Процессоры Opteron и Athlon 64 (AMD64) компании AMD, предназначенные, соответственно, для серверов и рабочих станций. Архитектуру AMD64 можно рассматривать как расширение архитектуры Intel x86, допускающее 64-битовую виртуальную адресацию и параллельное выполнение 32– и 64-битовых операций.

32/64-разрядные процессоры компании Intel, сравнимые с процессорами AMD64. Во время написания этой книги ожидалось, что технология 64-разрядного расширения будет применена в первую очередь в процессорах Xeon. Как и прогнозировалось, такие процессоры появились на рынке в конце 2004 года.

Поддержка Windows

API Win64 компании Microsoft предназначен для поддержки 64-разрядных архитектур таким способом, при котором в существующие исходные и двоичные коды требуется вносить лишь минимальные изменения. В настоящее время имеется несколько отдельных версий Win64.

Windows XP 64-bit Edition доступна в виде, по крайней мере, двух версий. Бета-версия компании Microsoft поддерживает только процессор AMD Opteron. Компания Hewlett Packard выводит на рынок несколько моделей рабочих станций на базе процессоров Itanium с уже установленной системой Windows XP-Itanium2.

Windows Server 2003 Enterprise Edition for 64-bit Extended Systems в настоящее время также проходит бета-тестирование. Эта версия обеспечивает поддержку процессоров AMD Opteron и Intel Xeon с использованием технологии 64-разрядного расширения.

Windows Server 2003 Enterprise Edition for 64-bit Itanium-based Systems поддерживает, как говорит само ее название, серверы и рабочие станции, использующие один или несколько процессоров Itanium. Существует также версия Datacenter Edition. Например, эта версия устанавливается на системах Integrity компании Hewlett Packard, которые в настоящее время также появляются на рынке.

Поддержка сторонних компаний

На платформе Win64 доступны многочисленные базы данных, математические библиотеки, прикладные системы уровня предприятия, системы с открытым исходным кодом, а также целый ряд других систем. Тем не менее, каждый раз, когда планируется перенос программ на эту платформу, доступность необходимых продуктов сторонних компаний должна предварительно проверяться.

Обзор 64-разрядной архитектуры

С точки зрения программиста основная трудность при переходе от 32-разрядной модели к 64-разрядной заключается в том, что размер указателей и таких системных типов данных, как size_t и time_t, теперь может составлять 64 бита. Поэтому виртуальное адресное пространство процесса уже не ограничивается 4 Гбайт (фактически доступны приложениям только 3 Гбайт). Таким образом, перенос программ из Win32 в Win64 по существу требует лишь "удлинения" указателей, с чем связаны лишь самые минимальные последствия для пользовательских данных в модели Windows.

Необходимость в 64-битовой адресации

Возможности доступа к большим адресным пространствам требуются многим приложениям. Можно было бы привести множество примеров, аналогичных тем, которые перечислены ниже.

Приложения для обработки изображений. Системы, использующие адресные пространства размером 4 Гбайт, в состоянии обеспечить лишь 20-секундное воспроизведение телевизионного изображения высокой четкости (High-Definition Television, HDTV) в реалистичных цветах.

Автоматизированное проектирование механических (Mechanical Computer-Aided Design, MCAD) и электронных (Electronic Computer-Aided Design, ECAD) устройств. Для проектирования сложных сборочных узлов требуется наличие более 3 Гбайт памяти, а проектирование микросхем предъявляет к памяти несоизмеримо более высокие требования.

Базы данных и хранилища данных. Использование файлов с размерами в несколько сотен Гбайт не является чем-то необычным, и возможность доступа к виртуальным адресным пространствам сопоставимых размеров значительно упрощает обработку таких файлов.

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

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

Тем не менее, многие 32-разрядные приложения смогут работать нормально и на новой платформе, и на первом этапе для их переноса не надо будет ничего предпринимать. Для таких персональных приложений, как Microsoft Office или Adobe PageMaker, в течение некоторого времени переход к 64-битовой адресации, по-видимому, не потребуется. Следовательно, Windows будет поддерживать обратную совместимость.

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

Опыт UNIX

PC-системы всегда отставали от универсальных вычислительных систем (мэйнфреймов) и систем на основе UNIX в том, что касается базовых функциональных возможностей и масштабируемости. То же самое остается справедливым и в случае 64-разрядных архитектур.

Основные поставщики UNIX-систем предоставляют 48– и 64-разрядные микропроцессоры с начала 90-х годов прошлого столетия.

Основные поставщики UNIX-систем поддерживают 64-разрядные API на протяжении примерно того же периода времени.

Сообщество пользователей UNIX остановилось на выборе в качестве стандарта так называемой модели LP64, отличающейся от модели Р64, принятой в Win64, о чем далее еще будет говориться.

Переходы от 32 к 64 битам всегда осуществлялись сравнительно простым, если не сказать - тривиальным образом, и можно ожидать, что то же самое будет наблюдаться и при переходе от Win32 к Win64.

Опыт перехода от 16-разрядных версий Windows к 32-разрядным

Переход от 16-разрядных версий Windows к 32-разрядным начался в начале 90-х годов прошлого столетия с появлением Windows NT, и набрал ускорение после того, как использование Windows 95 стало обычным делом. Каким бы соблазнительным ни казалось предположение о том, что нас ожидает повторение той же истории, рассматриваемые нами ситуации отличаются в нескольких аспектах.

Windows NT и Windows 95 были первыми из широко используемых "реальных" операционных систем для PC в том смысле, что обе системы поддерживали обмен страницами по запросу, потоки, вытесняющую многозадачность и множество других возможностей, которые были описаны в главе 1.

Хотя API Win32 значительно расширил полезное адресное пространство, что делает и Win64, усовершенствования этим не ограничивались. Неуклюжие и устаревшие, несмотря на свою популярность, модели расширенной памяти были заменены другими. Аналогичная модель расширенной памяти (не описывается в данной книге) была введена и в Windows 2000, однако общие последствия этого шага в данном случае были не столь существенными.

В API Win32 было введено множество новых функциональных возможностей, чего нельзя сказать о Win64.

Надолго ли хватит 64 бит?

Что касается мира PC, в котором возникла Windows, то можно утверждать, что первоначальная 16-разрядная модель Intel x86 (фактическое адресное пространство которой является 20-битовым) просуществовала в течение более десяти лет, и столько же времени уже существует и 32-разрядная архитектура. Однако переход к Win64 и 64-разрядному программированию, вообще говоря, происходит медленнее, чем происходил аналогичный переход к 32 битам. Вместе с тем, в обоих случаях переход миникомпьютеров и серверов на следующий уровень осуществлялся, по крайней мере, за 10 лет до того, как это начинало происходить с PC. Тогда вполне естественно задаться вопросом о том, следует ли ожидать перехода серверов или PC к 128 битам в будущем. Берусь утверждать, что любое расширение такого рода произойдет не раньше, чем через 10 лет, исходя из одной лишь величины 64-разрядного адресного пространства.

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

Модель программирования Win64

В зависимости от выбора способа представления таких стандартных типов данных С, как указатели и целочисленные типы данных (long, int и short), a также от того, вводятся или не вводятся нестандартные типы данных, возможны несколько вариантов модели 64-разрядного программирования. Напомним, что в стандарте ANSI С размеры типов данных не определяются строго, хотя и требуется, чтобы размер данных типа long int был не меньше размера данных типа int, а размер данных типа int был не меньше размера данных типа short int.

Цели

Цель состоит в том, чтобы ввести единое определение Windows API (то есть, общее для Win32 и Win64), благодаря чему можно будет использовать единый базовый исходный код. Использование этого единого определения может потребовать внесения некоторые изменений в исходный код, но эти изменения должны быть сведены к минимуму.

Microsoft выбрала модель LLP64 (целые числа типа long и 64-битовые указатели), на которую обычно ссылаются просто как на модель Р64. В частности, существуют следующие определения типов данных, применимые как к данным со знаком, так и к данным без знака:

Char - 8 бит, и wchar - 16 бит.

Short - 16 бит.

Int - 32 бита.

Long int - также 32 бита.

Размер указателя любого типа, например PVOID, составляет 64 бита.

Для тех случаев, когда требуются данные строго определенного размера, предусмотрены дополнительные типы данных. Так, компилятор Microsoft различает следующие типы данных: _int16, _int32 и _int64.

Типы данных

Приведенные в этой главе таблицы взяты непосредственно из оперативной справочной системы и представляют единую модель данных Windows (Windows Uniform Data Model). Определения типов можно найти в заголовочном файле BASETSD.H, входящем в состав интегрированной среды разработки приложений Microsoft Visual Studio .NET (версия 7.0) и версию 6.0 этой системы.

Типы данных фиксированной точности

Обозначения типов данных фиксированной точности получаются из обычных обозначений типов данных Win32, таких как DWORD или LONG, добавлением суффикса размера, как показано в табл. 16.1.


Таблица 16.1. Типы данных фиксированной точности

Тип данных Описание
DWORD32 32-битовое целое без знака
DWORD64 64-битовое целое без знака
INT32 32-битовое целое со знаком
INT64 64-битовое целое со знаком
LONG32 32-битовое целое со знаком
LONG64 64-битовое целое со знаком
UINT32 Целое типа INT32 без знака
UINT64 Целое типа INT64 без знака
ULONG32 Целое типа LONG32 без знака
ULONG64 Целое типа LONG64 без знака

Типы данных, соответствующие точности указателей

Процитируем выдержку из статьи Microsoft под названием "The New Data Types" (доступна на Web-сайте компании Microsoft): "Точность этих типов данных отражает изменение точности указателей (то есть, они становятся 32-битовыми в коде Win32 и 64-битовыми в коде Win64). Поэтому приведение указателей к одному из этих типов при выполнении арифметических операций с указателями является безопасным; при 64-битовой точности указателей размер данных этого типа будет составлять 64 бита. Также и типы данных, соответствующие счетчикам, отражают максимальный размер данных, на которые может ссылаться указатель." Таким образом, эти типы данных обеспечивают автоматическое изменение размеров целочисленных типов данных в зависимости от изменения размеров указателей, в связи с чем их иногда называют полиморфными (polymorphic data types) или платформо-масштабируемыми (platform scaled data types) типами данных. Типы данных, соответствующие точности указателей, перечислены в табл. 16.2, взятой из той же статьи.

Наиболее важным из них является тип данных SIZE_T, который уже использовался нами при описании размеров блоков памяти в главе 5.

Наконец, заметьте, что в Win64 размер данных типа HANDLE составляет 64 бита.


Таблица 16.2. Типы данных, соответствующие точности указателей

Тип данных Описание
DWORD_PTR Длинное целое без знака, соответствующее точности указателей.
HALF_PTR Половина размера указателя. Используется в структурах, содержащих указатель и два поля небольшого размера.
INT_PTR Целое со знаком, соответствующее точности указателей.
LONG_PTR Длинное целое со знаком, соответствующее точности указателей.
SIZE_T Максимальное количество байтов, на которые может ссылаться указатель. Используется для счетчиков, которые должны охватывать весь диапазон возможных значений указателей.
SSIZE_T Тип SIZE_T со знаком.
UHALF_PTR Тип HALF_PTR без знака.
UINT_PTR Тип INT_PTR без знака.
ULONG_PTR Тип LONG_PTR без знака.

Пример: использование указательных типов данных

Аргументом потока, передаваемым функции потока при вызове CreateThread и _beginthreadex (см. главу 7), является указатель типа PVOID. Иногда программист может захотеть передать функции потока только целочисленное значение, указывающее, например, номер потока или индекс данных в глобальной таблице. Тогда функцию потока, интерпретирующую параметр как целое без знака, можно было бы написать следующим образом:

DWORD WINAPI MyThreadFunc(PVOID Index_PTR) {
Index = (DWORD_PTR)Index_PTR;

Аналогичным образом, зная, что фактический аргумент является целым числом, вы могли бы записать соответствующий участок кода основного потока следующим образом:

for (Ix = 0; Ix < NumThreads; Ix++) {
hTh = _beginthreadex(NULL, 0, MyThreadFunc, (PVOID)Ix, 0, NULL);

Заметьте, что в уже существующий код вам придется внести необходимые изменения. Об этом говорится далее в разделе "Перенос существующего кода".

Предостережение

Пока, по крайней мере, в случае первоначальных вариантов реализации, не следует рассчитывать на получение доступа ко всему виртуальному адресному пространству. Размер виртуальных адресных пространств может ограничиваться такими, например, значениями, как 512 Гбайт, что соответствует ограничению данных 39 битами. Можно надеяться, что со временем, по мере эволюции процессоров и систем, указанный верхний предел увеличится.

Различия между Windows и UNIX

В Windows и UNIX выбраны различные стратегии. Большинство поставщиков UNIX-систем реализуют модель LP64, в которой размер как длинного целочисленного, так и указательного типов данных составляет 64 бита. Такую модель иногда называют моделью "I32, LP64", чтобы подчеркнуть тот факт, что размер данных типа int по-прежнему составляет 32 бита. Таким образом, различие между обеими системами в рассматриваемом нами смысле сводится к различию в размерах целых чисел типа long. К тому же, типы данных, перечисленные в таблицах 16.1 и 16.2, приняты только в Windows.

Для каждой из двух моделей имеются разумные обоснования, и в белых страницах "Aspen", фигурирующих в списке дополнительной литературы к этой главе, приводятся аргументы, объясняющие выбор, сделанный в UNIX. И все же, было бы гораздо удобнее, если бы в обеих ОС действовали одни и те же соглашения.

Перенос имеющегося программного кода

Единая модель данных Windows призвана минимизировать объем возможных изменений исходного кода, но полностью избежать необходимости внесения изменений невозможно. Например, такие функции, как HeapCreate и HeapAlloc (глава 5), которые имеют дело непосредственно с распределением памяти и размерами блоков памяти, должны использовать либо 32-битовое, либо 64-битовое поле, в зависимости от модели. Точно так же, следует всегда тщательно проверять код, чтобы выяснить, не используются ли в нем скрытые допущения относительно размеров полей и указателей.

Сначала будут описаны изменения, связанные с использованием API, которые, главным образом, касаются функций управления памятью.

Изменения, связанные с использованием API

Наиболее заметные изменения, связанные с использованием API, затрагивают функции управления памятью, введенные в главе 5. В новых определениях в полях счетчиков используется тип данных SIZE_T (см. табл. 16.2). Например, теперь прототип функции HeapAlloc будет иметь следующий вид:

LPVOID HeapAlloc(HANDLE hHeap, DWORD dwFlags, SIZE_T dwBytes);

Количество запрошенных байтов, указываемое в третьем поле, выражается данными типа SIZE_T и поэтому является 32– или 64-битовым целым без знака. Ранее данные в этом поле имели тип DWORD (всегда 32 бита).

Данные типа SIZE_T используются в соответствии с необходимостью в главе 5.

Изменения, связанные с устранением неявных допущений относительно предполагаемых размеров элементов данных

Источником многих проблем могут служить различного рода допущения относительно размеров данных. Несколько возможных примеров этого приводятся ниже.

Тип DWORD больше нельзя использовать при указании размера блоков памяти. Вместо него следует применять типы данных SIZE_T или DWORD64.

Необходимо тщательно проверять размеры полей, используемых взаимодействующими процессами, независимо от того, выполняются ли они на одной и той же или на разных системах. Так, в главе 12 для того, чтобы перенос программы на системы UNIX или Win64 не приводил к возникновению 64-битовых полей, поля размера в сообщениях сокетов определялись с использованием типа данных LONG32. При организации связи между процессами Windows, использующими разные модели, размеры блоков памяти не должны превышать 2 Гбайт.

Для вычисления размера структур или типов данных следует использовать функцию sizeof; эти размеры будут разными для Win32 и Win64, если в структуру данных входят указатели или элементы данных SIZE_T. Литеральные константы размеров должны быть исключены (разумеется, этому совету было бы неплохо следовать при любых обстоятельствах).

Необходимо проверять, не содержаться ли в объединениях, в которых указатели используются совместно с арифметическими типами данными, неявные предположения относительно размеров типов данных.

Любое приведение типов или иное преобразование, в котором участвуют указатели и данные арифметического типа должно тщательно проверяться. Обратитесь, например, к фрагментам кода, приведенным в разделе "Пример: использование указательных типов данных".

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

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

При выводе на печать указателей вместо спецификатора формата %x используйте спецификатор %p, а при выводе платформо-масштабируемых данных, например типа SIZE_T, - спецификатор %ld.

Функции setjmp и longjmp должны использовать заголовочный файл , а не какие-либо допущения относительно возможного размера переменной jmp_buf, в которой должен храниться указатель.

Пример: перенос программы sortMM (программа 5.5)

В программе sortMM (программа 5.5) интенсивно используются указатели, и в частности, арифметика указателей. Подготовка этой программы к переносу, в результате чего ее можно будет компоновать и выполнять под управлением как Win32, так и Win64, иллюстрирует обычно используемые методики, а также демонстрирует, как легко невольно сделать допущения относительно размера указателя.

Использование предупреждающих сообщений компилятора

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

Входящий в состав Microsoft Visual Studio 7.0 (.NET) компилятор C++ компании Microsoft может конфигурироваться для выдачи таких сообщений. Для этого достаточно задать в командной строке компилятора опции –Wp64 и –W3. В Visual Studio для установки этих опций потребуется выполнить следующие действия:

Выберите страницу Project Properties (Свойства проекта).

Откройте папку C++.

Щелкните на кнопке General (Общие).

Выберите вкладку Detect 64-bit Portability Issues (Определять элементы переноса в 64 разряда) и выберите вариант Yes (/Wp64) (Да (/Wp64)). Оставьте для уровня диагностики (warning level) значение 3.

После этого, в процессе сборки проекта в окне вывода будут отображаться соответствующие предупреждающие сообщения. При построении в Microsoft Visual Studio 7.0 проектов, которые находятся на Web-сайте книги, вывод предупреждающих сообщений конфигурировался именно так, как описано выше.

Код до подготовки к переносу

Большая часть программного кода sortMM.с не приводит к выдаче предупреждающих сообщений, но один участок кода на шаге 6 (см. программу 5.5) вызывает их генерацию. Соответствующий фрагмент кода вместе с номерами строк представлен в программе 16.1. Имейте в виду, что в последующих версиях этой программы номера строк могут поменяться.

Программа 16.1. sortMM.с: код до подготовки к переносув Win64, часть 1
55 TCHAR _based (pInFile) *pIn;
132 for (iKey = 0; iKey < FsX / RSize; iKey++) {
133 WriteFile(hStdOut, &ChNewLine, TSIZE, &nWrite, NULL);
135 /* Приведение типа рХ играет весьма важную роль, поскольку это
136 указатель на байт, а нам нужны четыре байта указателя типа _based. */
137 pIn = (TCHAR _based(pInFile)*)*(LPDWORD)pX;
139 while ((*pIn != CR || *(pIn + 1) != LF) && (DWORD)pIn < FsIn) {
140 WriteFile(hStdOut, pIn, TSIZE, &nWrite, NULL);

Сообщения компилятора далее приводятся, но прежде чем ознакомиться с ними, вы, возможно, захотите просмотреть код, чтобы определить возможные причины выдачи будущих предупреждающих сообщений. Не забывайте о том, что нашей целью является придание программе такого вида, который обеспечивает ее сборку и корректное выполнение как в режиме Win32, так и в режиме Win64.

Предупреждающие сообщения компилятора

Предупреждающие сообщения компилятора для этого фрагмента кода отчетливо демонстрируют неявное предположение о том, что размер указателя составляет 4 байта.

SORTMM.C(137) : warning C4312: "type cast" : conversion from "DWORD" to "TCHAR __based(pInFile) *" of greater size
SORTMM.C(139) : warning C4311: "type cast" : pointer truncation from "TCHAR __based(pInFile) *" to "DWORD"

Первое предупреждение (строка 137) является существенным. Разыменование рХ после его приведения (type cast) к типу LPDWORD приводит к 32-битовому значению, которое затем назначается указателю pIn. Почти с полной уверенностью можно утверждать, что разыменование pIn вызовет исключение или приведет к возникновению иной серьезной ошибки. Правильным решением для строки 137 будет замена приведения к типу LPDWORD приведением к типу указателя LPTSTR следующим образом:

pIn = (TCHAR _based(pInFile)*)*(DWORD_PTR)pX;

Сообщение для строки 139 довольно интересно, поскольку мы сравниваем базовый указатель с размером файла. Если предположить, что файл не является гигантским, то на это предупреждение можно не обращать внимания. При этих условиях можно было бы проигнорировать и сообщение для строки 137. Однако мы учтем перспективу и приготовимся к работе с гигантскими файлами, пусть даже типом FsSize пока и является DWORD. Допуская полный диапазон значений указателя, мы должны преобразовать строку 139 следующим образом:

while ((*pIn != CR || *(pIn + 1) != LF) && (SIZE_T)pIn < (SIZE_T)FsIn) {

Второй сегмент, относящийся к шагу 2b, порождает дополнительные предупреждающие сообщения, связанным с усечением типов (pointer truncation). Соответствующий фрагмент кода представлен в программе 16.2.

Программа 16.2. sortMM: код до подготовки к переносу в Win64, часть 2
174 /* Шаг 2b: Получить первый ключ; определить размер и начальный адрес ключа. */
177 /* Вычисляем адрес начала поля ключа. */
178 while (*pInScan !=""&& *pInScan != "\t") pInScan++;
179 /* Вычисленный конец поля ключа. */
181 KSize = ((DWORD)pInScan – KStart) / TSIZE;

Компилятор выводит следующие предупреждающие сообщения:

SORTMM.C(176) : warning C4311: "type cast" : pointer truncation from "TCHAR __based(pInFile) *" to "DWORD"
SORTMM.C(181) : warning C4311: "type cast" : pointer truncation from "TCHAR __based(pInFile) *" to "DWORD"

Исправления сводятся к использованию DWORD_PTR в качестве типа данных в строке 40 и при приведении типов в строках 176 и 181.

Дополнительные сообщения такого же характера появляются на шаге 2с в конце функции CreateIndexFile. На Web-сайте книги находится видоизмененный файл sortMM64.с, который пригоден как для Win32, так и для Win64, и использование которого позволяет избавиться от появления предупреждающих сообщений.

Предупреждающие сообщения и необходимые изменения, касающиеся других программ

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

В то же время, программа atouEX (программа 14.2) потребовала нескольких изменений, вызванных необходимостью использования типа данных DWORD_PTR для целочисленной переменной, хранящейся в поле hEvent структуры OVERLAPPED. Это обусловлено тем, что в Win64 размер данных типа HANDLE составляет 64 бита. Необходимые изменения отмечены в листинге программы, находящемся на Web-сайте.

Некоторые предупреждения могут быть проигнорированы. Например, такие функции, как strlen(), возвращают значения типа size_t. Длина строки будет часто назначаться переменным типа DWORD, вызывая появление предупреждающих сообщений относительно "потери точности" ("loss of precision"). Во всех практических ситуациях на предупреждения такого рода можно не обращать внимания.

Резюме

64-разрядный Windows API обеспечивает возможность выполнения на Windows-платформах, использующих 64-разрядные процессоры следующего поколения, большинства корпоративных, научных и инженерных приложений с высокими запросами к ресурсам. Предприняв всего лишь нескольких мер предосторожности, можно гарантировать выполнение программ как на платформе Win32, так и на платформе Win64.

Дополнительная литература

Наилучшими информационными источниками являются библиотеки MSDN и информация, размещенные на Web-сайте компании Microsoft. Ниже приведены некоторые рекомендованные ссылки, почерпнутые на Web-сайте компании Microsoft и из других источников.

Подготовленная специалистами компании Microsoft статья "New Data Types" доступна по адресу http://msdn.microsoft.com/library/default.asp?url=/library/en-us/win64/win64/the_new_data_types.asp. Таблицы 16.1 и 16.2 взяты именно из этой статьи.

"Introduction to Developing Applications for the 64-bit Version of Windows" - неплохое краткое введение в различные модели программирования. Эта статья доступна по адресу http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnnetserv/html/ws03-64-bitwindevover.asp. Статья содержит также краткий обзор архитектуры процессоров Itanium, хотя Itanium - не единственные процессоры, на которых может выполняться Win64.

Описание схемы UNIX "Aspen", подводящей прочный фундамент под модель LP64, доступно по адресу http://www.opengroup.org/public/tech/aspen/lp64_wp.htm.

В статье "Migration Tips", доступной по адресу http://msdn.microsoft.com/library/default.asp?url=/library/en-us/win64/win64/migration_tips.asp, вы найдете хорошие советы по переносу программ с 32-разрядных на 64-разрядные платформы, а также ряд полезных ссылок. Произведя поиск в Web, вы сможете найти дополнительную информацию и рекомендации.

Если вас интересуют общие вопросы архитектуры компьютеров, обратитесь к книге , являющейся стандартом в этой области. Информация, касающаяся процессоров Itanium, приводится в .

Обширная информация, касающаяся архитектур, основанных на 64-разрядном расширении, представлена на Web-сайтах компаний Intel и AMD:

http://www.intel.com и http://www.amd.com/us-en

Упражнения

16.1. Предположим, что p1 и р2 - указатели, связанные соотношением p1 > р2, и вы хотите получить расстояние между двумя элементами, вычитая один указатель из другого. При каких условиях будет действительным выражение: (DWORD)p1 – (DWORD)р2? Следует ли заменить это выражение на (DWORD)(p1 – р2), если расстояние между элементами невелико? Подсказка. Примите во внимание свойства обеих комплементарных арифметик.

16.2. Избавьтесь от выдачи компилятором предупреждающих сообщений относительно 64-битовых переменных, если таковые выводятся, в других программах, например, sortBT (программа 5.1) и ThreeStage (программа 10.5), в которых интенсивно используются указатели.

16.3. Если у вас имеется доступ к системе Win64, протестируйте 64-разрядные программы. Убедитесь также, что компоновка программ в 32-разрядном режиме по-прежнему осуществляется корректно.

Вскоре после выпуска Windows XP Professional x64 Edition компания Microsoft попыталась привлечь потребителей к новой версии, предлагая бесплатную программу замены Windows. Владельцы Windows XP Professional могут перейти на версию x64 совершенно бесплатно - только лицензия на 32-битную версию уже будет недействительна.

Но покупать кота в мешке не слишком удобно, поскольку 64-битные драйверы для ряда старых устройств и периферии так и не вышли. После перехода на x64 сканеры и мультимедийные устройства вроде web-камер могут просто не заработать, поскольку мелкие производители и так называемые "no-name" компании часто не торопятся переводить драйверы под Windows XP x64. Одна из причин - ограниченные ресурсы. Другая - побудить потребителя купить новый продукт с драйвером x64, если он этого желает.

Решив многие проблемы с запуском, Windows XP Professional x64 Edition поддерживает 64-битные процессоры. Система позволяет адресовать больше 4 Гбайт системной памяти, а увеличенная разрядность данных позволяет увеличить производительность приложений, перенесённых или написанных для 64-битной Windows.

Однако преимущество памяти может легко стать недостатком, если её у вас мало. Поскольку каждый элемент данных имеет длину 64 бита, 32-битные элементы для наследственных 32-битных приложений будут занимать в два раза больше памяти по сравнению с 32-битной ОС. С этой точки зрения, вряд ли имеет смысл переходить на Windows XP x64 с небольшим объёмом памяти. Если же вы хотите перейти на x64, то мы рекомендуем установить не меньше гигабайта ОЗУ.

Для нашего проекта мы взяли большую часть нашего стандартного тестового пакета (только 32-битные приложения) и сравнили производительность 32-битной Windows XP с Windows XP x64 Edition. Тестовая система Athlon 64 была оснащена двумя 512-Мбайт DIMM DDR400. Мы провели тесты как на самом быстром одноядерном процессоре Athlon 64 FX-57, так и на его двуядерном сопернике Athlon 64 X2 4800+.

Определить, готова ли ваша система для запуска 64-битной Windows, можно по процессору. Что касается AMD, то здесь необходим процессор с поддержкой AMD64 - вроде линейки Athlon 64 или новых Sempron. В случае Intel следует искать чип с включёнными расширениями EM64T (ранее известными как Yamhill или Clackamas) вроде линейки Pentium 4 600, Pentium D, Pentium Extreme Edition или Celeron D, если номер 300-й модели заканчивается на 1 или 6.

С точки зрения набора возможностей, никаких причин переходить на Windows XP Professional x64 Edition нет. Система по ощущениям и работе точно такая же, как и 32-битная Windows. Кроме того, x64 Edition сегодня продаётся, по большей части, в виде OEM-версии вместе с новыми компьютерами, так что купить её в рознице довольно проблематично.

Самой главной проблемой новой ОС является поддержка драйверов для устройств и периферии. Поэтому перед переходом на x64 следует всё тщательно взвесить. Если у вас есть устройство, которое вы не можете или не хотите заменить, и для которого нет 64-битных драйверов, то лучше остаться на 32-битной Windows. Особенно это касается периферии: принтеров, сканеров, мультимедийных устройств и т.д.

Версия x64 может работать с памятью вплоть до 32 Гбайт и запускать одновременно и 64-битные, и 32-битные приложения. Windows x64 использует уровень трансляции под названием WOW64 (Windows on Windows 64), который преобразует 32-битные команды, параметры и данные для 64-битного ядра. Хотя традиционная Windows XP способна адресовать до 4 Гбайт памяти (2 32), для приложений доступно только 2 Гбайт. У версии x64 Edition ситуация иная: для 32-битных приложений доступны все 4 Гбайт памяти. Ещё большее преимущество достигается при использовании 64-битных приложений, поскольку объём адресуемой памяти здесь ограничивается только объёмом установленной ОЗУ.

Поскольку за один такт теперь можно обрабатывать больше данных, то 64-битные приложения под Windows XP могут дать существенный прирост производительности. Однако до того, пока большая часть приложений будет переведена на 64-битную платформу, пройдёт ещё немало времени. Если вы используете, в основном, 32-битные приложения, то следует учитывать упомянутые проблемы.

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

На данный момент все процессоры AMD Athlon 64 и ряд настольных чипов Intel для Socket 775 поддерживают 64-битные вычисления. Они включают:

  • Pentium 4 от 630 до 670;
  • Pentium D 820, 830, 840;
  • Pentium Extreme Edition (двуядерный);
  • Celeron D 326, 331, 336, 341, 346, 351, 355.

Если только Mobile Sempron не поддерживает 64-битные вычисления, то Intel не планирует переводить мобильные процессоры на 64 бита в ближайшее время - попросту их архитектура ещё не готова. Как мы ожидаем, процессор Yonah - как одноядерная линейка 7x6, так и двуядерные процессоры, скорее всего, из линейки 800 - выйдет на рынок в начале первого квартала 2006, после чего должна последовать версия Merom с поддержкой 64-битных вычислений.

Режимы 64-битного процессора

AMD Athlon 64 работает с 32-битной Windows в наследственном режиме, при этом расширения x86 64 не используются. Если запустить 64-битную ОС, то процессор AMD64 будет работать в 64-битном Long Mode, а чипы Intel включат режим IA32e. Оба режима, конечно же, одинаковы, поскольку Intel использует технологию AMD64, благодаря лицензионному соглашению с AMD.

В режиме Long Mode процессор способен выполнять 64-битные "родные" инструкции, при этом доступны подрежимы совместимости, в которых процессор становится совместим по двоичному коду с 16-битными и 32-битными приложениями. Хотя сегодня разница и не ощутима, но физическое адресное пространство ограничено у AMD 52 битами, а у Intel - 40 битами. Впрочем, вряд ли это проявит себя в ближайшем будущем, поскольку 40 бит хватает для адресации 1 Тбайт (терабайта) или 1024 Гбайт памяти.

Дополнительную информацию о 64-битной поддержке можно найти на следующих ресурсах.

Тестовая конфигурация

Процессор
Одноядерный CPU AMD Athlon 64 FX-57 (2,8 ГГц, кэш L2 1 Мбайт)
Двуядерный CPU AMD Athlon 64 X2 4800+ (2,4 ГГц, 2x 1 Мбайт кэша L2)
Память
Платформа AMD (DDR400) 2x 512 Мбайт - DDR400 (200 МГц)
Corsair Pro Series CMX512-3200XL (XMS3208 V1.1)
(CL2,0-2-2-5-1T @ 200 МГц)
Материнская плата
Платформа AMD Asus A8N-SLI Deluxe (Rev. 1.02, BIOS 1007)
Чипсет nVidia nForce4 SLI
Системное аппаратное обеспечение
Графическая карта (PCIe) nVidia GeForce 6800 GT (эталонная плата)
GPU: nVidia GeForce 6800 GT (350 МГц)
Память: 256 Мбайт DDR SDRAM (500 МГц)
Жёсткий диск Western Digital WD740 Raptor
74 Гбайт, кэш 8 Мбайт, 10 000 об/мин
Сеть Встроенная nVidia GbE Ethernet
DVD-ROM Gigabyte GO-D1600C (16x)
Блок питания Tagan TG480-U01, ATX 2.0, 480 Вт
Программное обеспечение
Драйверы чипсета nVidia Forceware 6.53
Драйверы чипсета x64 nVidia Forceware 6.66
Драйвер процессора AMD CPU Driver 1.1.0.18
Графический драйвер nVidia Forceware 71.84
DirectX Версия: 9.0c (4.09.0000.0904)
32-битная ОС Windows XP Professional 5.20.3790,
Service Pack 2
64-битная ОС Windows XP Professional 5.10.2600,
Service Pack 2

Тесты и настройки

OpenGL
Doom III Version: 1.0.1262
1024x768 - 32 bit
Video Quality = High Quality
"custom timedemo"
Graphics detail = High Quality
Wolfenstein Version: 2.56 (Patch V 1.02)
Enemy Territory 1280x1024 - 32 bit
Timedemo 1 / demo demo4
Geometric detail = high
Texture detail = high
DirectX 8
Unreal Tournament 2004 Version: 3204
1280 x 1024 / 32 bit / Audio = off
THG8-assault-single
3DMark2003 Version 3.6.0
1024x768 - 32 bit
DirectX 9
FarCry Version 1.1 Build 1256
1280x1024 - 32 bit
Quality options = low
3DMark 2005 Version 1.0
1024x768 - 32 bit
Graphics and CPU Default Benchmark
Видео
Mainconcept MPEG Encoder Version: 1.4.2
1.2 GB DV to MPEG II
(720x576, Audio) converting
Pinnacle Studio 9 Plus Version: 9.1.2
From: 352x288 MPEG-2 41 MB
to: 720x576 MPEG-2 95 MB
Encoding and Transition Rendering to MPEG-2/DVD
no Audio
Auto Gordian Knot
DivX 5.2.1
XviD 1.0.2
Version: 1.95
Audio = AC3 6ch
Custom size = 100 MB
Resulution settings = Fixed width
Codec = XviD and DivX 5
Audio = CBR MP3, kbps 192
182 MB VOB MPEG2-source
Windows Media Encoder Version: 9.00.00.2980
720x480 DV to WMV
320x240 (29.97 fps)
282 kbps streaming
Windows Media Player 10 Version: 10.00.00.36.46
Аудио
Lame MP3 Version 3.96
Wave 17:14 minutes (182 MB) to mp3
32 - 320 kbit
VBR = level 3
Приложения
Winrar Version 3.42
283 MB, 246 Files
Compression = Best
Dictionary = 4096 kB
3D Studio Max 6.0
Discreet
Characters "Dragon_Charater_rig"
Pixel: 1024 x 768
Rendering Single
Синтетические тесты
PCMark 2004 Pro Version: 1.3.0
CPU and Memory Tests
SiSoftware Sandra Pro Version 2005, SR1
CPU Test = MultiMedia / CPU Arithmetic
Memory Test = Bandwidth Benchmark
Wstream Version: 5
100 Operations with 25 MB file
  • Подобные результаты сравнения между 32-битной и 64-битной версиями одинаковы и для одноядерных, и для двуядерных процессоров.
  • Учитывая отсутствие разницы в производительности 32-битных приложений, вряд ли имеет смысл переходить на Windows XP Professional x64 Edition, если вы, по большей части, работаете именно с ними. Конечно, если вы не желаете почувствовать себя первопроходцем. В принципе, уровень Microsoft WOW64 (Windows on Windows 64) работает хорошо и позволяет выполнять 32-битные приложения под Windows x64 без заметного падения производительности. Собственно, ситуация напоминает нам переход от Windows for Workgroups 3.11 к Windows 95: если в компьютере установлено достаточно памяти, то производительность проблемой не является.

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

    Впрошлом году я помог нескольким клиентам совершить переход от 32‑разрядной среды Windows к смешанной 32‑разрядной и 64‑разрядной среде Windows. После миграции некоторые наблюдательные пользователи заметили нечто необычное в своих новых 64‑разрядных системах Windows, которые запускались на системах с 64‑разрядными процессорами Intel. Если посмотреть на переменную окружения PROCESSOR_ARCHITECTURE в приложении System панели управления Control Panel или 64‑разрядной строки Cmd.exe, увидим, что ее значением является AMD64.

    Хотя значение может появляться для того, чтобы отличить поставщика (например, AMD вместо Intel), оно именно такое, каким должно быть. PROCESSOR_ARCHITECTURE связана с архитектурой, а не с реализацией. Поскольку процессоры Intel64 реализуют архитектуру AMD64, они являются членами класса процессоров AMD64.

    Я не заостряю ваше внимание на этом необычном факте. С точки зрения службы поддержки, архитектура процессора означает архитектуру Windows, а наличие множественных архитектур Windows в организации означает наличие множественных версий всего - от файлов Windows до пакетов обновлений и драйверов. Осмысление и понимание архитектур процессора может помочь решить некоторые проблемы, которые нередко возникают в смешанной сетевой 32‑разрядной и 64‑разрядной среде. Мы рассмотрим все три текущие архитектуры процессора - x86, IA64 и AMD64. Я буду называть их архитектурами Windows. Затем я покажу еще некоторые вещи, за которыми надо будет понаблюдать во время перехода к смешанной 32‑разрядной и 64‑разрядной среде.

    Архитектура x86 Windows осталась единственной самостоятельной 32‑разрядной архитектурой Windows. Как и следовало ожидать, она запускается на всех процессорах, реализующих архитектуру процессоров x86. Однако есть пара важных преду­преждений, о которых, на мой взгляд, нужно помнить.

    Первое из них состоит в том, что процессор AMD64 - это расширенный набор команд процессоров архитектуры x86, поэтому архитектура x86 Windows может запускаться на процессорах с архитектурой AMD64. Масса компьютеров, которые за последние лет пять поставлялись на рынок и запускали x86 Windows, на самом деле использовали 64‑разрядные процессоры. Хотя вы не в состоянии модернизировать эти системы для 64‑разрядной Windows, производить на этих процессорах чистую установку 64‑разрядного Windows можно. И хотя нельзя точно определить, что 32‑разрядная система Windows запущена на 64‑разрядном процессоре, вы можете использовать встроенную утилиту командной строки Windows Management Instrumentation Command-line (WMIC) для того, чтобы проверить имя процессора, после чего можно проверить характеристики процессора на сайте производителя. Для проверки имени процессора на локальном компьютере откройте Cmd.exe и запустите команду:

    wmic cpu get name

    Чтобы проверить имя процессора на удаленном компьютере, названном x51, запустите такую команду:

    wmic /node: x51 cpu get name

    Второе предупреждение состоит в том, что 64‑разрядная платформа Windows также будет запускать 32‑разрядные приложения Windows в специальном эмуляторе x86 Windows. И хотя сама операционная система Windows является 64‑разрядной, в эмуляторе Windows выглядит так же, как и x86 Windows. В частности, значение переменной окружения PROCESSOR_ARCHITECTURE будет x86. Однако можно узнать и какова реальная среда. Эмулятор x86 также предоставляет переменную окружения, называемую PROCESSOR_ARCHITEW6432, которая указывает на архитектуру самой Windows. Если переменной не существует, то вы работаете полностью на оборудовании и Windows x86.

    Вы можете использовать WMIC и для проверки реального значения PROCESSOR_ARCHITECTURE. Например, чтобы проверить настоящее значение среды локального компьютера и удаленного компьютера x51, запустите такие команды:

    wmic environment where

    wmic/node: x51 environment where

    «name=’ProCeSSor_arCHiteCture’» get

    Эти команды здесь написаны с переносом, но их следует вводить каждую одной строкой.

    Каждая версия Windows со времени появления Windows NT поддерживала архитектуру x86, но скоро это изменится. Хотя Windows 7 поддерживает архитектуры x86, Windows Server 2008 R2 является только 64‑разрядным.

    Компания AMD была не единственной, кто создал архитектуру 64‑разрядного процессора. Специалисты Intel сконструировали 64‑разрядный процессор и назвали его IA64. Первый современный 64‑разрядный релиз Windows был создан для запуска на процессорах, реализующих архитектуру IA64. Единственными видами процессоров, которые реализуют IA64, являются Itanium и Itanium 2 от Intel. На сегодня только платформы Windows Server поддерживают IA64. Хотя изначально Windows XP поддерживала архитектуру IA64, проблемы с поддержкой унаследованных приложений на системах с IA64 привели к тому, что настольные системы на этой базе были весьма редки. Компания Microsoft прекратила поддерживать XP на IA64 в 2005 году.

    Когда Intel решила не поддерживать совместимость с процессорами x86 в архитектуре IA64, AMD начала работу над новым дизайном 64‑разрядного процессора, который бы расширял возможности x86 старой версии (так же, как оригинальные процессоры Intel 80386 были совместимы с процессорами 80286). AMD изначально описывала в спецификации такие процессоры, как x86-64, затем они были переименованы в AMD64. 64‑разрядные версии Windows от Microsoft, построенные для запуска на этой архитектуре, также использовали название AMD64. в 2003 году была выпущена XP для AMD64, и каждая последующая версия Windows поддерживала архитектуру AMD64.

    VIA Technologies и Intel продают процессоры, которые используют архитектуру AMD64. В маркетинговых целях Intel называет эту технологию Intel 64, скрывая, что ее процессоры реализуют инструкции набора AMD64. Microsoft тоже начала использовать имя x64 для такой архитектуры, чтобы не возникало сомнений относительно архитектуры Windows. Каким бы ни было маркетинговое имя, процессоры Intel 64 используют те же сборки Windows, что и другие процессоры, реализующие архитектуру AMD64. В терминологии Windows и поддерживаемого программного обеспечения Windows вы можете оперировать названиями AMD64, Intel 64, x86-64, x64 и менее известным EM64 T, как грубыми эквивалентами.

    Что еще нужно знать

    Последняя важная смена платформы, повлиявшая на весь мир ИТ, произошла в 90‑х годах, когда настольные компьютеры перешли от 16‑разрядных Windows и MS-DOS к 32‑разрядным системам Windows. Переход от 32‑разрядных Windows к 64‑разрядным намного проще. Сетевое управление является более централизованным, чем это было в 90‑х, и большая часть операций не зависит от количества разрядов в операционной системе.

    Хотя переход от 32‑разрядной Windows к 64‑разрядной не будет таким трудным, как преды­дущая миграция платформы, я дам несколько советов, которые помогут избежать ловушек:

    • Изучайте математику программного обеспечения - 16 не входит в 64. Пользователи не смогут запускать 16‑разрядное программное обеспечение из 64‑разрядной операционной системы Windows, поэтому необходимо убрать любое 16‑разрядное программное обеспечение, зависшее у вас с 90‑х годов. Если вдруг пользователю нужно будет запустить какое-либо 16‑разрядное программное обеспечение (например, устаревший пакет финансовых программ для получения допуска к старым данным), вам придется дать пользователю доступ к 32‑разрядной платформе. Если у вас много пользователей, которым требуется запускать 16‑разрядное программное обеспечение, вы можете запустить его на 32‑разрядном сервере терминалов. Другой вариант - создание 32‑разрядной виртуальной машины (VM). Виртуализация может быть лучшей альтернативой, потому что все VM легко транспортируются.
    • Будьте внимательны: IA64 (Itanium) является особенным. Системы Windows, которые используют архитектуру процессора IA64, могут запускаться только на системах IA64. Если вы переориентируете существующие системы IA64, они естественно делятся на серверные роли. Серверная роль печати может вызывать проблемы, поскольку этим системам нужны драйверы печати для IA64. Существенное ограничение для этих серверов состоит в том, что 64‑разрядных приложений Windows для IA64 доступно меньше, чем для Windows на AMD64. Однако система IA64 будет запускать 32‑разрядные приложения.
    • Поймите, что 32‑разрядное и 64‑разрядное программное обеспечение несовместимы. Версии Windows для x86 не могут запускать 64‑разрядные приложения. Windows для AMD64 и IA64 будут запускать обычное 32‑разрядное программное обеспечение, но только внутри одного и того же процесса. Поскольку 64‑разрядные приложения не могут использовать 32‑разрядный двоичный код, 64‑разрядные версии приложений не могут загружать 32‑разрядные модули или компоненты. Если вы зависите от 32‑разрядных компонентов, вам нужно задействовать 32‑разрядную версию приложения. Это одна из причин того, что 64‑разрядные системы Windows используют 32‑разрядный Internet Explorer (IE) по умолчанию; для него есть огромная установленная база 32‑разрядных элементов управления, которую поставщики не перенесли на 64‑разрядную платформу.
    • Помните, что переход от 32 разрядов к 64 - это именно переход, а не модернизация. Если вы планируете перевести существующие компьютеры с 32‑разрядной Windows на 64‑разрядную, вы можете захватить настройки и файлы инструментами, такими как Windows Easy Transfer, но вы не можете произвести модернизацию. Вам не удастся даже запустить программу установки новой 64‑разрядной версии Windows в 32‑разрядной системе Windows.
    • Проверьте свои драйверы. Вы не можете использовать 32‑разрядные драйверы ядра на 64‑разрядных системах Windows. Подсистема WOW64 доступна только выше ядра операционной системы. Поэтому проверка драйверов перед переходом от 32 разрядов к 64 является ключевой.
    • Будьте готовы помочь своим пользователям проверить их архитектуру Windows. Система Windows идентична изнутри и снаружи для 32‑разрядной и 64‑разрядной вычислительных платформ, поэтому пользователи могут не знать, используют они 32‑разрядную или 64‑разрядную операционную систему. Служба поддержки должна быть готова провести пользователей через процедуру опознания архитектуры Windows, если возникнут вопросы. Статья Microsoft «Как определить, запускает компьютер 32‑разрядную или 64‑разрядную версию операционной системы Windows» (support.microsoft.com/kb/827218) может помочь сотрудникам службы поддержки либо можно адресовать пользователей к данной статье.

    О чем следует помнить

    Хотя переход от 32‑разрядной компьютерной платформы к 64‑разрядной не будет совсем простым (особенно когда он осложнен тем, что пользователи не понимают терминологии), он вряд ли будет представлять особую трудность. Идентичность интерфейсов пользователя на разных платформах и поддержка существующего 32‑разрядного программного обеспечения делают большую часть изменений вполне понятной. То, что 64‑разрядные версии Windows используют 32‑разрядный браузер IE по умолчанию, также помогает сделать изменения незаметными. Двойственность архитектур IA64 и AMD64 не представляет серьезной проблемы. IA64 обычно используется в мощных системах, где недостаток в поддержке специ­фического оборудования и программного обеспечения может рассматриваться как одна из особенностей, а не как непреодолимое препятствие.

    Самые важные замечания перед переходом к 64‑разрядным вычислениям сводятся к следующим. Перед переводом компьютера на 64‑разрядную Windows нужно убедиться, что есть 64‑разрядные драйверы и удалено (либо сделаны все соответствующие настройки) все 16‑разрядное программное обеспечение. Чтобы произвести переход, нужно сделать новую установку: вы не можете модернизировать старую систему. Наконец, убедитесь, что служба технической поддержки в состоянии помочь пользователям определить, используют ли они 32‑разрядные или 64‑разрядные системы, если возникнут проблемы. Хотя это переход не банален, он меркнет в сравнении с той работой, которая была проведена для очистки корпоративных компьютеров от Windows 3.11.