x86-64 - x86-64

редактировать
Тип набора инструкций, который является 64-битной версией набора инструкций x86 AMD Opteron, первый ЦП, представивший расширения x86-64 в 2003 г. Пятитомный набор Руководства программиста по архитектуре x86-64, опубликованного и распространенного AMD в 2002 г.

x86-64 (также известный как x64, x86_64, AMD64 и Intel 64 ) - это 64-битная версия набора инструкций x86 . В нем представлены два новых режима работы, 64-разрядный режим и режим совместимости, а также новый 4-уровневый режим подкачки. В 64-битном режиме и новом режиме подкачки он поддерживает значительно большие объемы виртуальной памяти и физической памяти, чем это возможно в его 32-битных предшественниках, что позволяет программам хранить большие объемы данных в памяти. x86-64 также расширяет регистры общего назначения до 64-битных, а также увеличивает их количество с 8 (некоторые из которых имеют ограниченную или фиксированную функциональность, например, для управления стеком) до 16 (полностью общие), и предоставляет множество других улучшений. Операции с плавающей запятой поддерживаются посредством обязательных инструкций, подобных SSE2, и регистры стиля x87 / MMX обычно не используются (но все еще доступны даже в 64-битном режиме); вместо этого используется набор из 32 векторных регистров по 128 бит каждый. (Каждый может хранить одно или два числа с двойной точностью или от одного до четырех чисел с одинарной точностью или различные целочисленные форматы.) В 64-битном режиме инструкции модифицируются для поддержки 64-битных операндов и 64-битного режима адресации. Режим совместимости позволяет 16- и 32-битным пользовательским приложениям работать без изменений, сосуществуя с 64-битными приложениями, если 64-битная операционная система их поддерживает. Поскольку полные 16-битные и 32-битные наборы инструкций x86 остаются реализованными на оборудовании без какой-либо промежуточной эмуляции, эти старые исполняемые файлы могут работать с незначительным снижением производительности или без него, в то время как новые или модифицированные приложения могут использовать преимущества новых особенности конструкции процессора для достижения повышения производительности. Кроме того, процессор, поддерживающий x86-64, все еще включается в реальном режиме для полной обратной совместимости с 8086, поскольку процессоры x86, поддерживающие защищенный режим было выполнено с момента выпуска 80286.

Исходная спецификация, созданная AMD и выпущенная в 2000 году, была реализована AMD, Intel и VIA. Микроархитектура AMD K8 в процессорах Opteron и Athlon 64 была первой, кто ее реализовал. Это было первое существенное дополнение к архитектуре x86, разработанное не Intel, а другой компанией. Intel была вынуждена последовать их примеру и представила модифицированное семейство NetBurst, которое было программно совместимо со спецификацией AMD. VIA Technologies представила x86-64 в своей архитектуре VIA Isaiah с VIA Nano.

Архитектура x86-64 отличается от архитектуры Intel Itanium (ранее IA-64 ), который несовместим на уровне собственного набора команд с архитектурой x86. Операционные системы и приложения, скомпилированные для одного, не могут работать на другом.

Содержание

  • 1 AMD64
    • 1.1 История
    • 1.2 Реализации
    • 1.3 Архитектурные особенности
    • 1.4 Детали виртуального адресного пространства
      • 1.4.1 Адреса в канонической форме
      • 1.4.2 Таблица страниц структура
      • 1.4.3 Ограничения операционной системы
    • 1.5 Детали физического адресного пространства
    • 1.6 Режимы работы
      • 1.6.1 Длинный режим
      • 1.6.2 Устаревший режим
      • 1.6.3 Реальный режим
  • 2 Intel 64
    • 2.1 История
    • 2.2 Реализации
  • 3 Реализация VIA x86-64
  • 4 Различия между AMD64 и Intel 64
    • 4.1 Последние реализации
    • 4.2 Старые реализации
  • 5 Принятие
  • 6 Совместимость и характеристики операционной системы
    • 6.1 BSD
      • 6.1.1 DragonFly BSD
      • 6.1.2 FreeBSD
      • 6.1.3 NetBSD
      • 6.1.4 OpenBSD
    • 6.2 DOS
    • 6.3 Linux
    • 6.4 macOS
    • 6.5 Solaris
    • 6.6 Windows
  • 7 Игровые консоли
  • 8 Отраслевые соглашения об именах
  • 9 Лицензирование
  • 10 См. Также
  • 11 Примечания
  • 12 Ссылки
  • 13 Внешние ссылки

AMD64

логотип AMD64

История

AMD64 был создан как альтернатива радикально другой архитектуре IA-64, которая была разработана Intel и Hewlett Packard. Архитектура AMD64, первоначально анонсированная в 1999 году, а полная спецификация стала доступной в августе 2000 года, с самого начала позиционировалась AMD как эволюционный способ добавления 64-битных вычислительных возможностей к существующей архитектуре x86, в отличие от Подход Intel к созданию совершенно новой 64-битной архитектуры с IA-64.

Первый процессор на базе AMD64, Opteron, был выпущен в апреле 2003 года.

Реализации

Процессоры AMD, реализующие архитектуру AMD64, включают Opteron, Athlon 64, Athlon 64 X2, Athlon 64 FX, Athlon II (за которым следует "X1", «X2», «X3» или «X4» для обозначения количества ядер и моделей XLT), Turion 64, Turion 64 X2, Sempron (Степпинг «Palermo» E6 и все модели «Manila»), Phenom (за которым следует «X3» или «X4», чтобы указать количество ядер), Phenom II (за которым следует «X2», «X3», «X4» или «X6» для обозначения количества ядер), FX, Fusion / APU и Ryzen / Epyc.

Архитектурные особенности

Основной определяющей характеристикой AMD64 является наличие 64-битных регистров процессора общего назначения (например, rax и rbx), 64-битных целочисленных арифметических операций. и логические операции, и 64-битные виртуальные адреса. Дизайнеры воспользовались возможностью, чтобы внести и другие улучшения. Некоторые из наиболее значительных изменений описаны ниже.

