64 бита
Статья раскрывает смысл термина «64 бита». В статье кратко рассмотрена история развития 64-битных систем, описаны наиболее распространенные на данный момент 64-битные процессоры архитектуры Intel 64 и 64-битная операционная система Windows.
Введение
В рамках архитектуры вычислительной техники под термином «64-битный» понимают 64-битные целые и другие типы данных, имеющих размер 64 бита. Под «64-битными» системами могут пониматься 64-битные архитектуры микропроцессоров (например, EM64T, IA-64) или 64-битные операционные системы (например, Windows XP Professional x64 Edition). Можно говорить о компиляторах, генерирующих 64-битный программный код.
В данной статье будут рассмотрены различные моменты, связанные с 64-битными технологиями. Статья предназначена для программистов, желающих начать разрабатывать 64-битные программы, и ориентирована на Windows-разработчиков, поскольку для них вопрос знакомства с 64-битными системами наиболее актуален.
История 64-битных систем
64-битность только недавно вошла в жизнь большинства пользователей и прикладных программистов. Однако работа с 64-битными данными имеет уже длинную историю.
1961: IBM выпускает суперкомпьютер IBM 7030 Stretch, в котором используются 64-битные слова данных, 32-битные или 64-битные машинные инструкции.
1974: Control Data Corporation запускает векторный суперкомпьютер CDC Star-100, в котором используется архитектура 64-битных слов (предыдущие системы CDC имели 60-битную архитектуру).
1976: Cray Research выпускает первый суперкомпьютер Cray-1, в котором реализована архитектура 64-битных слов и который послужит основой для всех последующих векторных суперкомпьютеров Cray.
1985: Cray выпускает UNICOS — первую 64-битную реализацию операционной системы Unix.
1991: MIPS Technologies производит первый 64-битный процессор, R4000, в котором реализована третья модификация разработанной в их компании архитектуры MIPS. Этот процессор используется в графических рабочих станциях SGI начиная с модели IRIS Crimson. Kendall Square Research выпускает свой первый суперкомпьютер KSR1, построенный на основе их собственной запатентованной 64-битной архитектуры RISC под операционной системой OSF/1.
1992: Digital Equipment Corporation (DEC) представляет полностью 64-битную архитектуру Alpha — детище проекта PRISM.
1993: DEC выпускает 64-битную Unix-подобную операционную систему DEC OSF/1 AXP (позже переименованную в Tru64 UNIX) для своих систем, построенных на архитектуре Alpha.
1994: Intel объявляет о своих планах по разработке 64-битной архитектуры IA-64 (совместно с компанией Hewlett-Packard) — преемника их 32-битных процессоров IA-32. Дата выпуска назначена на 1998-1999 годы. SGI выпускает IRIX 6.0 с 64-битной поддержкой чипсета R8000.
1995: Sun запускает 64-битный процессор семейства SPARC UltraSPARC. HAL Computer Systems, подчиненная Fujitsu, запускает рабочие станции, созданные на основе 64-битного процессора SPARC64 первого поколения, независимо разработанного компанией HAL. IBM выпускает микропроцессоры A10 и A30, а также 64-битные процессоры PowerPC AS. IBM также выпускает 64-битное обновление для системы AS/400, способное преобразовывать операционную систему, базы данных и приложения.
1996: Nintendo представляет игровую консоль Nintendo 64, созданную на основе более дешевого варианта MIPS R4000. HP выпускает реализацию 64-битной 2.0 версии собственной архитектуры PA-RISC PA-8000.
1997: IBM запускает линейку RS64 64-битных процессоров PowerPC/PowerPC AS.
1998: Sun выпускает Solaris 7 с полной 64-битной поддержкой UltraSPARC.
1999: Intel выпускает набор команд для архитектуры IA-64. AMD публично объявляет о своем наборе 64-битных расширений для IA-32, который был назван x86-64 (позже переименован в AMD64).
2000: IBM выпускает свой первый 64-битный мэйнфрейм zSeries z900, совместимый с ESA/390, а также новую операционную систему z/OS.
2001: Intel наконец запускает линейку 64-битных процессоров, которые теперь получают название Itanium и рассчитаны на высокопроизводительные серверы. Проект не соответствует ожиданиям из-за многочисленных задержек при выпуске IA-64 на рынок. NetBSD становится первой операционной системой, которая запускается на процессоре Intel Itanium после его выхода. Кроме того, Microsoft также выпускает Windows XP 64-Bit Edition для архитектуры IA-64 семейства Itanium, хотя в ней сохраняется возможность запускать 32-битные приложения при помощи прослойки WoW64.
2003: AMD представляет линейки процессоров Opteron и Athlon 64, созданные на основе архитектуры AMD64, которая является первой 64-битной процессорной архитектурой, основанной на архитектуре x86. Apple начинает использовать 64-битный процессор «G5» PowerPC 970 производства IBM. Intel утверждает, что процессорные чипы семейства Itanium останутся единственными 64-битными процессорами, разработанными в их компании.
2004: В ответ на коммерческий успех AMD, Intel признается, что они разрабатывали клон расширений AMD64, которому дали название IA-32e (позже переименован в EM64T, и затем еще раз в Intel 64). Intel также выпускает обновленные версии семейств процессоров Xeon и Pentium 4 с поддержкой новых команд.
2004: VIA Technologies представляет свой 64-битный процессор Isaiah.
2005: 31 января Sun выпускает Solaris 10 с поддержкой процессоров AMD64 / Intel 64. 30 апреля Microsoft выпускает Windows XP Professional x64 Edition для процессоров AMD64 / Intel 64.
2006: Sony, IBM и Toshiba начинают выпуск 64-битного процессора Cell для PlayStation 3, серверов, рабочих станций и других устройств. Microsoft выпускает Windows Vista с включенной 64-битной версией для процессоров AMD64 / Intel 64, которая поддерживает 32-битную совместимость. Все Windows-приложения и компоненты являются 64-битными, однако многие из них имеют 32-битные версии, включенные в систему в виде плагинов в целях совместимости.
2009: Как и Windows Vista, Windows 7 компании Microsoft включает полную 64-битную версию для процессоров AMD64 / Intel 64, и на большинство новых компьютеров по умолчанию устанавливается 64-битная версия. Выходит операционная система компании Apple Mac OS X 10.6, «Snow Leopard» которая имеет 64-битное ядро и предназначена для процессоров AMD64 / Intel 64, однако по умолчанию эта система устанавливается только на некоторые из последних моделей компьютеров компании Apple. Большинство приложений, поставляемых с Mac OS X 10.6, теперь также являются 64-битными.
Более подробно с историей развития 64-битных систем можно познакомиться в статье Джона Машей «Долгая дорога к 64 битам» [1] и в энциклопедической статье в Wikipedia «64-bit» [2].
Прикладное программирование и 64-битные системы
- IA-64 64-битная микропроцессорная архитектура, разработанная совместно компаниями Intel и Hewlett Packard. Реализована в микропроцессорах Itanium и Itanium 2. Для более подробного знакомства с архитектурой IA-64 можно обратиться к следующим статьям в Wikipedia: «IA-64», «Itanium», «Itanium 2». Архитектуру Itanium поддерживает большое количество производителей серверов: Bull, Fujitsu, Fujitsu Siemens Computers, Hitachi, HP, NEC, SGI и Unisys. Эти производители присоединились к Intel и множеству разработчиков ПО для создания Itanium Solutions Alliance, с целью продвижения архитектуры и ускорения темпов портирования ПО.
- Intel 64 (AMD64 / x86-64 / x64 / EM64T) — данная архитектура представляет собой расширение архитектуры x86 с полной обратной совместимостью. Существует множество вариантов названия данной архитектуры, что приводит к путанице, хотя, по сути, все эти названия обозначают одно и тоже: x86-64, AA-64, Hammer Architecture, AMD64, Yamhill Technology, EM64T, IA-32e, Intel 64, x64. Более подробно узнать о том, как появилось так много названий, можно в статье из Wikipedia: «X86-64». Процессоры с архитектурой Intel 64 нашли широкое распространение персональных компьютерах. И скорее всего ваш компьютер оснащен именно процессором с данной архитектурой.
Архитектура Intel 64 (AMD64)
Рассматриваемая архитектура Intel 64 простое, но в то же время мощное обратно совместимое расширение устаревшей промышленной архитектуры x86. Она добавляет 64-битное адресное пространство и расширяет регистровые ресурсы для поддержки большей производительности перекомпилированных 64-битных программ. Архитектура обеспечивает поддержку устаревшего 16-битного и 32-битного кода приложений и операционных систем без их модификации или перекомпиляции.
Отличительной особенностью Intel 64 является поддержка шестнадцати 64-битных регистров общего назначения (в x86-32 имелось восемь 32-битных регистров). Поддерживаются 64-битные арифметические и логические операции над целыми числами. Поддерживаются 64-битные виртуальные адреса. Для адресации новых регистров для команд введены «префиксы расширения регистра», для которых был выбран диапазон кодов 40h-4Fh, использующихся для команд INC <регистр> и DEC <регистр> в 32- и 16-битных режимах. Команды INC и DEC в 64-битном режиме должны кодироваться в более общей, двухбайтовой форме.
16 целочисленных 64-битных регистра общего назначения (RAX, RBX, RCX, RDX, RBP, RSI, RDI, RSP, R8 — R15),
8 80-битных регистров с плавающей точкой (ST0 — ST7),
8 64-битных регистров Multimedia Extensions (MM0 — MM7, имеют общее пространство с регистрами ST0 — ST7),
16 128-битных регистров SSE (XMM0 — XMM15),
64-битный указатель RIP и 64-битный регистр флагов RFLAGS.
Необходимость 64-битной архитектуры определяется приложениями, которым необходимо большое адресное пространство. В первую очередь это высокопроизводительные серверы, системы управления базами данных, САПР и, конечно, игры. Такие приложения получат существенные преимущества от 64-битного адресного пространства и увеличения количества регистров. Малое количество регистров, доступное в устаревшей x86 архитектуре, ограничивает производительность в вычислительных задачах. Увеличенное количество регистров обеспечивает достаточную производительность для многих приложений.
- 64-битное адресное пространство;
- расширенный набор регистров;
- привычный для разработчиков набор команд;
- возможность запуска старых 32-битных приложений в 64-битной операционной системе;
- возможность использования 32-битных операционных систем.
64-битные операционные системы
Практически все современные операционные системы сейчас имеют версии для архитектуры Intel 64. Например, Microsoft предоставляет Windows XP x64. Крупнейшие разработчики UNIX систем также поставляют 64-битные версии, как например Linux Debian 3.5 x86-64. Однако это не означает, что весь код такой системы является полностью 64-битным. Часть кода ОС и многие приложения вполне могут оставаться 32-битными, так как Intel 64 обеспечивает обратную совместимость с 32-битными приложениями. Например, 64-битная версия Windows использует специальный режим WoW64 (Windows-on-Windows 64), который транслирует вызовы 32-битных приложений к ресурсам 64-битной операционной системы.
Далее в статье мы будем рассматривать только 64-битные операционные системы семейства Windows.
WoW64
Windows-on-Windows 64-bit (WoW64) — подсистема операционной системы Windows, позволяющая запускать 32-битные приложения на всех 64-битных версиях Windows.
- программы, скомпилированные для 16-разрядных операционных систем;
- программы режима ядра, скомпилированные для 32-разрядных операционных систем.
WoW64 на архитектуре Intel 64 (AMD64 / x64) не требует эмуляции инструкций. Здесь подсистема WoW64 эмулирует только 32-битное окружение, за счет дополнительной прослойки между 32-битным приложением и 64-битным Windows API. Где-то эта прослойка тонкая, где-то не очень. Для средней программы потери в производительности из-за наличия такой прослойки составят около 2%. Для некоторых программ это значение может быть больше. Два процента это немного, но следует учитывать, что 32-битные приложения работают немного медленнее под управлением 64-битной операционной системы Windows, чем в 32-битной среде.
Компиляция 64-битного кода не только исключает необходимость в WoW64, но и дает дополнительный прирост производительности. Это связано с архитектурными изменениями в микропроцессоре, такими как увеличение количества регистров общего назначения. Для средней программы можно ожидать в пределах 5-15% прироста производительности от простой перекомпиляции.
Из-за наличия прослойки WoW64 32-битные программы работают менее эффективно в 64-битной среде, чем в 32-битной. Но все-таки, простые 32-битные приложения могут получить одно преимущество от их запуска в 64-битной среде. Вы, наверное, знаете, что программа, собранная с ключом /LARGEADDRESSAWARE:YES может выделять до 3-х гигабайт памяти, если 32-битная операционная система Windows запущена с ключом /3gb. Так вот, эта же 32-битная программа, запущенная на 64-битной системе, может выделить почти 4 GB памяти (на практике около 3.5 GB).
Подсистема WoW64 изолирует 32-разрядные программы от 64-разрядных путем перенаправления обращений к файлам и реестру. Это предотвращает случайный доступ 32-битных программ к данным 64-битных приложений. Например, 32-битное приложение, которое запускает файл DLL из каталога %systemroot%\System32, может случайно обратиться к 64-разрядному файлу DLL, который несовместим с 32-битной программой. Во избежание этого подсистема WoW64 перенаправляет доступ из папки %systemroot%\System32 в папку %systemroot%\SysWOW64. Это перенаправление позволяет предотвратить ошибки совместимости, поскольку при этом требуется файл DLL, созданный специально для работы с 32-разрядными приложениями.
Подробнее с механизмами перенаправления файловой системы и реестра можно познакомиться в разделе MSDN «Running 32-bit Applications».
Программная модель Win64
Также как и в Win32 размер страниц в Win64 составляет 4Кб. Первые 64Кб адресного пространства никогда не отображаются, то есть наименьший правильный адрес это 0x10000. В отличие от Win32, системные DLL загружаются выше 4Гб.
- RCX: первый аргумент
- RDX: второй аргумент
- R8: третий аргумент
- R9: четвертый аргумент
Разница в соглашениях о вызове приводит к тому, что в одной программе нельзя использовать и 64-битный, и 32-битный код. Другими словами, если приложение скомпилировано для 64-битного режима, то все используемые библиотеки (DLL) также должны быть 64-битными.
Передача параметров через регистры является одним из новшеств, делающих 64-битные программы более производительными, чем 32-битные. Дополнительный выигрыш в производительности можно получить, используя 64-битные типы данных.
Адресное пространство
Хотя 64-битный процессор теоретически может адресовать 16 экзабайт памяти (2^64), Win64 в настоящий момент поддерживает 16 терабайт (2^44). Этому есть несколько причин. Текущие процессоры могут обеспечивать доступ лишь к 1 терабайту (2^40) физической памяти. Архитектура (но не аппаратная часть) может расширить это пространство до 4 петабайт (2^52). Однако в этом случае необходимо огромное количество памяти для страничных таблиц, отображающих память.
Помимо перечисленных ограничений, объем памяти, который доступен в той или иной версии 64-битной операционной системе Windows зависит также от коммерческих соображений компании Microsoft. Ниже приведена информация по объему памяти, поддерживаемой различными версиями 64-биными версиями Windows:
Windows XP Professional — 128 Gbyte;
Windows Server 2003, Standard — 32 Gbyte;
Windows Server 2003, Enterprise — 1 Tbyte;
Windows Server 2003, Datacenter — 1 Tbyte;
Windows Server 2008, Datacenter — 2 Tbyte;
Windows Server 2008, Enterprise — 2 Tbyte;
Windows Server 2008, Standard — 32 Gbyte;
Windows Server 2008, Web Server — 32 Gbyte;
Vista Home Basic — 8 Gbyte;
Vista Home Premium — 16 Gbyte;
Vista Business — 128 Gbyte;
Vista Enterprise — 128 Gbyte;
Vista Ultimate — 128 Gbyte;
Windows 7 Home Basic — 8 Gbyte;
Windows 7 Home Premium — 16 Gbyte;
Windows 7 Professional — 192 Gbyte;
Windows 7 Enterprise — 192 Gbyte;
Windows 7 Ultimate — 192 Gbyte;
Разработка 64-битных приложений
Наиболее полно вопросы разработки 64-битных приложений рассмотрены в курсе «Уроки разработки 64-битных приложений на языке Си/Си++». Содержание:
Также рекомендую раздел с обзорами статей по тематике связанной с 64-битнми технологиями.
Чем отличаются 32-х битные и 64-х битные системы?
Покупая компьютер, Вы сталкиваетесь с тем, что Вам всегда необходимо делать выбор что купить, ноутбук, компьютер или нетбук, какую фирму-производитель выбрать и т.д. После всех принятых решений, Вам еще предстоит определиться, какую версию операционной системы поставить: 32 бит или 64 бит.
Сначала мы приведем описания 32-х и 64-х битных процессоров, чтобы разобраться, что это за зверь такой, х-битный процессор. Дело в том, что количество бит указывает на ширину регистра процессора и обозначает способ обработки информации процессором компьютера. Такой регистр представляет собой небольшое хранилище, которое используется процессором для хранения данных, к которым для оптимальной производительности компьютера ему необходимо иметь быстрый доступ. Число бит указывает на ширину данного регистра. В связи с этим 64-х битный регистр может хранить в себе больше данных, чем 32-х битный, который, в свою очередь, хранит больше данных, чем 16-ти битный или 8-ми битные регистры.
32-х битная архитектура Windows не позволяет выделять приложению более 2GB памяти. Однако, для современных игр, приложений фото- и видеоредакторов, а также виртуальных машин и т.д. требуется больший объем памяти. 64-х битные системы позволяют напрямую адресовать более 4 GB оперативной памяти, а это более чем достаточно для продуктивной работы даже самых «больших» приложений.
Интересно, что еще за 5 лет до появления компьютерных 64-х битных процессоров, консоли «Nintendo 64» и «Playstation 2» имели 64-х битные процессоры пользовательского уровня.
Основная разница между 32 и 64 битами заключается в увеличенной памяти.
Другое преимущество 64-бит Windows 7 это дополнительная защита «DEP» на уровне жесткого диска, а не программного обеспечения, как у пользователей 32 бит.
Несмотря на все преимущества 64-бит Windows7, у данного типа процессоров есть свои недостатки. В основном это обуславливается совместимостью. Для того чтобы установить Windows 7 64 бит , вам потребуется процессор, способный поддерживать эту операционную систему. Windows 7 32-бит можно установить на процессоры, способные поддерживать как 64 бит, так и 32 бит.
Кроме того, существует проблема совместимости драйверов. Этот недостаток является очень серьезным. К счастью, производители оборудования продолжают увеличивать поддержку 64-х битных операционных систем (если Ваше оборудование выпущено в последние год-два, то проблем у Вас будет не много). Но поиск драйверов для старых устройств может оказаться неразрешимой задачей, например для старого сканнера или принтера. В таком случае придется покупать новые устройства.Некоторые программы плохо «переживают» переход на 64 бита. В отличие от предыдущих версий Windows, Windows 7 х64 не поддерживает 16-ти битные приложения.
Кроме того, следует понимать, что если даже приложение является 64х битным, плагины и расширения для него могут таковыми не являться. Такие проблемы часто возникают с «Photoshop» и «Firefox». Основное приложение доступно в 64-х битном варианте, но важные плагины – нет.
Материнские платы, поддерживающие ранние 64-х битные процессоры и не поддерживающие более 4GB оперативной памяти являются редкостью. Однако, если это Ваш случай, то с переходом на 64-х битную операционную систему Вы не получите самого главного – доступа к большей памяти.
Выводы:
1) Windows7 64-разрядная система может обрабатывать больше объемы оперативной памяти (RAM) и эффективнее, чем 32-разрядная система.
2) Windows7 64-бит имеет дополнительную защиту «DEP» на уровне жесткого диска, которой нет на Windows7 32-бит.
3) Windows7 32-бит можно установить на процессоры 32-бит и 64-бит, но для установки Windows7 64-бит требуется процессор 64-бит.
4) Windows7 32-разрядная система может поддерживать 16-битные программы, в то время как Windows7 64-разрядная система не может.
Дополнительная информация:
Как определить, какая система установлена на вашем компьютере?
Вы можете посмотреть на версию установленной у Вас Windows – возможно, Вы уже используете 64-х битную операционную систему. Для этого в Windows Vista и Windows 7 кликните по Компьютеру (Computer) из меню Пуск (Start) правой кнопкой мыши и в контекстном меню выберите пункт Свойства (Properties). Вы попадете в меню системных свойств, где в разделе Система (System) Вы увидите, какая у Вас операционная система – 32-х битная или же 64-х битная.
Под Windows XP Вы можете протестировать свой процессор и узнать, можете ли Вы проапгредиться на 64-х битную Windows с помощью бесплатной программы SecurAble от Стива Гибсона (Steve Gibson). Данная утилита проверяет процессор по трем различным параметрам.
Во-первых, она проверяет, является ли процессор 64-х битным. Во-вторых, она проверяет поддержку им «DEP» (технологии безопасности, разработанной для защиты машин от атак переполнения буфера). И, наконец, в-третьих, программа проверяет наличие поддержки виртуальной машины XP под Windows 7.
Понятие 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-разрядных систем. Но, переход еще не скоро завершится.
Ваша система состоит из трех частей

