Langbahn Team – Weltmeisterschaft

x86-64

AMD Athlon 64 w podstawce Socket 939
AMD Athlon 64 w podstawce Socket 754

x86-64 (AMD64 lub x64) – 64-bitowa architektura procesorów firmy AMD, przeznaczona dla komputerów osobistych (procesory AMD Athlon 64, Athlon 64 FX, Athlon 64 X2, Phenom, oraz ostatnie wersje procesorów Sempron), komputerów przenośnych (Sempron, Turion 64, Turion 64 X2) oraz serwerów i wydajnych stacji obliczeniowych (AMD Opteron). Jest ona rozszerzeniem architektury x86 głównie o 64-bitowe rozkazy oraz rejestry. Umożliwia także bezpośrednie wykonywanie 16- i 32-bitowego kodu x86.

Opis architektury

Zestaw instrukcji x86-64 (nazwę zmieniono później na AMD64) jest rozszerzeniem zestawu instrukcji x86 głównie o rozkazy operujące na 64-bitowych operandach. Główną techniczną motywacją rozszerzenia tego najpopularniejszego w świecie procesorów zestawu instrukcji, było zapotrzebowanie ze strony użytkowników zaawansowanego oprogramowania operującego na dużych ilościach danych, na zwiększoną przestrzeń adresową – w klasycznej już architekturze x86 liniowa przestrzeń adresowa ma wielkość 232 bajtów = 4 GiB. Wraz z PAE procesory x86 mają 36-bitową szynę adresu, czyli mogą adresować 64 GiB pamięci, jednak oprogramowanie korzysta z pamięci powyżej 4 GiB prawie jak kiedyś z rozszerzeń EMS. Poniżej wymieniono najważniejsze zmiany wprowadzone przez AMD64:

  • Nowe rejestry procesora. Liczba rejestrów ogólnego przeznaczenia (General Purpose RegistersGPR) została zwiększona z 8 w architekturze x86 do 16, a maksymalna wielkość operandów – do 64 bitów. Dodatkowo, liczba 128-bitowych rejestrów SSE (używanych w instrukcjach SIMD) została zwiększona z 8 do 16. Powiększenie liczby widocznych dla użytkownika rejestrów pozwoliło na 5–15% zwiększenie wydajności.
  • Większa przestrzeń adresowa. Architektura AMD64 definiuje przestrzeń adresową ograniczoną do 48 bitów (w aktualnych implementacjach używa się 40 bitów, co przekłada się na możliwość zaadresowania do 1 TiB pamięci operacyjnej). Architektura x86 pozwala na zaadresowanie jedynie 4GiB, z czego dostępne dla użytkownika (i aplikacji) jest najczęściej 2 lub 3 GiB (podział ten zależny jest od systemu operacyjnego). Z uwagi na rozszerzenia wprowadzone w Pentium Pro możliwe jest zainstalowanie do 64 GiB RAM, jednak nie jest to pamięć liniowo równocześnie dostępna. W przyszłości, implementacje architektury AMD64 mogą używać pełnych 48 bitów, co pozwoli na bezpośredni dostęp do 256 TiB pamięci operacyjnej. Przy użyciu systemu operacyjnego korzystającego z architektury AMD64 możliwe jest zwiększenie dostępnej pamięci operacyjnej dla pojedynczego 32-bitowego procesu do 4 GiB, bez potrzeby rekompilacji i zmian w kodzie programu.
  • Adresowanie „RIP-relative”. Rozkazy AMD64 mogą odwoływać się do danych zawartych pod adresami określonymi względem wskaźnika programu (Instruction PointerIP). Zwiększa to efektywność kodu, który został zaprojektowany jako niezależny od miejsca wykonania (tj. miejsca umieszczenia w pamięci operacyjnej) – kod taki używany jest często przez biblioteki uruchomieniowe.
  • Rozkazy SSE. Architektura AMD64 zawiera zestawy instrukcji SIMD Intela pod nazwą SSE i SSE2. Nowsze implementacje AMD64 (od wersji E) zawierają również instrukcje SSE3. Wszystkie implementacje architektury AMD64 są kompatybilne jednocześnie z zestawami instrukcji MMX, x87 – a w przypadku procesorów AMD również 3DNow! i 3DNow! Enhanced.
  • NX-bit. Bit ten (NXNo Execute) jest odpowiedzialny za włączenie/wyłączenie zabezpieczenia obszaru pamięci operacyjnej przed traktowaniem go przez procesor jako zbioru instrukcji do wykonania (z reguły zarządzanie pamięcią operacyjną powierza się systemowi operacyjnemu). W architekturze AMD64 ochrona obszaru pamięci jest dostępna zarówno w trybie 32-bitowym, jak i 64-bitowym, i jest wspierana przez Linux, Solaris, Windows XP SP2, Windows Server 2003 SP1 oraz nowsze ich wersje. Wraz z systemem operacyjnym korzystającym z ochrony obszaru pamięci przed wykonywaniem, bit NX jest opisywany przez AMD jako rozszerzona ochrona antywirusowa (EVPEnhaced Virus Protection). Mimo że technologia ta uniemożliwia uruchamianie dużej części szkodliwego oprogramowania (korzystającego często z błędu przepełnienia bufora), nie rozwiązuje ona całkowicie problemu ochrony antywirusowej komputerów (podobnie jak żadna inna obecnie istniejąca technologia). Istotnym jest fakt, że funkcjonalność bitu NX była obecna od dawna w 32-bitowej architekturze x86 w trybie PAE (Physical Address Extension), wprowadzonym wraz z procesorem Pentium Pro Intela. Tryb PAE jest jednak od dawna traktowany jako relikt przeszłości przez większość producentów i twórców systemów operacyjnych (głównie ze względu na skomplikowane adresowanie i związaną z nim niską wydajność). AMD jako pierwszy producent wprowadziło tryb ochrony obszaru pamięci przed wykonywaniem w trybie adresowania liniowego. Wkrótce potem pozostali producenci procesorów x86 (w tym Intel) również wprowadzili tego typu rozwiązania do swoich produktów.