Возможность 64-битных целых чисел
Все регистры общего назначения (GPR) расширены с 32 бит до 64 бит, а также все арифметические и логические операции, Операции «память-регистр», «регистр-память» и т. д. теперь могут работать непосредственно с 64-битными целыми числами. Вставляет и выталкивает в стек . по умолчанию 8-байтовые шаги, а указатели имеют ширину 8 байтов.
Дополнительные регистры
Помимо увеличения размера регистров общего назначения, количество именованных регистров общего назначения увеличено с восьми (т.е. eax, ecx, edx, ebx, esp, ebp, esi, edi) в x86 до 16 ( т.е. rax, rcx, rdx, rbx, rsp, rbp, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, r15). Следовательно, можно хранить больше локальных переменных в регистрах, а не в стеке, и позволить регистрам хранить часто используемые константы; аргументы для небольших и быстрых подпрограмм также могут передаваться в регистрах в большей степени.
AMD64 по-прежнему имеет меньше регистров, чем многие RISC наборы инструкций (например, PA-RISC, Power ISA и MIPS имеют 32 GPR; Alpha, 64-битный ARM и SPARC имеют 31) или VLIW -подобные машины, такие как IA-64 (который имеет 128 регистров). Однако реализация AMD64 может иметь гораздо больше внутренних регистров, чем количество архитектурных регистров, предоставляемых набором команд (см. переименование регистров ). (Например, ядра AMD Zen имеют 168 64-битных целочисленных и 160 128-битных векторных физических внутренних регистров с плавающей запятой.)
Дополнительные регистры XMM (SSE)
Аналогично, количество 128 -разрядные регистры XMM (используемые для потоковых инструкций SIMD ) также увеличены с 8 до 16.
Традиционный стек регистров FPU x87 не включен в расширение размера файла регистров в 64-битном формате. режиме, по сравнению с регистрами XMM, используемыми SSE2, который действительно был расширен. Стек регистров x87 не является простым файлом регистров, хотя он позволяет прямой доступ к отдельным регистрам с помощью недорогих операций обмена.
Большее виртуальное адресное пространство
Архитектура AMD64 определяет 64-битный формат виртуального адреса, из которых 48 младших разрядов используются в текущих реализациях. Это позволяет использовать до 256 TiB (2 байтов ) виртуального адресного пространства. Определение архитектуры позволяет увеличить этот предел в будущих реализациях до полных 64 бит, расширяя виртуальное адресное пространство до 16 EiB (2 байта). Это по сравнению с 4 ГиБ (2 байта) для x86.
Это означает, что с очень большими файлами можно работать, отображая весь файл в процесс '(который часто намного быстрее, чем работа с вызовами чтения / записи файлов), вместо того, чтобы отображать области файла в адресное пространство и из него.
Большее физическое адресное пространство
Первоначальная реализация архитектуры AMD64 реализовывала 40-битные физические адреса и поэтому могла адресовать до 1 ТиБ (2 байта) ОЗУ. Текущие реализации архитектуры AMD64 (начиная с микроархитектуры AMD 10h ) расширяют это до 48-битных физических адресов и, следовательно, могут адресовать до 256 ТиБ ОЗУ. Архитектура позволяет в будущем расширить это число до 52 бит (ограничено форматом записи таблицы страниц); это позволит адресовать до 4 ПиБ ОЗУ. Для сравнения, 32-разрядные процессоры x86 ограничены 64 ГиБ ОЗУ в режиме Physical Address Extension (PAE) или 4 ГиБ ОЗУ без режима PAE.
Большее физическое адресное пространство в унаследованный режим
При работе в унаследованном режиме архитектура AMD64 поддерживает режим Physical Address Extension (PAE), как и большинство современных процессоров x86, но AMD64 расширяет PAE с 36 бит до архитектурного ограничения в 52 бита физического адреса. Таким образом, любая реализация допускает такое же ограничение физического адреса, как и в длинном режиме.
Доступ к данным относительно указателя инструкций
Теперь инструкции могут ссылаться на данные, относящиеся к указателю инструкции (регистр RIP). Это делает независимый от позиции код, который часто используется в разделяемых библиотеках и код, загружаемый во время выполнения, более эффективным.
Инструкции SSE
оригинальная архитектура AMD64 приняла Intel SSE и SSE2 в качестве основных инструкций. Эти наборы инструкций обеспечивают векторное дополнение к скалярному x87 FPU для типов данных с одинарной и двойной точностью. SSE2 также предлагает целочисленные векторные операции для типов данных с точностью от 8 до 64 бит. Это делает векторные возможности архитектуры такими же, как у самых продвинутых процессоров x86 своего времени. Эти инструкции также можно использовать в 32-битном режиме. Распространение 64-битных процессоров сделало эти векторные возможности повсеместными на домашних компьютерах, что позволило улучшить стандарты 32-битных приложений. Например, 32-разрядная версия Windows 8 требует наличия инструкций SSE2. инструкции SSE3 и более поздние версии Streaming SIMD Extensions наборы инструкций не являются стандартными функциями архитектуры.
Бит запрета выполнения
Бит запрета выполнения или бит NX (бит 63 записи таблицы страниц) позволяет операционной системе указывать, какие страницы виртуального адресного пространства могут содержать исполняемый код и не может. Попытка выполнить код со страницы, помеченной как «не выполняется», приведет к нарушению доступа к памяти, подобно попытке записи на страницу, доступную только для чтения. Это должно затруднить захват системы вредоносным кодом с помощью атак «переполнение буфера » или «непроверенный буфер». Аналогичная функция была доступна на процессорах x86 с момента появления 80286 в качестве атрибута дескрипторов сегмента ; однако это работает только для всего сегмента за раз.
Сегментированная адресация долгое время считалась устаревшим режимом работы, и все текущие операционные системы ПК фактически обходят его, устанавливая для всех сегментов базовый адрес нуля и (в их 32-битной реализации) размером 4 ГБ. AMD была первым поставщиком семейства x86, реализовавшим режим без выполнения в режиме линейной адресации. Эта функция также доступна в устаревшем режиме на процессорах AMD64 и последних процессорах Intel x86, когда используется PAE.
Удаление старых функций
Несколько функций "системного программирования" архитектуры x86 либо не использовались, либо недостаточно использовались в современных операционных системах и либо недоступны на AMD64 в длинном (64-битном и совместимость) режиме, либо существуют только в ограниченной форме. К ним относятся сегментированная адресация (хотя сегменты FS и GS сохраняются в рудиментарной форме для использования в качестве дополнительных базовых указателей на структуры операционной системы), механизм переключения состояния задачи и виртуальный режим 8086. Эти функции остаются полностью реализованными в «устаревшем режиме», что позволяет этим процессорам работать с 32-разрядными и 16-разрядными операционными системами без изменений. Некоторые инструкции, которые оказались редко полезными, не поддерживаются в 64-битном режиме, включая сохранение / восстановление сегментных регистров в стеке, сохранение / восстановление всех регистров (PUSHA / POPA), десятичную арифметику, инструкции BOUND и INTO и " far "перескакивает и вызывает немедленные операнды.