Теперь, все вопросы разрядности будут рассматриваться с точки зрения трех компонентов вашей системы. Проще говоря, представьте, что ваш компьютер условно состоит из:
- Процессора в качестве центральной и самой важной части
- Операционной системы в качестве среднего слоя
- Приложений выступающих в качестве внешнего слоя
Это означает, что:
- Для запуска 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-битных программ
Причиной того, что эти показатели нельзя использовать как достоверный источник, является то, каким образом 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 «путь к программе»
Каковы различия между 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-битах, а так же об их совместимости и особенностях использования.
Чем отличается 64 битная система от 32
Для компьютерных процессоров существует две самые распространенные архитектуры, это i386 и amd64 или как их называют по-простому 32 и 64 бит. Первая была разработана еще в самое начало эпохи компьютеров и имела кое-какие недостатки. Вторая же — более современная и создана относительно недавно. Новые пользователи компьютера часто задаются вопросом что лучше 32 или 64 бит, а также систему какой архитектуры выбрать для своего компьютера.
В этой статье мы попытаемся полностью ответить на этот вопрос, мы подробно рассмотрим чем отличается 64 битная система от 32, в чем принципиальная разница этих архитектур, а также почему вам стоит выбрать тот или иной вариант.

Архитектура 32 бит
В первую очередь нужно сказать, что 32 бит или x86, или i386 — это почти одно и то же, и это архитектура процессора, а уже операционная система рассчитана для работы на этой архитектуре. Впервые архитектура x86 была использована в процессорах Intel. Такое название образовалось от первых процессоров, где она применялась — Intel 80386. Уже позже ее начали поддерживать процессоры от AMD и x86 стала стандартом для персональных компьютеров. Дальше она улучшалась, дорабатывалась, но суть не в этом.
Архитектура 64 бит
Архитектура 64 бит была разработана намного позже компанией AMD. Еще эту архитектуру называют x86-64 или amd64. Несмотря на название она тоже поддерживается процессорами Intel и AMD. Она полностью совместима с x32. Разница между ними, в основном, в битности, но что это такое мы рассмотрим намного подробнее ниже.
Чем отличается 64 и 32 бит?
Чтобы понять чем отличается 32 бита от 64, нужно погрузиться еще дальше в основы. Процессор — это самый главный компонент компьютера, его даже можно назвать мозгом. Именно процессор оперирует всеми данными, которые мы хотим обработать управляет внешними устройствами, отправляет им команды, получает от них информацию и взаимодействует с памятью. Все адреса и инструкции во время выполнения процессору нужно где-то хранить, и нет, не в оперативной памяти, потому что адреса в оперативной памяти нужно тоже где-то хранить.
Для решения этой задачи каждый процессор содержит несколько десятков ячеек сверхбыстрой памяти, их еще называют регистрами, каждая из этих ячеек имеет свое предназначение, имя и определенный размер. Чем отличается 32 bit от 64? В размере и все дело. У 32 битных процессоров, размер одной ячейки — 32 бит. В процессорах архитектуры 64 бит — размер регистров уже не 32, а 64. Чем больше размер ячейки, тем больше данных она может уместить, а значит пространство адресов ресурсов может быть больше.
Так, процессоры архитектуры 32 бит могли получить доступ только к адресам в пределах 2^32 степени. Адрес большего размера просто не поместится в ячейку. Наиболее всего это ограничение заметно при работе с оперативной памятью. В этот диапазон входит только память до 2^32 бит или 4 Гб, все что выше процессор не сможет прочитать без специальной эмуляции со стороны операционной системы.
Процессор, с размером регистров 64 бит может получить доступ к адресам до 2 ^ 64, а это уже намного больше, если перевести в привычные величины, то это 1 Эб (экзабайт) или миллард гигабайт. Фактически такого количества оперативной памяти еще не поддерживает ни одна операционная система, даже Linux. По сравнению с 4 Гб — это очень большая разница.
Но это еще не все. В одном цикле работы процессор с размером регистра 32 бит может обрабатывать 32 бит или 4 байта данных, 1 байт равняется 8 бит. Таким образом, если размер данных превышает 4 байта, то процессору придется выполнить несколько циклов для его обработки. Если процессор 64 битный, то размер данных для обработки в одном цикле увеличивается в два раза, и теперь составляет 8 байт. Даже если данные имеют размер больше, чем 8 байт, то процессору одинаково нужно будет меньше времени на их обработку.
Но во время реального использования вы вряд ли заметите большое увеличение производительности, если, конечно, вы не используете очень тяжелые приложения. Кроме всего, описанного, разница 32 и 64 битных систем еще много в чем. Эти архитектуры еще много чем отличаются. Архитектура 64 бит более оптимизирована, рассчитана на более новое оборудование, многозадачную и очень быструю работу. В наши дни все процессоры работают в режиме 64 бит, но поддерживают 32 бит для совместимости в режиме эмуляции. Но не стоит сразу бежать и переустанавливать систему на 64 бит потому что она лучше, и ниже мы рассмотрим почему.
Что выбрать x32 или x64?
Теперь вы знаете чем отличается 64 битная система от 32 бит. Среди пользователей ходит очень много споров, о том, какую архитектуру использовать. Одни говорят что только 64, другие ратуют в пользу x32. Как вы понимаете из выше написанного, все зависит от оперативной памяти. Если у вас меньше четырех гигабайт, то можно использовать 32 бит, если больше, то нужно использовать 64 бит, чтобы система могла увидеть всю память. Да, есть расширения PAE, которые позволяют процессору видеть больше 4х гигабайт, но будет намного быстрее, если система будет работать с памятью напрямую, без всяких хаков.
Возможно, у вас возник вопрос, почему не использовать архитектуру 64 бит если памяти меньше 4х гигабайт? Поскольку размеры регистров процессора больше, то автоматически становиться больше все, что храниться в оперативной памяти, больше занимают инструкции программ, больше занимают метаданные и адреса, которые хранятся в оперативной памяти.
А это все значит, что если вы установите 64 битную систему на компьютер с меньше чем 4 Гб ОЗУ памяти, то оперативной памяти вам будет очень мало. Вы не заметите прироста производительности, будет только хуже, потому что часть оперативной памяти уйдет на диск в раздел подкачки. а скорость работы с диском, как вы понимаете, очень сильно отличается от скорости работы ОЗУ.
Даже если у вас 4 Гб, то использовать 64 бит не желательно, потому что памяти будет не хватать. По современным меркам, для персонального компьютера это уже мало, а вы ее еще уменьшите использовав эту архитектуру. В конце концов, вы можете использовать технологию PAE, эту опцию можно включить в ядре Linux, чтобы получить доступ ко всем четырем гигабайтам из 32 бит. Это будет вполне оправдано.
Но если у вас 6 Гб и больше, то здесь уже не целесообразно применять PAE, лучше использовать нормальную 64 битную архитектуру, памяти благо хватает. и процессор рассчитан именно на нее.
Выводы
В этой статье мы рассмотрели чем отличается чем отличается 32 от 64 и теперь вы сможете правильно подобрать систему, чтобы она работала с оптимальной производительностью. А как вы считаете, что лучше использовать при тех или иных объемах ОЗУ? Если с 3 Гб и 6 еще все понятно, то 4 Гб вызывает много споров, какое ваше мнение? Напишите в комментариях!
На завершение небольшое видео про отличия 64 битных процессоров от 32 битных, в видео акцент сделан на мобильные процессоры, но технология та же: