x86-64

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 может быть обозначена следующими названиями:

  • x86-64 — изначальный вариант. Именно под этим названием фирмой AMD была опубликована первая предварительная спецификация.
  • x64 — официальное название версий всех 64-битных ОС Windows и Solaris, также используемое как название архитектуры фирмами Microsoft и Oracle.
  • AA-64 (AMD Architecture 64) — так архитектуру назвал популярный неофициальный справочник sandpile.org (внеся информацию практически сразу после публикаций первой предварительной спецификации) по аналогии с IA-64.
  • Hammer Architecture — название по первым ядрам процессоров, поддерживавших x86-64 — AMD Clawhammer («гвоздодёр») и AMD Sledgehammer («кувалда»).
  • AMD64 — после выпуска первых Clawhammer и Sledgehammer в названии архитектуры появилось название фирмы-разработчика AMD. Сейчас является официальным для реализации AMD. Так же обозначает все версии Linux для 64-битной x86.
  • Yamhill Technology — первое название реализации архитектуры от Intel. Иногда упоминалось название CT (Clackamas Technology).
  • EM64T — первое официальное название реализации архитектуры от Intel. Расшифровывалось как Extended Memory 64 Technology.
  • IA-32e — иногда встречалось совместно с EM64T, чаще для обозначения длинного режима, который в документации Intel называется «режимом IA-32e».
  • Intel 64 — текущее официальное название реализации архитектуры от Intel. Постепенно Intel отказывается от наименований «IA-32», «IA-32e» и «EM64T» в пользу этого наименования, которое ныне является единственным официальным для реализации этой архитектуры от Intel.

Ныне наиболее распространенные наименования 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.)

Long Mode

«Длинный» режим является основным для процессоров 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, для чего код переключения должен располагаться в одинаково отображенной странице.

Legacy Mode

«Унаследованный» режим позволяет процессору 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 имеет:

  • 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.

Сегментная модель организации памяти

Разрабатывая архитектуру 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) потребность в сегментации постепенно отпадет.

Примечания

Ссылки

🔥 Top keywords: Заглавная страницаЯндексДуров, Павел ВалерьевичСлужебная:ПоискYouTubeЛунин, Андрей АлексеевичПодносова, Ирина ЛеонидовнаВКонтактеФоллаут (телесериал)WildberriesTelegramРеал Мадрид (футбольный клуб)Богуславская, Зоя БорисовнаДуров, Валерий СемёновичРоссияXVideosСписок умерших в 2024 годуЧикатило, Андрей РомановичFallout (серия игр)Список игроков НХЛ, забросивших 500 и более шайбПопков, Михаил ВикторовичOzon17 апреляИльин, Иван АлександровичMail.ruСёгун (мини-сериал, 2024)Слово пацана. Кровь на асфальтеПутин, Владимир ВладимировичЛига чемпионов УЕФАГагарина, Елена ЮрьевнаБишимбаев, Куандык ВалихановичЛига чемпионов УЕФА 2023/2024Турнир претендентов по шахматам 2024Манчестер СитиMGM-140 ATACMSРоссийский миротворческий контингент в Нагорном КарабахеЗагоризонтный радиолокаторПинапВодительское удостоверение в Российской Федерации