Подробности виртуального адресного пространства

Каноническая форма адресов

Реализации канонического адресного пространства (диаграммы без масштабирования) Текущая 48-битная реализация 56 -битовая реализация 64-битная реализация

Хотя виртуальные адреса имеют ширину 64 бита в 64-битном режиме, текущие реализации (и все микросхемы, которые, как известно, находятся на стадии планирования) не позволяют использовать все виртуальное адресное пространство 2 байта (16 EiB). Это будет примерно в четыре миллиарда раз больше размера виртуального адресного пространства на 32-битных машинах. Большинству операционных систем и приложений в обозримом будущем не потребуется такое большое адресное пространство, поэтому реализация таких широких виртуальных адресов просто увеличит сложность и стоимость трансляции адресов без реальной выгоды. Поэтому AMD решила, что в первых реализациях архитектуры только 48 младших битов виртуального адреса будут фактически использоваться при трансляции адресов (таблица страниц поиск).

Кроме того, спецификация AMD требует, чтобы 16 старших битов любого виртуального адреса, биты с 48 по 63, были копиями бита 47 (аналогично расширению знака ). Если это требование не выполнено, процессор вызовет исключение. Адреса, соответствующие этому правилу, называются «канонической формой». Адреса канонической формы варьируются от 0 до 00007FFF'FFFFFFFF и от FFFF8000'00000000 до FFFFFFFF'FFFFFFFF, в общей сложности 256 ТиБ используемого виртуального адресного пространства. Это все еще в 65 536 раз больше, чем виртуальное адресное пространство 4 ГиБ 32-разрядных машин.

Эта функция упрощает последующее масштабирование до истинной 64-битной адресации. Многие операционные системы (включая, помимо прочего, семейство Windows NT ) берут для себя половину адресного пространства с более высоким адресом (именуемую пространство ядра ) и оставляют нижнюю часть адресного пространства. адресная половина (пользовательское пространство ) для кода приложения, стеков пользовательского режима, кучи и других областей данных. Дизайн «канонического адреса» гарантирует, что каждая реализация, совместимая с AMD64, по сути, имеет две половины памяти: нижняя половина начинается с 0000000000000000 и «растет вверх» по мере того, как становится доступным больше битов виртуального адреса, а верхняя половина «закрепляется» в верхнюю часть адресного пространства и растет вниз. Кроме того, обеспечение «канонической формы» адресов путем проверки неиспользуемых битов адреса предотвращает их использование операционной системой в тегированных указателях в качестве флагов, маркеров привилегий и т. Д., Поскольку такое использование может стать проблематичным, если архитектура расширен для реализации большего количества битов виртуального адреса.

Первые версии Windows для x64 даже не использовали полные 256 ТиБ; они были ограничены всего 8 ТиБ пользовательского пространства и 8 ТиБ пространства ядра. Windows не поддерживала все 48-битное адресное пространство до Windows 8.1, выпущенной в октябре 2013 года.

Структура таблицы страниц

64-битный режим адресации ( «длинный режим ») является расширенным набором расширений физического адреса (PAE); из-за этого размеры страницы могут быть 4 KiB (2 байта) или 2 MiB (2 байта). В длинном режиме также поддерживаются страницы размером 1 ГиБ (2 байта). Вместо трехуровневой системы таблицы страниц, используемой системами в режиме PAE, системы, работающие в длинном режиме, используют четыре уровня таблицы страниц: Таблица указателей страниц-каталогов PAE расширена с четырех записей до 512, и добавлена ​​дополнительная таблица Page-Map Level 4 (PML4), содержащая 512 записей в 48-битных реализациях. Полная иерархия сопоставления страниц размером 4 КиБ для всего 48-битного пространства займет чуть больше 512 ГиБ памяти (около 0,195% виртуального пространства 256 ТиБ).

Intel реализовала схему с 5-уровневой таблицей страниц, которая позволяет процессорам Intel 64 поддерживать 57-битное виртуальное адресное пространство. Дальнейшие расширения могут обеспечить полное 64-битное виртуальное адресное пространство и физическую память за счет увеличения размера записи таблицы страниц до 128-битного и уменьшить количество обходов страниц в 5-уровневой иерархии за счет использования большего размера выделения страниц 64 КиБ, который по-прежнему поддерживает 4 КиБ операции со страницами для обратной совместимости.

Ограничения операционной системы

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

Подробная информация о физическом адресном пространстве

Текущие процессоры AMD64 поддерживают физическое адресное пространство объемом до 2 байтов ОЗУ или 256 ТиБ. Однако по состоянию на июнь 2010 г. не было известных материнских плат x86-64 , поддерживающих 256 ТиБ ОЗУ. Операционная система может накладывать дополнительные ограничения на объем оперативной памяти, который можно использовать или поддерживать. Подробности по этому поводу приведены в разделе «Совместимость и характеристики операционной системы » данной статьи.

Рабочие режимы