Tryby pracy

Tryb pracy Wymagany
system
operacyjny
Wymagana
rekompilacja
aplikacji
Domyślny
rozmiar
adresów
Domyślny
rozmiar
operandów
Rozszerzenia
rozkazów
Typowy
rozmiar GPR
Tryb
Long
Tryb 64-bit 64-bitowy tak 64 32 tak 64
Tryb zgodności (Compatibility) nie 32 nie 32
16 16 16
Tryb
Legacy
Tryb chroniony (Protected)
32-bitowy nie 32 32 nie 32
16 16 16
Tryb wirtualny 8086 (V86) 16 16* 16
Tryb rzeczywisty (Real) 16-bitowy

* W 16-bitowym kodzie programów napisanych dla procesorów Intel 80286 i starszych (zresztą tylko taki kod jest przez nie realizowany) nie ma możliwości stosowania rozkazów z 32-bitowymi operandami, bo po prostu one ich nie posiadają. Natomiast w 16-bitowym kodzie programów napisanych dla procesorów Intel 80386 i nowszych istnieje możliwość używania rozkazów z 32-bitowymi operandami, ale domyślnie (zwykle dla zapewnienia przenośności kodu) używane są operandy 16-bitowe.

Wyjaśnienia dot. trybów pracy

Architektura AMD64 przewiduje dwa główne tryby pracy:

Long
Tryb ten jest podstawowym trybem działania procesora w architekturze AMD64, jest kombinacją 64-bitowego trybu pracy i trybu zgodności wstecz (kompatybilności) pozwalającego na uruchamianie 16- i 32-bitowego kodu w trybie chronionym. Nie posiada on obsługi dla trybu rzeczywistego ani dla trybu wirtualnego 8086. W trybie long pracują 64-bitowe systemy operacyjne, wśród których można wymienić różne wersje/dystrybucje systemów Linux, BSD, Solaris 10 oraz Microsoft Windows od wersji XP Professional x64 Edition.
Jako że zbiór rozkazów AMD64 zawiera wszystkie rozkazy x86, wykonywanie kodu x86 w trybie long nie jest obciążone żadnym narzutem. Ponadto 32-bitowe aplikacje, rekompilowane z użyciem zestawu rozkazów AMD64, mogą zwiększyć swoją wydajność ze względu na zastosowanie przez kompilator optymalizacji wykorzystujących dodatkowe rozkazy i rejestry procesora dostępne tylko w trybie 64-bitowym. Aplikacje te mają również dostęp do większej przestrzeni adresowej, co w niektórych przypadkach również może zwiększyć wydajność przetwarzania.
W trybie long, 64-bitowy system operacyjny może uruchamiać równocześnie aplikacje 16-, 32- i 64-bitowe, lecz tylko przeznaczone dla trybu chronionego. W przypadku 64-bitowych systemów operacyjnych Microsoftu, takich jak Windows XP Professional x64 Edition i jego następcy, nie istnieje możliwość uruchamiania w tym trybie aplikacji 16-bitowych czy to w trybie rzeczywistym, czy chronionym, oraz 32-bitowych aplikacji DOS-owych (dotyczy standardu DOS Protected Mode Interface, w skrócie DPMI); najbardziej prawdopodobnymi przyczynami takiego stanu są:
  • brak sprzętowej obsługi aplikacji w trybie rzeczywistym i trybie wirtualnym 8086;
  • problemy ze stabilnością i bezpieczeństwem 16-bitowych aplikacji w trybie chronionym, co było widoczne szczególnie w przypadku systemów z rodziny Windows 9x i stało się jedną z przyczyn wygaszenia tej linii systemów operacyjnych;
  • trudności w ewentualnej implementacji warstwy zapewniającej kompatybilność z aplikacjami 16-bitowymi w podsystemie WoW64.
