x86-64

x86-64 (також AMD64/Intel64/EM64T) - 64-бітна апаратна платформа ( чіпсет, архітектура мікропроцесора і команд), розроблена компанією AMD для виконання 64 -розрядних додатків.

Це розширення архітектури x86 з майже повною зворотною сумісністю. Корпорації Microsoft і Oracle використовують для позначення цього набору інструкцій термін "x64", проте каталог з файлами для архітектури в дистрибутивах Microsoft Windows називається "amd64" (пор. "i386" для архітектури x86).

Набір команд x86-64 в даний час підтримується:


1. Назва технології

Існує кілька варіантів назв цієї технології, які іноді призводять до плутанини.

  • x86-64 - початковий варіант. Саме під цією назвою фірмою AMD була опублікована перша попередня специфікація.
  • x64 - офіційна назва версій операційних систем Windows і Solaris, також використовуване як назва архітектури фірмами Microsoft і Sun Microsystems.
  • AA-64 (AMD Architecture 64) - так архітектуру назвав популярний неофіційний довідник sandpile.org (внісши інформацію практично відразу після публікацій першої попередньої специфікації) за аналогією з IA-64.
  • Hammer Architecture - назву за першим ядрам процесорів, її підтримував - AMD Clawhammer ( обценьки) і AMD Sledgehammer ( кувалда).
  • AMD64 - після випуску перших Clawhammer і Sledgehammer у назві архітектури з'явилася назва фірми-розробника AMD. Зараз є офіційним для реалізації AMD.
  • Yamhill Tehnology - перша назва реалізації технології підприємством 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 була піонером у розробці цієї технології. Часто користувачі плутають архітектуру Intel 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.


2. Режими роботи

Процесори архітектури підтримують два режими роботи: Long mode ("довгий" режим) і Legacy mode ("спадковий", режим сумісності з 32-бітним x86).

2.1. Long Mode

"Довгий" режим - "рідний" для процесорів AMD64. Цей режим дає можливість скористатися всіма додатковими перевагами, наданими архітектурою AMD64. Для використання цього режиму необхідна 64-бітна операційна система, наприклад, Windows Server 2003/2003R2/2008/2008R2/2012, Windows XP Professional x64 Edition, Windows Vista x64, Windows 7 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, для чого код перемикання повинен знаходитися в тотожно відображеної сторінці.


2.2. Legacy Mode

Даний "спадковий" режим дозволяє процесору AMD64 виконувати інструкції, розраховані для процесорів x86, і надає повну сумісність з 32-бітним кодом і операційними системами. У цьому режимі процесор поводиться точно так само, як x86-процесор, наприклад Athlon або Pentium III, і додаткові функції, надані архітектурою AMD64 (наприклад, додаткові регістри) недоступні. У цьому режимі 64-бітові програми та операційні системи працювати не будуть.

3. Особливості архітектури

Розроблений компанією 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);
  • 16128-бітних регістрів SSE (XMM0 - XMM15);
  • 64-бітний покажчик RIP і 64-бітний регістр прапорів RFLAGS.

4. Сегментна модель організації пам'яті

Розробляючи архітектуру x86-64, інженери корпорації AMD вирішили назавжди покінчити з головним "рудиментом" архітектури x86 - сегментної моделлю пам'яті, яка підтримувалася ще з часів 8086. Однак через це при розробці нової версії свого продукту для віртуалізації програмісти компанії VMware зіткнулися з непереборними труднощами при реалізації віртуальної машини для 64-бітних гостьових систем. [1] Оскільки для відділення коду монітора від коду "гостя" програмою використовувався механізм сегментації, ця задача стала практично нерозв'язною.

Усвідомивши помилку, AMD повернула обмежений варіант сегментної організації пам'яті, починаючи з ревізії D архітектури AMD64, що дозволило запускати 64-бітові ОС у віртуальних машинах. Intel цього прикладу не послідувала, і на її процесорах, що не підтримують засоби апаратної віртуалізації [ які? ] , Запустити 64-бітну віртуальну машину не можна . Для перевірки того, чи можливий на процесорі запуск 64-бітних гостьових ОС, VMware надає разом зі своїми продуктами спеціальну утиліту.

Слід зазначити, що спочатку потрапили "під ніж" команди LAHF і SAHF, які також активно використовуються ПО віртуалізації, потім були повернуті в систему команд. З поширенням засобів апаратної віртуалізації (Intel VT, AMD-V) потреба в сегментації поступово відпаде.


Примітки

  1. http://www.pagetable.com/?p=25 "The AMD64 ... retired .. most of segmentation. But this broke VMware. While VMware could still virtualize 32 bit operating systems on AMD64 CPUs, they could not virtualize 64 bit operating systems, because they required segment limits. "