Архитектура имеет три основных режима работы: длительный режим, традиционный режим и реальный режим.

ОперационнаяОперационная система. ТребуетсяТип кода., который выполняетсяразмер
режимподрежимадрес (по умолчанию)операнд (по умолчанию)операнд (тип. Поддерживается)Регистровый файл
Длинный режим. 64- битовый режим 64-битный64-битный код 64-битный32-битный8, 16, 32 или 64 бит16 регистров на файл
Режим совместимости32-битный код 32-битный32-битный8-, 16- или 32-битный8 регистров на файл
16-битный код 16 бит16 бит8, 16 или 32 бит8 регистров на файл
Устаревший режим.Защищенный режим 32-битный32-битный код 32-битный32-битный8, 16 или 32-битный8 регистров на файл
16-битный защищенный режим16-битный код 16 бит16 бит8, 16 или 32 бит8 регистров на файл
Виртуальный режим 8086 16-битный или 32-битный защищенный режимнекоторые из промышленного режима 16 бит16 бит8, 16 или 32 бит8 регистров на файл
Реальный. режимНереальный режим неткод реального режима 16, 20 или 32 бит а16 бит8, 16 или 32 бита8 регистров на файл
Реальный режим неткод реального режима 16, 20 или 21 бит16 бит8, 16 или 32 бит8 регистров в файле
Диаграмма состояний режимов работы x86- 64

Длинный режим

Длинный режим - предполагаемый основной режим работы архитектуры; это комбинация собственного 64-битного режима процессора и комбинированного 32-битного и 16-битного режима совместимости. Он используется 64-битными операционными системами. В 64-битной операционной системе 64-битные программы работают в 64-битном режиме, а 32-битные и 16-битные приложения в защищенном режиме (не нужно использовать ни реальный режим, ни виртуальный режим 8086 для выполнения в любом времени) режим совместимости. Программы реального режима и программы, которые используют виртуальный режим 8086 в любом время, не могут работать в длительном режиме, если эти режимы не эмулируются в программном режиме. Однако такие программы могут быть запущены из операционной системы, работающей в длительном режиме на процессоре, поддерживающих VT-x или AMD-V, путем создания виртуального процессора, работающего в желаемом режиме.

Временный базовый набор инструкций тот же, почти нет потери производительности для выполнения кода x86 в защищенном режиме. Это отличается от Intel IA-64, где разные в базовом наборе команд означают, что запуск 32-битного кода должен быть либо в режиме эмуляции x86 (что замедляет процесс), либо с помощью специального сопроцессора x86. Однако на платформе x86-64 многие приложения x86 могут выиграть от 64-битной перекомпиляции из-за дополнительных регистров в 64-битном коде и гарантированной поддержки FPU на основе SSE2, что компилятор можно использовать для оптимизации. Приложения, которые регулярно обрабатывают целые числа шириной более 32, такие как криптографические алгоритмы, требуют переписать код, обрабатывающие целые числа, чтобы использовать преимущества 64-битных регистров.

Устаревший режим

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

Реальный режим

Реальный режим - это начальный режим работы при инициализации процессора. Он обратно совместим с исходными процессорами 8086 и 8088. Реальный режим сегодня в основном используется загрузчиками операционной системы, требуются архитектурные настройки для настройки деталей виртуальной памяти перед переходом в более высокие режимы.

Intel 64

Intel 64 - это реализация Intel x86-64, используемая и реализуемая в различных процессорах Intel.

История

Исторически AMD разработала и производила процессоры с наборами инструкций поцу оригинальных разработок Intel, но с x86-64 роли поменялись местами: Intel оказалась в позиции принятия ISA, которую AMD создала расширение собственной линейки процессоров Intel x86.

Первоначально проект Intel был под кодовым названием Ямхилл (от реки Ямхилл в долине Уилламетт в Орегоне). После нескольких лет отрицания своего существования Intel объявила на IDF в феврале 2004 г., что проект действительно находится в стадии реализации. В то время председатель Intel, Крейг Барретт, признал, что это был один из их худших секретов.

Название Intel для этого набора инструкций менялось несколько раз. Имя, используемое в IDF, было CT (предположительно для Clackamas Technology, еще одно кодовое название из реки Орегон ); через несколько недель они стали называть его IA-32e (для расширений IA-32 ), в марте 2004 г. обнародовали «официальное» название EM64T (технология Extended Memory 64). В конце 2006 года Intel начала вместо этого использовать название Intel 64 для реализации, с использованием AMD AMD64.

Первым процессором, реализовавшим Intel 64, был код многопроцессорного процессора Xeon. под названием Nocona в июне 2004 года. Напротив, первые чипы Prescott (февраль 2004 года) не поддерживали эту функцию. Впервые Intel начала продавать процессоры Pentium 4 с процессором Intel 64, использующие версию E0 ядра Prescott, продаваемую на рынке OEM как Pentium 4, модель F. В версии E0 также добавлена ​​функция eXecute Disable (XD) (название Intel для NX bit ) в Intel 64 и был включен в текущую версию Xeon под кодовым названием Irwindale. Официальным выпуском Intel 64 (в то время под названием EM64T) Intel в качестве процессоров для массовых настольных ПК стал Prescott-2M степпинга N0.

Первым мобильным процессором Intel , реализующим Intel 64, является версией Merom процессора Core 2, выпущенная 27 июля 2006 г. Ни один из более ранних процессоров Intel для ноутбуков (Core Duo, Pentium M, Celeron M, Mobile Pentium 4 ) не поддерживает Intel 64.

Реализации

Процессоры Intel, реализующие архитектуру Intel64, включая Pentium 4 F-series / 5x1 series, 506 и 516, Celeron D модели 3x1, 3x6, 355, 347, 352, 360 и 365 и все более поздние Celeron, все модели Xeon начиная с «Nocona », все модели Процессоры Pentium Dual-Core начиная с "Merom-2M ", Atom 230, 330, D410, D425, D510, D525, N450, N455, N470, N475, N550, N570, N2600 и N2800, все версии Pentium D, Pentium Extreme Edition, Core 2, Core i9, Core i7, Core i5 и Core i3 процессоры, а Xeon Phi Процессоры серии 7200.

