Понятие 32-бита и 64-бита - подробное толкование концепций

Понятие 32-бита и 64-бита - подробное толкование концепций

Содержание / Оглавление:

Понятия 32-бита и 64-бита

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

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

 

Понятие 32-бита и 64-бита толкование концепций

32-бита или 64-бита?

Увеличение числа битов сказывается на двух важных преимуществах: 

  • Больше битов означает, что данные обрабатываются более крупными кусками, это так же означает, что дробные числа представляются более точно
  • Больше битов означает, что система может использовать больше физической памяти

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

Начиная с 1995 года, когда в Windows 95 появилась поддержка 32-разрядных приложений, было разработано огромное число 32-битных приложений и создано не мало 32-битных операционных систем.

Это порождает одну проблему. Сегодня, практически все процессоры 64-разрядные. Тем не менее, большинство программного обеспечения 32-разрядное.

Примечание: В данном случае речь идет о том, что практически все преимущество 64-разрядных систем попросту никак не может быть использовано 32-битными приложениями. Разве что... Теперь... Таких программ... Можно... Одновременно... Запустить больше. 

 

Как долго будет длиться переход от 32-разрядного ПО к 64-битному?

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

Если оглядываться назад, то переход от 16-битных к 32-битным ОС Windows, поддерживающих 32-разрядные процессоры, занял 10 лет (с 1985 по 1995 год). Тем не менее, даже сейчас, спустя порядка 20 лет, существует много людей, которые все еще используют 16-битные приложения на старых версиях Windows.

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

Примечание: Конечно, все чаще продукты выпускаются и с версией для 64-разрядных систем. Но, переход еще не скоро завершится. 

 

Ваша система состоит из трех частей

три слоя - Понятие 32-бита и 64-бита - подробное толкование концепций

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

  • Процессора в качестве центральной и самой важной части
  • Операционной системы в качестве среднего слоя
  • Приложений выступающих в качестве внешнего слоя

Это означает, что:

  • Для запуска 64-разрядной операционной системы вам нужна поддержка центрального уровня: 64-битный процессор.
  • Для запуска 64-битного приложения вам нужна поддержка от всех более низких уровней: 64-битная ОС и 64-разрядный процессор.

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

Примечание: Конечно, для более подробного рассмотрения стоило бы добавить слой аппаратных устройств, которые будут поддерживать 64-битный процессор. А так же слой драйверов, которые будут передавать вызовы от операционной системы к устройствам. Тем не менее, даже этих трех слоев вполне достаточно, чтобы понять особенности и тонкости взаимодействия 32-бит с 64.

 

Какие комбинации 32-бит и 64-бит совместимы и будут нормально выполняться?

Теперь, можно перейти к более практическим знаниям и начать отвечать на общие вопросы.

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

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

Две таблицы ниже иллюстрируют данное правило:

Таблица 1 — Совместимость при 32-битном процессоре
Процессор (CPU) 32-бита 32-бита 32-бита 32-бита
Операционная система (OS) 32-бита 32-бита 64-бита 64-бита
Приложение 32-бита 64-бита 32-бита 64-бита
  Да Нет Нет Нет

 

Таблица 2 — Совместимость при 64-битном процессоре
Процессор (CPU) 64-бита 64-бита 64-бита 64-бита
Операционная система (OS) 64-бита 64-бита 32-бита 32-бита
Приложение 64-бита 32-бита 32-бита 64-бита
  Да Да Да Нет

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

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

 

Аппаратная виртуализация является исключением из этого правила

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

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

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

Так что, если выполняется условие, что виртуальная машина создана и изолирована приложениями для виртуализации, то из основного правила можно "исключить" текущую операционную систему (она будет помечена серым цветом в таблицах ниже). И применить общее правило трех слоев.

В таблицах 3 и 4 представлены результаты.

Таблица 3 — Совместимость при 32-битном процессоре и виртуализации 
Процессор (CPU) 32-бита 32-бита 32-бита 32-бита
Основная операционная система 32-бита 32-бита 32-бита 32-бита
Виртуальная операционная система 32-бита 32-бита 64-бита 64-бита
Приложение 32-бита 64-бита 32-бита 64-бита
  Да Нет Нет Нет

 

Таблица 4 — Совместимость при 64-битном процессоре и виртуализации
Процессор (CPU) 64-бита 64-бита 64-бита 64-бита
Основная операционная система 32/64-бита 32/64-бита 32/64-бита 32/64-бита
Виртуальная операционная система 64-бита 64-бита 32-бита 32-бита
Приложение 64-бита 32-бита 32-бита 64-бита
  Да Да Да Нет

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

 

