x86-64 (также AMD64/Intel64/EM64T) — 64-битная версия (изначально — расширение) архитектуры x86, разработанная компанией AMD и представленная в 2000 году[1], позволяющая выполнять программы в 64-разрядном режиме.
Это расширение архитектуры x86, теперь являющееся версией архитектуры x86, практически полностью совместимо с 32-разрядной версией архитектуры x86, на данный момент известной как IA-32.
Microsoft и Oracle используют термин «x64» для обозначения данной версии архитектуры x86. Однако, в каталоге файлов для 64-разрядных версий Microsoft Windows он известен как «amd64» (в то время как для архитектуры x86 используется «i386»). Подобная практика также применяется в репозиториях многих дистрибутивов Linux.
Набор команд x86-64 в настоящее время поддерживается:
Эта 64-битная версия архитектуры x86 может быть обозначена следующими названиями:
Ныне наиболее распространенные наименования 64-битной версии x86 есть: «x64», «x86-64» и «AMD64».
Иногда упоминание AMD вводит пользователей в заблуждение, вплоть до того, что они отказываются использовать дистрибутивы родных версий операционной системы, мотивируя это тем, что на их процессоре Intel версия для AMD не будет работать, — на самом деле распространители ПО используют название amd64 лишь потому, что именно AMD была пионером в разработке 64-битной версии x86.
Часто пользователи путают архитектуру x86-64 с IA-64, ошибочно скачивая ПО для этой архитектуры, и затем обнаруживают, что программа не запускается. Во избежание подобных ошибок следует помнить, что Intel 64 и IA-64 — это совершенно разные, несовместимые между собой микропроцессорные архитектуры. Последняя несовместима с x86-64.
Представители Intel 64:
Представители IA-64: семейства Itanium и Itanium 2.
Процессоры данной архитектуры имеют два режима работы: Long mode и Legacy mode (режим совместимости с 32-битным процессорами на основе x86.)
«Длинный» режим является основным для процессоров AMD64. Этот режим даёт возможность воспользоваться всеми преимуществами архитектуры x86-64. Для использования этого режима необходима любая 64-битная операционная система (например, Windows Server 2003/2003R2/2008/2008R2/2012, Windows XP Professional x64 Edition, Windows Vista x64, Windows 7/8/8.1/10/11 x64 или 64-битные варианты UNIX-подобных систем GNU/Linux, FreeBSD, OpenBSD, NetBSD (64-битные сборки, однако, имеют возможность запуска 32-битных приложений), Solaris (смешанная 32/64 сборка с разными ядрами для 32- и 64-битных процессоров), Mac OS X (смешанная 32/64 сборка с 32-битным ядром, начиная с версии 10.4.7).
Этот режим позволяет выполнять 64-битные программы. Также, для обратной совместимости, предусмотрена поддержка выполнения 32-битного кода, включая 32-битные приложения. Однако при запуске 32-битных программ в 64-битной системе, они не смогут использовать 64-битные системные библиотеки, и наоборот. Для решения этой задачи большинство 64-разрядных операционных систем предоставляет два набора системных API: один для нативных 64-битных приложений и другой для 32-битных программ. Этот подход аналогичен методике, использовавшейся в ранних 32-битных системах, таких как Windows 95 и Windows NT, для выполнения 16-битных программ.
В режиме «Long Mode» были ликвидированы некоторые особенности архитектуры x86-32, такие как режим виртуального 8086 и сегментная модель памяти. Однако, осталась возможность использования сегментов FS и GS, что полезно для быстрого нахождения важных данных потока при переключении задач. Также аппаратная многозадачность и некоторые команды, связанные с устаревшими возможностями и работой с BCD-числами, которые редко используются в новых программах, были исключены. «Длинный» режим активируется установкой флага CR0.PG, который используется для включения страничного MMU (при условии, что такое переключение разрешено (EFER.LME=1), в противном случае просто произойдет включение MMU в «унаследованном» режиме). Таким образом, исполнение 64-битного кода с запрещённым страничным преобразованием невозможно. Это может вызвать определённые сложности в программировании, поскольку при переключении между «Long Mode» и «Legacy Mode» (например, для вызова функций BIOS или DOS, монитором виртуальной машины, и т. д.) требуется двойной сброс MMU, для чего код переключения должен располагаться в одинаково отображенной странице.
«Унаследованный» режим позволяет процессору x86-64 выполнять команды, предназначенные для процессоров x86, обеспечивая таким образом полную совместимость с 32-битным кодом и операционными системами для x86. В этом режиме процессор ведёт себя точно так же, как x86-процессор (например как Athlon или Pentium III). Функции и возможности, предоставляемые архитектурой x86-64 (например, 64-битные регистры), в этом режиме, естественно, недоступны. В этом режиме 64-битные программы и операционные системы работать не будут.
Разработанный компанией AMD набор инструкций x86-64 (позднее переименованный в AMD64) — расширение архитектуры Intel IA-32 (x86-32). Основной отличительной особенностью AMD64 является поддержка 64-битных регистров общего назначения, 64-битных арифметических и логических операций над целыми числами и 64-битных виртуальных адресов. Для адресации новых регистров для команд введены так называемые «префиксы расширения регистра», для которых был выбран диапазон кодов 40h-4Fh, использующихся для команд INC <регистр> и DEC <регистр> в 32-битных режимах. Команды INC и DEC в 64-битном режиме должны кодироваться в более общей, двухбайтовой форме.
Архитектура x86-64 имеет:
Разрабатывая архитектуру AMD64 (AMD-реализации x86-64), инженеры корпорации AMD решили навсегда покончить с главным «рудиментом» архитектуры x86 — сегментной моделью памяти, которая поддерживалась ещё со времён 8086. Однако из-за этого при разработке первой x86-64-версии своего продукта для виртуализации программисты компании VMware столкнулись с непреодолимыми трудностями при реализации виртуальной машины для 64-битных гостевых систем[2]: поскольку для отделения кода монитора от кода «гостя» программой использовался механизм сегментации, эта задача стала практически неразрешимой.
Осознав ошибку, AMD вернула ограниченный вариант сегментной организации памяти, начиная с ревизии D архитектуры AMD64, что позволило запускать 64-битные ОС в виртуальных машинах. Intel этому примеру не последовала, и на её процессорах, не поддерживающих средства аппаратной виртуализации Intel VT (Intel Virtualization Technology)[3], запустить 64-битную виртуальную машину невозможно[4]. Для проверки того, возможен ли на процессоре запуск 64-битных гостевых ОС, VMware предоставляет вместе со своими продуктами специальную утилиту.
Запуск и установка 64-битных гостевых систем на данный момент (с 2013 г.) уже возможна (продукт компании VMware — ESXi (workstation и тд.) — поддерживает архитектуру x86-64).
Первоначально попавшие под сокращение команды LAHF и SAHF, которые так же активно используются ПО виртуализации, затем были возвращены в систему команд. С распространением средств аппаратной виртуализации (Intel VT, AMD-V) потребность в сегментации постепенно отпадет.
Для улучшения этой статьи желательно:
|