Реализация VIA x86-64

VIA Technologies представила свою первую работу архитектуры x86-64 в 2008 г. году после пяти лет разработки ее подразделением по процессорам, Centaur Technology. 64-разрядная архитектура под кодовым названием «Isaiah» была представлена ​​24 января 2008 г. и запущена 29 мая под торговой маркой VIA Nano.

Процессор поддерживает ряд VIA- специальные расширения x86, предназначенные для повышения эффективности устройств с низким энергопотреблением. Ожидается, что Isaiah будет вдвое быстрее по производительности целых чисел и в четыре раза быстрее по производительности с плавающей запятой, чем предыдущее поколение VIA Esther при эквивалентном тактовая частота. Ожидается, что энергопотребление будет на уровне процессоров VIA предыдущего поколения с расчетной тепловой мощностью в диапазоне от 5 Вт до 25 Вт. Архитектура Isaiah представляет собой полностью новую конструкцию и поддерживает все функции. например, набор команд x86-64 и виртуализация x86, которые были недоступны в его предшественниках, строка VIA C7 при сохранении их расширений шифрования.

Различия между AMD64 и Intel 64

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

Недавние реализации

  • Инструкции Intel 64 BSF и BSR Следует иначе, чем AMD64, когда равенство источника нулю а размер операнда составляет 32 бита. Процессор устанавливает нулевой флаг и оставляет верхние 32 бита места назначения неопределенными.
  • AMD64 требует обновления микрокода другого формата и управляет MSR (регистры для конкретных моделей), в то время как Intel 64 реализует микрокод обновление без изменений по сравнению с 32-разрядными процессорами.
  • Intel 64 не хватает некоторых MSR, которые считаются архитектурными в AMD64. К ним относятся SYSCFG, TOP_MEMи TOP_MEM2.
  • Intel 64 позволяет SYSCALL/ SYSRETтолько в 64-битном режиме (не в режиме совместимости) и позволяет SYSENTER/ SYSEXITв обоих режимах. AMD64 не хватает SYSENTER/ SYSEXITв обоих подрежимах длинного режима.
  • В 64-битном режиме близкие ветви с префиксом 66H (переопределение размера операнда) ведут себя по-разному.. Intel 64 игнорирует этот префикс: инструкция имеет 32-битное расширенное смещение знака, а указатель инструкции не усекается. AMD64 использует 16-битное поле с нарушением инструкции и очищает верхние 48 битателя инструкции.
  • Процессоры AMD вызывают недопустимое исключение с плавающей запятой при выполнении FLDили FSTP80-битного сигнального NaN, в то время как процессоры Intel этого не делают.
  • Intel 64 не имеет возможности задействовать сокращенную (и, следовательно, более быструю) версию с плавающей запятой (включая инструкции FXSAVEи FXRSTOR).
  • процессоры AMD, начиная с Opteron Rev. E и Athlon 64 Rev. D повторно представили ограниченную поддержку сегментации с помощью бита включения предела сегмента в длинном режиме (LMSLE), чтобы упростить виртуализацию 64-разрядных гостей.
  • При возврате неканонического адреса с <использованием>SYSRETпроцессоры AMD64 выполняет общий обработчик сбоев защиты на уровне привилегий 3, а на процессоре Intel 64 выполняется на уровне привилегий 0.

Старые реализации

  • Ранние процессоры AMD64 (обычно на Socket 939) и 940) отсутствовала инструкция CMPXCHG16B, которая является расширением инструкции CMPXCHG8B, присутствующая на большинстве пост- 80486 процессоров. Подобно CMPXCHG8B, CMPXCHG16Bдопускает атомарные операции с окта-словами (128-битные значения). Это полезно для параллельных алгоритмов, которые используют сравнение и замену для данных, размер которых превышает размер указателя, что является обычным для алгоритмов без блокировки и без ожидания. Без CMPXCHG16Bнеобходимо использовать обходные пути, такие как критический раздел или альтернативные подходы без блокировок. Его отсутствие также не позволяет 64-битной Windows до Windows 8.1 иметь адресное пространство пользовательского режима размером более 8 терабайт. 64-разрядная версия Windows 8.1 требует инструкции.
  • Ранние процессоры AMD64 и Intel 64 не имели инструкций LAHFи SAHFв 64-битовый режим. AMD представила эти инструкции (в том числе в 64-битном режиме) со своими процессорами Athlon 64, Opteron и Turion 64 версии D в марте 2005 года, а Intel представила инструкции для Pentium 4 G1 степпинга в декабре 2005 года. 64-битная версия Windows 8.1 требуется эта функция.
  • Ранние процессоры Intel с Intel 64 также не имеют бита NX архитектуры AMD64. Эта функция требуется для всех версий Windows 8.x.
  • Ранние реализации Intel 64 (Prescott и Cedar Mill ) разрешали доступ только к 64 ГиБ физической памяти в то время как оригинальные реализации AMD64 позволяли получить доступ к 1 ТиБ физической память. Последние реализации AMD64 поддерживает 256 физических адресов (и AMD расширение до 4 ПиБ), в то время как некоторые реализации Intel 64 могут адресовать до 64 ТиБ. Объем физической памяти такого размера подходит для крупномасштабных приложений (таких как большие базы данных) и высокопроизводительных вычислений (централизованно ориентированные приложения и научные вычисления).

Принятие

Диаграмма с областями, показывающая представление различных семейств микропроцессоров в рейтинге суперкомпьютеров TOP500 с 1992 по 2014 год.

В суперкомпьютерах, отслеживаемых TOP500, появление 64-битных расширений для архитектуры x86 позволило 64-битным процессоры x86 от AMD и Intel для замены большинства архитектур процессоров RISC, ранее использовавшихся в таких системах (включая PA-RISC, SPARC, Alpha и другие), а также как 32-битный x86, хотя сама Intel изначально безуспешно пыталась заменить x86 на новую несовместимую 64-битную архитектуру в процессоре Itanium.