Legacy
Tryb ten jest używany przez 16-bitowe systemy operacyjne (takie jak MS-DOS), jak również systemy 32-bitowe (takie jak Windows XP). W trybie tym mogą być uruchamiane jedynie aplikacje 16- i 32-bitowe. Programy 64-bitowe (takie jak instalator Windows XP Professional x64 Edition i Windows Server 2003 x64 Edition uruchamiany w trybie graficznym) nie będą działały. Procesor po włączeniu zasilania jest uruchamiany w tym trybie (a dokładniej w trybie rzeczywistym 8086) i do trybu Long musi zostać przełączony przez uruchomiony program.

Analiza rynku

Wprowadzenie architektury AMD64 oznacza zerwanie przez AMD ze strategią podążania za standardami ustanawianymi przez firmę Intel. Jest jednak przykładem podobnej do intelowskiej strategii rozszerzania istniejącej architektury bez pozbywania się kompatybilności wstecz (Intel rozszerzył architekturę x86 do 32-bitów wraz z wprowadzeniem zgodnego wstecz procesora 80386). Architektura AMD64 rozszerza 32-bitową architekturę x86 (nazywaną później przez Intela IA-32) o 64-bitowe rejestry ogólnego przeznaczenia, zachowując 16- i 32-bitowe tryby działania procesora. Tryb 64-bitowy również posiada mechanizmy zapewniające w dużej mierze zgodność wstecz z istniejącym oprogramowaniem, ułatwiając przejście twórcom oprogramowania z tradycyjnej architektury x86 do AMD64.

Odpowiednikiem architektury AMD64 jest opracowana przez firmę Intel architektura EM64T. Mimo że są one ze sobą w dużej mierze kompatybilne, to przyrost wydajności w trybie 64-bitowym w przypadku procesorów firmy AMD jest znacznie większy w stosunku do procesorów produkowanych przez Intela. Wynika to głównie z bardzo krótkiego okresu, w jakim Intel musiał zaimplementować rozszerzenia architektury w procesorach z linii Pentium 4. Powszechnie sądzi się również, że było to przyczyną trudności technicznych z uzyskaniem przez Intela wysokich częstotliwości pracy tych procesorów (synteza układu została ze względu na pośpiech powierzona algorytmom automatycznej optymalizacji).

Niechęć Intela do projektowania rozszerzeń 64-bitowych dla architektury x86 spowodowana była bardzo dużymi inwestycjami w linię procesorów wykorzystujących koncepcję EPIC (patrz IA-64). Ze względu na obwarowanie architektury EPIC wieloma kluczowymi patentami, niezwykle trudne byłoby stworzenie konkurencyjnego, ale kompatybilnego procesora przez konkurentów Intela. Stąd też Intel starał się maksymalnie spowolnić rozwój procesorów x86, aby zapewnić dobre warunki nowo wprowadzanej architekturze. Strategia ta poniosła porażkę w latach 2000–2002, w których AMD często posiadało produkty bardziej wydajne niż Intel. Obawy Intela przed konkurencją powiększyło zaprezentowanie w roku 2003 procesorów SledgeHammer i ClawHammer (AMD K8). Architektura IA-64 mimo ogromnych nakładów na promocję i rozwój, wbrew przewidywaniom Intela, nie zaoferowała znacznie większej wydajności niż istniejące produkty RISC (np. seria IBM Power) czy szybko rozwijające się popularne implementacje architektury x86. Decydujące okazało się jednak wsparcie dla architektury AMD64 ze strony twórców oprogramowania (w tym ze strony Sun, Microsoft czy twórców Linuksa). Intel został więc zmuszony przez rynek do zaoferowania konkurencyjnych produktów zgodnych z AMD64.

Według wielu obserwatorów rynku, przed architekturą EPIC rysuje się niepewna przyszłość: jej współtwórca, firma HP wycofała z oferty stacje robocze oparte na IA-64, IBM wycofuje się w całości ze wspierania tej architektury – koncentrując się na rodzinie Power i procesorach zgodnych z AMD64. Wydaje się, że prawdopodobieństwo wprowadzenia IA-64 na rynek inny niż dużych komputerów korporacyjnych (mainframe), czy rynek klastrów obliczeniowych i komputerów równoległych (HPCHigh Performance Computing) maleje z każdym dniem. Wprowadzanie wielordzeniowych procesorów zgodnych z AMD64 przez AMD i Intela już w tej chwili prowadzi bowiem do zastępowania małych i średnich serwerów RISC przez maszyny zbudowane na bazie AMD64 (Sun Microsystems, HP, Tyan).

Implementacje architektury

Następujące procesory są implementacjami architektury AMD64:

Następujące procesory są implementacjami architektury EM64T, w przypadku której kompatybilność z AMD64 nie jest pełna:

Zobacz też

Linki zewnętrzne