Эмуляция 64-битного процессора не вариант

Ранее рассмотренные конфигурации предполагали, что все программное обеспечение использует только родной набор инструкций процессора. А ведь, запуск 64-битных приложений на 32-битных процессорах не возможен только потому, что 64-битные инструкции не выполнятся на 32-битных процессорах. Так что, если бы можно было эмулировать 64-битный процессор, используя 32-разрядное ПО?

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

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

 

Ответы на часто задаваемые вопросы о 32-битных и 64-битных системах 

Сноска: данный раздел содержит ответы на распространенные вопросы. Если вы внимательно читали предыдущий раздел, то вполне можете самостоятельно ответить на часть из них.

Запустится ли 32-разрядная программа на 64-битном процессоре в 64-битной системе?

Да, запустится. 64-битные системы обратно совместимы с их 32-разрядными аналогами.

Могут ли 64-разрядные приложения содержать 32-разрядный код?

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

Точно так же 32-битное программное обеспечение (как правило, очень старые программы) могут содержать некоторый 16-битный код. Как правило, такие программ будут выполняться с ошибками на 64-битной ОС.

Можно ли запустить 16-разрядное приложение или код на 64-битных системах?

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

Можно ли запустить 64-разрядную виртуальную машину на 32-битной ОС с 64-битным процессором?

Да. Все зависит от уровня виртуализации. С программной виртуализации это вряд ли получится. Даже если у вас получится запустить систему, то все будет очень медленным. Единственный полноценный способ - это аппаратная виртуализация, но ее должен поддерживать BIOS вашего компьютера.

 

Ответы на часто задаваемые вопросы о 32- и 64-битных ОС Windows

Сноска: данный раздел содержит ответы на распространенные вопросы. Если вы внимательно читали предыдущий раздел, то вполне можете самостоятельно ответить на часть из них. 

Могу ли я запустить Windows 2000 и Windows XP на 64-битных процессорах, а также использовать старое программное обеспечение?

Да, 32-разрядная операционная система будет успешно стартовать на 64-битных процессорах. И вы так же сможете запускать старые программы на 64-битных ОС.

Как узнать, является ли система 64-разрядной?

Для того, чтобы узнать, какая у вас установлена операционная система, вы можете использовать ЧаВО Microsoft, а так же специальную программу Gibson Research Corporation (GRC). Последняя покажет вам не только информацию о разрядности, но и о поддержки компьютером аппаратной виртуализации.

Подходят ли старые драйверы устройств для ОС Windows 64-бит?

Нет, 32-разрядные драйверы нельзя использовать в Windows 64. Это происходит потому, что подсистема Wow64, которая позволяет запускать 32-разрядные приложения в Windows 64, не является частью ядра системы. Более подробно смотрите в обзоре Поддержка 32-битных приложений в 64-разрядной версии Windows.

Можно ли перенести 32-битную систему на 64-разрядную Windows?

Как такового, Microsoft не предоставляет никакого механизма. Поэтому вам придется самостоятельно переносить данные с одной системы на другую, а так же заново установливать все программы.

Как альтернативный вариант, вы можете использовать мультизагрузку или виртуализацию.

Как узнать, приложение является 32- или 64-битным?

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

  • Windows устанавливает программы в эти каталоги на системном диске:
    • '\Program Files' для 64-битных программ
    • '\Program Files (x86)' для 32-битных программ
  • В диспетчере задач, 32-битные процессы, как правило, имеют приставку "*32", а 64-разрядные нет

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

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

Поэтому лучше всего использовать одно из следующих решений:

  • Запустите программу для аудита системы. Например, из обзора Лучшие бесплатные программы для сбора информации о компьютере (системе)
  • Вы можете использовать программу PEStudio. Прежде всего, это инструмент для анализа безопасности программы. Но, он так же позволяет узнать достаточно много технической информации, включая разрядность приложений.
  • Если вам необходимо более подробно узнать об используемых программой модулей, то вы можете использовать Dependency Walker, который является частью средств разработки Microfoft, таких как Visual Studio. 
  • Windows Software Development Kit (SDK) содержит утилиту под названием DumpBin, которую так же можно использовать для определения разрядности приложения. Для этого необходимо запустить следующую команду в консольной строке, и после строки "FILE HEADER VALUES" посмотреть название заголовка: machine (x64) - 64-битная программа, machine (x86) - 32-битная программа
    • dumpbin /headers "путь к программе"
  • Вы так же можете использовать такие инструменты, как Microsoft Proccess Explorer (см. диспетчеры задач). Они предоставляют гораздо больше информации, нежели обычный диспетчер задач Windows. Узнать разрядность программы вы можете из свойств процесса.