По состоянию на 2020 год суперкомпьютер на базе Fujitsu A64FX под названием Fugaku является номером один. Первый суперкомпьютер на базе ARM появился в списке в 2018 году, и в последние годы сопроцессоры с архитектурой без процессора (GPGPU ) также сыграли большую роль в производительности. Сопроцессоры Intel Xeon Phi "Knights Corner", которые реализуют подмножество x86-64 с некоторыми векторными расширениями, также используются вместе с процессорами x86-64 в Tianhe-2 суперкомпьютер.

Совместимость и характеристики операционной системы

Следующие операционные системы и выпуски поддерживают архитектуру x86-64 в длинном режиме.

BSD

DragonFly BSD

Предварительные инфраструктурные работы были начаты в феврале 2004 года для порта x86-64. Позже это развитие застопорилось. Разработка снова началась в июле 2007 г. и продолжалась в течение Google Summer of Code 2008 и SoC 2009. Первым официальным выпуском, который содержал поддержку x86-64, была версия 2.4.

FreeBSD

FreeBSD Впервые поддержка x86-64 была добавлена ​​под названием «amd64» в качестве экспериментальной архитектуры в 5.1-RELEASE в июне 2003 года. Она была включена в стандартную архитектуру распространения с версии 5.2-RELEASE в январе 2004 года. С тех пор FreeBSD обозначила ее в качестве платформы уровня 1. В версии 6.0-RELEASE устранены некоторые причуды при запуске исполняемых файлов x86 под amd64, и большинство драйверов работают так же, как и на архитектуре x86. В настоящее время ведется работа по более полной интеграции двоичного интерфейса приложения x86 (ABI) таким же образом, как в настоящее время работает совместимость с 32-битным ABI Linux.

Поддержка архитектуры NetBSD

x86-64 впервые была передана в дерево исходных текстов NetBSD 19 июня 2001 г. Начиная с версии NetBSD 2.0, выпущенной 9 декабря 2004 г., NetBSD / amd64 - это полностью интегрированный и поддерживаемый порт. 32-битный код по-прежнему поддерживается в 64-битном режиме с уровнем совместимости ядра netbsd-32 для 32-битных системных вызовов. Бит NX используется для предоставления неисполняемого стека и кучи с гранулярностью по страницам (сегментная гранулярность используется на 32-разрядной платформе x86).

OpenBSD

OpenBSD поддерживает AMD64 с момента выпуска OpenBSD 3.5, выпущенного 1 мая 2004 года. Полная реализация поддержки AMD64 в дереве была достигнута до первого выпуска оборудования, поскольку AMD предоставила в аренду несколько машин для проекта хакатона в том же году. Разработчики OpenBSD перешли на платформу из-за ее поддержки NX bit, что позволило легко реализовать функцию W ^ X.

Код для порта AMD64 OpenBSD также работает на процессорах Intel 64, которые содержат клонированное использование расширений AMD64, но поскольку Intel не включила бит NX таблицы страниц в ранних процессорах Intel 64, W ^ Возможность X на этих процессорах Intel; позже процессоры Intel 64 добавили бит NX под названием «бит XD». Симметричная многопроцессорная обработка (SMP) работает на порте OpenBSD AMD64, начиная с версии 3.6 от 1 ноября 2004 года.

DOS

Можно ввести длинный режим в DOS без расширителя DOS, но пользователь должен вернуться в реальный режим, чтобы вызывать прерывания BIOS или DOS.

Также возможно войти в длинный режим с расширителем DOS, аналогичным DOS / 4GW, но более сложным, поскольку x86-64 отсутствует виртуальный режим 8086. Сама DOS не знает об этом, и не следует ожидать каких-либо преимуществ, если DOS не запускается в эмуляции с адекватным внутренним интерфейсом драйвера виртуализации, например: m интерфейс хранения задницы.

Linux

Linux был первым ядром операционной системы, которое запускало мощность оборудования x86-64 в длинном режиме, начиная с версии 2.4 в 2001 году (предшествовавшей доступности оборудования). Linux также обеспечивает обратную совместимость для запуска 32-разрядных исполняемых файлов. Это позволяет перекомпилировать программы в длинный режим, сохраняя при этом использование 32-битных программ. Некоторые дистрибутивы Linux поставляются с собственными ядрами x86-64 и пользовательскими областями. Некоторые, такие как Arch Linux, SUSE, Mandriva и Debian, позволяют устанавливать набор 32-битных компонентов и библиотек. при установке с 64-битного DVD, что позволяет большинству установки 32-битных приложений работать вместе с 64-битной ОС. Другие дистрибутивы, такие как Fedora, Slackware и Ubuntu, доступны в одной версии, скомпилированной для 32-разрядной архитектуры, а другой - для 64-разрядной архитектуры.. Fedora и Red Hat Enterprise Linux допускают одновременную установку всех компонентов пользовательского пространства как в 32-битной, так и в 64-битной версии в 64-битной системе.

x32 ABI (двоичный интерфейс приложения), представленный в Linux 3.4, позволяет программам, скомпилированным для x32 ABI, работать в 64-битном режиме x86-64, используя только 32-битные указатели и поля данных. Хотя это ограничивает программу виртуальным адресным пространством в 4 ГБ, это также уменьшает объем памяти, занимаемой программой, и в некоторых случаях позволяет ей работать быстрее.

64-разрядная версия Linux позволяет использовать до 128 ТБ виртуального адресного пространства для отдельных процессов и может адресовать примерно 64 ТБ физического с учетом ограничений процессора и системы.

macOS

Mac OS X 10.4.7 и выше версии Mac OS X 10.4 запускают 64-битные инструменты строки с использованием POSIX и математических библиотек на 64-битных машинах на базе Intel, так же как все версии Mac OS X 10.4 и 10.5 запускают их на 64-битные машины PowerPC. Никакие другие библиотеки или фреймворки не работают с 64-битными приложениями в Mac OS X 10.4. Ядро и все расширения только 32-разрядные.

