x86-64

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 13:35, 12 января 2019.

X86-64.jpg

x86-64 (также AMD64/Intel64/EM64T) — 64-битное расширение [Источник 1], набор команд для архитектуры x86, разработанное компанией AMD, позволяющее выполнять программы в 64-разрядном режиме. Это расширение архитектуры x86 с почти полной обратной совместимостью.

Корпорации Microsoft и Oracle используют для обозначения этого набора инструкций термин «x64», однако каталог с файлами для архитектуры в 64-разрядных Microsoft Windows называется «amd64» («i386» для архитектуры x86).

Набор команд x86-64 в настоящее время поддерживается:

  • AMD — процессорами Z-серии (например, AMD Z-03), C-серии (например, AMD C-60), G-серии (например, AMD T56N), E-серии (например, AMD E-450), E1, E2, A4, A6, A8, A10, FX, Athlon 64, Athlon 64 FX, Athlon 64 X2, Athlon II, Phenom, Phenom II, Turion 64, Turion 64 X2, Turion II, Opteron, FX, Ryzen, последними моделями Sempron;
  • Intel (с незначительными упрощениями) под названием «Intel 64» (ранее известные как «EM64T» и «IA-32e») в поздних моделях процессоров Pentium 4, а также в Pentium D, Pentium Extreme Edition, Celeron D, Celeron G-серии, Celeron B-серии, Pentium Dual-Core, Pentium T-серии, Pentium P-серии, Pentium G-серии, Pentium B-серии, Core 2 Duo, Core 2 Quad, Core 2 Extreme, Core i3, Core i5, Core i7, Atom (далеко не всеми, но большинством последних) и Xeon;
  • VIA — процессорами Nano.

История 64-битных систем

64-битность только недавно вошла в жизнь большинства пользователей и прикладных программистов. Однако работа с 64-битными данными имеет уже длинную историю[Источник 2].

  • 1961: IBM создает суперкомпьютер IBM 7030 Stretch, использующий 64-битные данные и 32- и 64-битные машинные коды.
  • 1974: Control Data Corporation представляет векторный суперкомпьютер CDC STAR-100, имеющий 64-разрядные инструкции (предыдущие системы CDC использовали 60 бит для хранения инструкций).
  • 1976: Cray создает суперкомпьютер Cray-1, использующий 64-битные машинные коды.
  • 1983: Elxsi выпустила параллельный минисуперкомпьютер Elxsi 6400, имеющий 64-битные регистры данных и 32-битную систему адресации.
  • 1985: Cray выпускает UNICOS — первую 64-битную реализацию операционной системы Unix.
  • 1991: MIPS Technologies выпустила первый 64-разрядный микропроцессор R4000, с системой команд MIPS III. Процессор использовался в графических станциях Silicon Graphics начиная с SGI Crimson. В Kendall Square Research создают суперкомпьютер KSR1 на базе 64-разрядных процессоров. Использовалась операционная система OSF/1.
  • 1992: Digital Equipment Corporation (DEC) начал выпуск 64-разрядных процессоров Alpha, развившихся из проекта DEC PRISM|PRISM.
  • 1993: DEC выпустила Юникс-подобную 64-разрядную ОС OSF/1 для систем с процессорами DEC Alpha (позже ОС переименована в Tru64 UNIX).
  • 1994: Intel объявляет о планах по созданию совместно с Hewlett-Packard 64-разрядной архитектуры IA-64 для замены IA-32 и PA-RISC. Датой выхода обозначен 1998—1999 года.. SGI выпускает IRIX 6.0 с 64-битной поддержкой чипсета R8000.
  • 1995: Sun начинает выпуск 64-разрядных процессоров SPARC под брендом UltraSPARC. Новая архитектура получает название SPARC v9. 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-разрядную версию архитектуры 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-разрядный мейнфрейм с архитектурой z/Architecture: zSeries z900. z/Architecture является 64-разрядным развитием 32-разрядной архитектуры ESA/390, наследника архитектуры System/360.
  • 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. Apple Computer выпустила 64-разрядный компьютер «G5» с процессором PowerPC 970 (IBM). Intel заявила, что не собирается выпускать иных 64-разрядных процессоров, кроме Itanium.
  • 2004: В ответ на коммерческий успех AMD, Intel признается, что они разрабатывали клон расширений AMD64, которому дали название IA-32e (позже переименован в EM64T, и затем еще раз в Intel 64). Intel также выпускает обновленные версии семейств процессоров Xeon и Pentium 4 с поддержкой новых команд.
  • 2004: VIA Technologies представляет свой 64-битный процессор Isaiah.
  • 2005: 31 января Sun выпустила ОС Solaris 10 с поддержкой AMD64 и EM64T. В апреле Microsoft выпустила «Windows XP Professional x64 Edition» для AMD64 и EM64T.
  • 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-битными.
  • 2013: Компания Apple выпускает первый в мире смартфон IPhone 5s, работающий на первом серийном 64-битном ARM (архитектура)-процессоре Apple A7.

Название технологии

Существует несколько вариантов названий этой технологии, которые иногда приводят к путанице.

  • x86-64 — первоначальный вариант. Именно под этим названием фирмой AMD была опубликована первая предварительная спецификация.
  • x64 — официальное название версий операционных систем Windows и Solaris, также используемое как название архитектуры фирмами Microsoft и Oracle.
  • AA-64 (AMD Architecture 64) — так архитектуру назвал популярный неофициальный справочник sandpile.org (внеся информацию практически сразу после публикаций первой предварительной спецификации) по аналогии с IA-64.
  • Hammer Architecture — название по первым ядрам процессоров, её поддерживавшим — AMD Clawhammer и AMD Sledgehammer.
  • AMD64 — после выпуска первых Clawhammer и Sledgehammer в названии архитектуры появилось название фирмы-разработчика AMD. Сейчас является официальным для реализации AMD.
  • 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.

На сегодняшний день наиболее распространёнными являются «x64», «x86-64» и «AMD64». Иногда упоминание AMD вводит пользователей в заблуждение, вплоть до того, что они отказываются использовать дистрибутивы родных версий операционной системы, мотивируя это тем, что на их процессоре Intel версия для AMD не будет работать. На самом деле распространители ПО используют название amd64 лишь потому, что именно AMD была пионером в разработке этой технологии. Часто пользователи путают архитектуру x86-64 с IA-64, ошибочно скачивая ПО для этой архитектуры, и затем обнаруживают, что программа не запускается. Во избежание подобных ошибок следует помнить, что Intel 64 и IA-64 — это совершенно разные, несовместимые между собой микропроцессорные архитектуры. Представители Intel 64 — последние модели Pentium 4, ряд моделей Celeron D, семейство Core 2, Core i3, Core i5, Core i7 и некоторые модели Intel Atom; представители IA-64 — семейства Itanium и Itanium 2.


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

Процессорные архитектуры поддерживают два режима работы: Long mode («длинный» режим) и Legacy mode («унаследованный», режим совместимости с 32-битным x86).

AMD64StateDiagram.svg.png

Long Mode

«Длинный» режим — «родной» для процессоров AMD64. Этот режим даёт возможность воспользоваться всеми дополнительными преимуществами, предоставляемыми архитектурой AMD64. Для использования этого режима необходима 64-битная операционная система, например, Windows Server 2003/2003R2/2008/2008R2/2012, Windows XP Professional x64 Edition, Windows Vista x64, Windows 7/8/8.1/10 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-битных приложений, и другой — для 32-битных программ. (Этой же методикой пользовались ранние 32-битные системы — например, Windows 95 — для выполнения 16-битных программ.)