Каковы различия между 32- и 64-битными версиями Windows?

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

Многие из ограничений 64-разрядных версий Windows являются ограничением системы, а не ограничением процессоров. Количество физических процессоров остается неизменным, в основном из-за того, что это прерогатива Windows Server. 

Тем не менее, аппаратные устройства так же имеют ограничения. Например, в то время как 64-битные AMD и Intel процессоры используют 64-битные указатели памяти, поддерживающие их чипсеты используют только 52-битный физический адрес (4 петабайт) и 48-разрядный адрес виртуальной памяти (256 терабайт). В настоящее время, это более чем достаточно. Windows 7 64-бит поддерживает только 192 ГБ физической памяти и 16 терабайт (44-бит) виртуальной памяти. 

 

Таблица 5: Физические и логические ограничения версий Windows,
Цифры в скобках указывают расширенные настройки, которые не установлены по умолчанию и требуют наличия совместимого оборудования
Версия: XP Vista 7
Разрядность: 32 64 32 64 32 64
Система:            
Физические процессоры 2 2 2 2 2 2
Логические процессоры 32 64 32 64 32 256
Системный кэш 1 ГБ 1,024 ГБ 1 (2) ГБ 1,024 ГБ 1 (2) ГБ 1,024 ГБ
Физическая память 4 ГБ 128 ГБ 4 ГБ 128 ГБ 4 ГБ 192 ГБ
Виртуальная память 4 ГБ 16,384 ГБ 4 ГБ 16,384 Гб 4 ГБ 16,384 Гб
Ядро  1 (2) ГБ 8 ГБ 2 ГБ 8 ГБ 2 ГБ 8 ГБ
Пользовательские процессы:            
Физическая память 2 (3) ГБ 2 (4) ГБ 2 (3) ГБ 8 ГБ 2 (4) ГБ 8 ГБ
Виртуальная память 2 (3) ГБ 2 (8,192) ГБ 2 (3) ГБ 2 (8,192) ГБ 2 (4) ГБ 2 (8,192) ГБ

Примечание: В таблице умышленно не использовалась аббревиатура 1 ТБ (1024 Гб), что бы проиллюстрировать динамику. 

Примечание: Из рассмотрения так же была исключена первая 64-битная версия Windows XP (2002), поскольку она имеет другую архитектуру. Система использовала Intel Itanium (IA-64) процессоры, которые имели x86 процессор для совместимости. В последствии он был заменен 64-битной архитектурой AMD (x86-x64), которая расширила набор команд x86 и была так хороша, что была лицензирована Intel и другими производителями. Эта архитектура до сих пор является наиболее распространенной.

Можно ли выделить больше памяти для программы/процесса в 32-разрядном Windows, как показано в таблице 5?

Да, можно. И вот пример.

Если вы используете MySQL на Windows, то вы можете использовать Address Windowing Extensions (AWE), которое поддерживается MySql. AWE увеличивает максимальный размер памяти пользовательского процесса от 2 ГБ до 3 ГБ (см. таблицу 5). Это позволит MySQL использовать на 50% больше памяти. 

Однако помните, что это применимо не на всех версиях 32-битной Windows, и что необходимо перекомпилировать MySQL.

Можно ли выделить более 4 Гб оперативной памяти в 32-битной Windows?

Вы можете использовать Physical Address Extension (PAE) для расширения поддерживаемого объема оперативной памяти. PAE увеличивает размер адреса с 32 бит до 36 бит, что позволяет использовать порядка 64 Гб.

PAE настраивается в BIOS-е вашего компьютера, так что его можно применять для любых операционных систем, включая Linux и Apple OS X.

32-битная Windows использует PAE, но имеет внутреннее ограничение на 4 ГБ. Существуют утилиты, которые позволяют убрать этот предел, но их стоит применять с крайней осторожностью и только в безвыходных ситуациях.

Теперь, вы знаете о 32-битах и 64-битах, а так же об их совместимости и особенностях использования.

☕ Понравился обзор? Поделитесь с друзьями!

Добавить комментарий / отзыв

Комментарий - это вежливое и наполненное смыслом сообщение (правила).



* Нажимая на кнопку "Отправить", Вы соглашаетесь с политикой конфиденциальности.
Присоединяйтесь
 

 

Программы (Freeware, OpenSource...)