Mac OS X 10.5 поддерживает приложения с 64-битным графическим интерфейсом, использующие Cocoa, Quartz, OpenGL и X11 на 64-битные машины на базе Intel, а также 64-битные машины PowerPC. Все библиотеки и фреймворки без графического интерфейса также поддерживают 64-разрядные приложения на этих платформах. Ядро и все расширения ядра только 32-разрядные.

Mac OS X 10.6 - это первая версия macOS, которая поддерживает 64-битное ядро ​​. Однако не все 64-битные компьютеры могут запускать 64-битное ядро, и не все 64-битные компьютеры, которые могут запускать 64-битное ядро, будут делать это по умолчанию. 64-битное ядро, как и 32-битное ядро, поддерживает 32-битные приложения; оба ядра также поддерживают 64-битные приложения. 32-разрядные приложения имеют ограничение виртуального адресного пространства в 4 ГБ для любого ядра.

OS X 10.8 включает только 64-разрядное ядро, но продолжает поддерживать 32-разрядные приложения.

macOS 10.15 включает только 64-битное ядро ​​и больше не поддерживает 32-битные приложения.

64-битное ядро ​​не поддерживает 32-битные расширения ядра, а 32-битное ядро ​​не поддерживает 64-битные расширения ядра.

macOS использует универсальный двоичный формат для упаковки 32- и 64-разрядных версий кода приложения и библиотеки в один файл; наиболее подходящая версия автоматически выбирается во время загрузки. В Mac OS X 10.6 универсальный двоичный формат также используется для ядра и для тех расширений ядра, которые поддерживают как 32-битные, так и 64-битные ядра.

Solaris

Solaris 10 и более поздние версии поддерживают архитектуру x86-64.

Для Solaris 10, как и в архитектуре SPARC, существует только один образ операционной системы, который содержит 32-битное ядро ​​и 64-битное ядро; он помечен как образ DVD-ROM "x64 / x86". По умолчанию загружается 64-разрядное ядро, что позволяет запускать как 64-разрядные, так и существующие или новые 32-разрядные исполняемые файлы. 32-битное ядро ​​также можно выбрать вручную, и в этом случае будут работать только 32-битные исполняемые файлы. Команда isainfoможет использоваться, чтобы определить, работает ли система с 64-битным ядром.

Для Solaris 11 предоставляется только 64-битное ядро. Однако 64-битное ядро ​​поддерживает как 32-, так и 64-битные исполняемые файлы, библиотеки и системные вызовы.

Windows

версии x64 клиента и сервера Microsoft Windows - Windows XP Professional x64 Edition и Windows Server 2003 x64 Edition - были выпущены в марте 2005. На самом деле они представляют собой одну и ту же сборку (5.2.3790.1830 SP1), поскольку они используют одну и ту же исходную базу и двоичные файлы операционной системы, поэтому даже системные обновления выпускаются в унифицированных пакетах, во многом аналогично выпускам Windows 2000 Professional и Server для x86. Windows Vista, которая также имеет множество различных редакций, была выпущена в январе 2007 года. Windows 7 была выпущена в июле 2009 года. Windows Server 2008 R2 продавалась только в редакции x64 и Itanium; более поздние версии Windows Server предлагают только версию x64.

Версии Windows для x64 до Windows 8.1 и Windows Server 2012 R2 предлагают следующее:

  • 8 ТиБ виртуального адресного пространства на процесс, доступный как из пользовательского режима, так и из режима ядра, называемый пользователем адресное пространство режима. Программа x64 может использовать все это с учетом ограничений резервного хранилища в системе и при условии, что она связана с опцией «большой адрес». Это в 4096 раз больше, чем виртуальное адресное пространство пользовательского режима по умолчанию в 2 ГиБ, предлагаемое 32-разрядной Windows.
  • 8 ТиБ виртуального адресного пространства режима ядра для операционной системы. Как и в случае адресного пространства пользовательского режима, это 4096-кратное увеличение по сравнению с 32-разрядными версиями Windows. Увеличение пространства в первую очередь приносит пользу кэшу файловой системы и «кучам» режима ядра (невыгружаемый пул и выгружаемый пул). Windows использует всего 16 ТиБ из 256 ТиБ, реализованных процессорами, потому что в ранних процессорах AMD64 отсутствовала инструкция CMPXCHG16B.

В Windows 8.1 и Windows Server 2012 R2, как в пользовательском режиме, так и в режиме ядра виртуальные адресные пространства увеличены до 128 ТиБ. Эти версии Windows не устанавливаются на процессоры, в которых отсутствует инструкция CMPXCHG16B.