В «длинном» режиме упразднён ряд «рудиментов» архитектуры x86, таких, как режим виртуального 8086, сегментированная модель памяти (однако, осталась возможность использования сегментов FS и GS, что полезно для быстрого нахождения важных данных потока при переключении задач), аппаратная мультизадачность, а также ряд команд, как реализующих упраздненные возможности, так и работающие с BCD-числами, которые в новых программах практически не использовались. Среди особенностей «длинного» режима следует отметить тот факт, что он активируется установкой флага CR0.PG, который используется для включения страничного MMU (при условии что такое переключение разрешено (EFER.LME=1), в противном случае просто произойдет включение MMU в «унаследованном» режиме). Таким образом, невозможно исполнение 64-битного кода с запрещённым страничным преобразованием. Это создаёт определённые трудности в программировании, поскольку при переключении из «длинного» в «унаследованный» режим и обратно (например, для вызова функций BIOS или DOS, монитором виртуальной машины, и т. д.) требуется двойной сброс MMU, для чего код переключения должен находиться в тождественно отображённой странице.

Legacy Mode

Данный «унаследованный» режим позволяет процессору AMD64 выполнять инструкции, рассчитанные для процессоров x86, и предоставляет полную совместимость с 32-битным кодом и операционными системами. В этом режиме процессор ведёт себя точно так же, как x86-процессор, например Athlon или Pentium III, и дополнительные функции, предоставляемые архитектурой AMD64 (например, дополнительные регистры), недоступны. В этом режиме 64-битные программы и операционные системы работать не будут.

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

Разработанный компанией AMD набор инструкций x86-64 (позднее переименованный в AMD64) — расширение архитектуры Intel IA-32 (x86-32). Основной отличительной особенностью AMD64 является поддержка 64-битных регистров общего назначения, 64-битных арифметических и логических операций над целыми числами и 64-битных виртуальных адресов. Для адресации новых регистров для команд введены так называемые «префиксы расширения регистра», для которых был выбран диапазон кодов 40h-4Fh, использующихся для команд INC <регистр> и DEC <регистр> в 32-битных режимах. Команды INC и DEC в 64-битном режиме должны кодироваться в более общей, двухбайтовой форме.

Архитектура x86-64 имеет[Источник 3]:

  • 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-битный процессор теоретически может адресовать 16 экзабайт памяти (2^64), Win64 в настоящий момент поддерживает 16 терабайт (2^44). Этому есть несколько причин. Текущие процессоры могут обеспечивать доступ лишь к 1 терабайту (2^40) физической памяти. Архитектура (но не аппаратная часть) может расширить это пространство до 4 петабайт (2^52). Однако в этом случае необходимо огромное количество памяти для страничных таблиц, отображающих память[Источник 4].

Помимо перечисленных ограничений, объем памяти, который доступен в той или иной версии 64-битной операционной системе Windows зависит также от коммерческих соображений компании Microsoft. Ниже приведена информация по объему памяти, поддерживаемой различными версиями 64-биными версиями Windows [Источник 5]:

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


Источники

  1. 64-bit computing in theory and practice [2001-2017]. URL:Дата обращения: 04.03.2017. http://techreport.com/review/8131 (Дата обращения: 04.03.2017)
  2. Intel 64 // Архитектура Intel® 64[2001-2017]. Дата обновления: 15.04.2016. URL: http://www.intel.ru/content/www/ru/ru/architecture-and-technology/microarchitecture/intel-64-architecture-general.html ( Дата обращения: 04.03.2017.)
  3. Intel® 64 and IA-32 Architectures Software Developer Manuals // Руководства для разработчиков ПО для архитектур Intel® 64 и IA-32. [2001-2017]. Дата обновления: 15.04.2017. URL: ttp://www.intel.ru/content/www/ru/ru/processors/architectures-software-developer-manuals.html(дата обращения: 04.03.2017.)
  4. Hit Ranking // DistroWatch. [2001-2017]. Дата обновления: 15.04.2017. URL: http://distrowatch.com/stats.php?section=popularity (дата обращения: 15.04.2017)
  5. Все о термине "64 бита" // 64 бита [2005-2017]. Дата обновления: 15.04.2017. URL: https://habrahabr.ru/company/intel/blog/93831/ (дата обращения: 09.05.2017)