Следующие дополнительные характеристики применимы ко всем версиям Windows x64:

  • Возможность запускать существующие 32-разрядные приложения (программы .exe) и библиотеки динамической компоновки (.dlls) с использованием WoW64, если WoW64 поддерживается этой версией. Более того, 32-битная программа, если она была связана с опцией «большой адрес», может использовать до 4 ГиБ виртуального адресного пространства в 64-битной Windows вместо 2 ГиБ по умолчанию (необязательно 3 ГиБ с / 3GBвариант загрузки и вариант ссылки «большой адрес»), предлагаемые 32-разрядной Windows. В отличие от использования параметра загрузки / 3GBна x86, это не уменьшает виртуальное адресное пространство режима ядра, доступное для операционной системы. Следовательно, 32-разрядные приложения могут выиграть от работы в x64 Windows, даже если они не перекомпилированы для x86-64.
  • Как 32-, так и 64-разрядные приложения, если они не связаны с «поддержкой больших адресов», ограничены 2 ГиБ виртуального адресного пространства.
  • Возможность использовать до 128 ГиБ (Windows XP / Vista), 192 ГиБ (Windows 7), 512 ГиБ (Windows 8), 1 ТиБ (Windows Server 2003)), 2 ТиБ (Windows Server 2008 / Windows 10), 4 ТиБ (Windows Server 2012) или 24 ТиБ (Windows Server 2016/2019) физической памяти с произвольным доступом (ОЗУ).
  • LLP64 модель данных: Типы int и long имеют ширину 32 бита, long long - 64 бита, а указатели и типы, производные от указателей, имеют ширину 64 бита.
  • Драйверы устройств режима ядра должны быть 64-битными версиями; в 64-разрядной операционной системе невозможно запустить 32-разрядные исполняемые файлы режима ядра. Драйверы устройств пользовательского режима могут быть 32-разрядными или 64-разрядными.
  • 16-разрядные приложения Windows (Win16) и DOS не будут работать в версиях Windows x86-64 из-за удаления Подсистема виртуальной машины DOS (NTVDM), которая полагалась на возможность использовать виртуальный режим 8086. Невозможно войти в виртуальный режим 8086 при работе в длинном режиме.
  • Полная реализация функции защиты страницы NX (No Execute). Это также реализовано в последних 32-разрядных версиях Windows, когда они запускаются в режиме PAE.
  • Вместо дескриптора сегмента FS в версиях x86 семейства Windows NT используется дескриптор сегмента GS. используется для указания на две структуры, определенные операционной системой: блок информации о потоке (NT_TIB) в пользовательском режиме и область управления процессором (KPCR) в режиме ядра. Так, например, в пользовательском режиме GS: 0- это адрес первого члена блока информации о потоке. Соблюдение этого соглашения упростило перенос x86-64, но потребовало от AMD сохранить функцию сегментов FS и GS в долгом режиме, хотя сегментированная адресация сама по себе не используется ни одной современной операционной системой.
  • В ранних отчетах утверждалось, что планировщик операционной системы не будет сохранять и восстанавливать состояние машины x87 FPU при переключении контекста потока. Наблюдаемое поведение показывает, что это не так: состояние x87 сохраняется и восстанавливается, за исключением потоков, работающих только в режиме ядра (ограничение, которое существует и в 32-разрядной версии). В самой последней документации, доступной от Microsoft, говорится, что x87 / MMX / 3DNow! инструкции могут использоваться в длинном режиме, но они устарели и могут вызвать проблемы совместимости в будущем.
  • Некоторые компоненты, такие как Microsoft Jet Database Engine и Объекты доступа к данным не будет перенесен на 64-битные архитектуры, такие как x86-64 и IA-64.
  • Microsoft Visual Studio может компилировать собственные приложения для работы с архитектурой x86-64, которая может работать только в 64-битной Microsoft Windows или архитектуре IA-32, которая может работать как 32-битное приложение в 32-битной Microsoft Windows или 64-битной Microsoft Windows в WoW64 режим эмуляции. Управляемые приложения могут быть скомпилированы в режимах IA-32, x86-64 или AnyCPU. Программное обеспечение, созданное в первых двух режимах, ведет себя как их аналоги в собственном коде IA-32 или x86-64 соответственно; Однако при использовании режима AnyCPU приложения в 32-битных версиях Microsoft Windows работают как 32-битные приложения, а в 64-битных версиях Microsoft Windows они работают как 64-битные приложения.

Консоли для видеоигр

И PlayStation 4, и Xbox One, и их варианты включают в себя процессоры AMD x86-64 на основе микроархитектуры Jaguar . Прошивки и игры написаны в коде x86-64; никакой устаревший код x86 не используется.

Их следующие поколения, PlayStation 5 и Xbox Series X и Series S соответственно, также включают процессоры AMD x86-64 на основе Zen 2 микроархитектура.

Отраслевые соглашения об именах

Поскольку AMD64 и Intel 64 по существу схожи, многие программные и аппаратные продукты используют один термин, не зависящий от производителя, для обозначения их совместимости с обеими реализациями. Оригинальное обозначение AMD для этой архитектуры процессора, «x86-64», до сих пор иногда используется для этой цели, как вариант «x86_64». Другие компании, такие как Microsoft и Sun Microsystems / Oracle Corporation, используют сокращение «x64» в маркетинговых материалах.

Термин IA-64 относится к процессору Itanium, и его не следует путать с x86-64, поскольку это совершенно другой набор инструкций.

Многие операционные системы и продукты, особенно те, которые представили поддержку x86-64 до выхода Intel на рынок, используют термин «AMD64» или «amd64» для обозначения как AMD64, так и Intel 64.

  • amd64
    • Большинство систем BSD, таких как FreeBSD, MidnightBSD, NetBSD и OpenBSD, относятся к AMD64 и Intel 64 под названием архитектуры «amd64».
    • Некоторые дистрибутивы Linux, такие как Debian, Ubuntu, Gentoo Linux относятся как к AMD64, так и к Intel 64 под названием архитектуры «amd64».
    • Версии Microsoft Windows x64 используют внутреннее имя AMD64 для обозначения различных компонентов, которые используют эту архитектуру или совместимы с ней. Например, переменной среды PROCESSOR_ARCHITECTURE присвоено значение «AMD64», а не «x86» в 32-разрядных версиях, а системный каталог на установочном компакт-диске Windows x64 Edition называется «AMD64»., в отличие от "i386" в 32-битных версиях.
    • Команда Sun Solaris 'isalist идентифицирует системы на базе AMD64 и Intel 64 как "amd64".
    • Разработка на Java Комплект (JDK): имя «amd64» используется в именах каталогов, содержащих файлы x86-64.
  • x86_64
    • ядро ​​Linux и коллекция компиляторов GNU относится к 64-битной архитектуре как «x86_64».
    • Некоторые дистрибутивы Linux, такие как Fedora, openSUSE, Arch Linux, Gentoo Linux относится к этой 64-битной архитектуре как «x86_64».
    • Apple macOS относится к 64-битной архитектуре как «x86-64» или «x86_64», как видно из команды Терминала archи в документации разработчика.
    • Нарушение работы с большинством других систем BSD, DragonFly BSD обозначает 64-разрядную архитектуру как «x86_64».
    • Haiku обозначает 64-разрядную архитектуру как «x86_64».

Лицензирование

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

См. Также

Примечания

Ссылки

Внешние ссылки

Последняя правка сделана 2021-06-22 06:10:35
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте