AMD64
Från Rilpedia
AMD64 (även kallat x86-64, x64 eller EM64T) är en 64-bitars processorarkitektur skapad av AMD. Det är en utökning av x86, som den även är bakåtkompatibel med. AMD64:s instruktionsuppsättning används i AMDs processorer Athlon 64, Athlon 64 FX, Athlon 64 X2, Turion 64, Opteron, Phenom 64 X3 och Phenom 64 X4 (Phenom är tripple eller quad core).
Benämningen EM64T skapade Intel när även de lanserade processorer som använde arkitekturen. De är i praktiken helt kompatibla.
Innehåll |
Arkitekturöversikt
Instruktionsuppsättningen x86-64 (senare omdöpt till AMD64) är en direkt förlängning av x86-arkitekturen till ett 64-bitarssystem. Det motiveras av att 4 GB, som är den övre gränsen för vad en 32-bitars CPU direkt kan adressera (varav hälften kan utnyttjas för användarprocesser i många vanliga operativsystem), inte längre är tillräckligt för alla applikationer. De främsta nyheterna är:
- De generella registren breddas till 64 bitar vilket bland annat ger upp till 4 miljarder gånger så stor linjär adressrymd som med x86-32. I nuvarande implementationer kan AMD64 adressera 256 TB, i framtida upp till 2 EB (utökning av adressrymden via Intels PAE (Physical Address Extensions), är en metod som har avsevärda begränsningar jämfört med det större linjära adressutrymme som x86-64 ger). Bredare register kan även ge stora prestandahöjningar i vissa typer av program.
- Fler generella register, nu totalt 16, och fler XMM-register för SSE-SSE3, även de totalt 16. Fler register underlättar för kompilatorer att generera bra kod och kan i särskilda tillämpningar ge betydligt effektivare exekvering.
- Snabbare systemanrop. Eftersom segmentering inte används i 64-bitarsläge behöver segmentinformation inte sparas och återställas vid systemanrop, dessutom finns inte längre segmentskydd. Därför har AMD introducerat ett nytt interface för systemanrop, instruktionen SYSCALL. Det går att använda "mjukvaruavbrott" för systemanrop, även i 64-bitarsläge, men SYSCALL är snabbare. Intel har haft en funktion med liknande egenskaper sedan Pentium II, SYSENTER, vilket också används i exempelvis Windows XP.
- Fler SSE-instruktioner. AMD64 implementerar Intels instruktioner för SSE2, nyare modeller även SSE3. Även x87- och MMX-instruktioner är implementerade för full kompatibilitet.
- NX-biten. NX-biten är en processorfunktion som gör det möjligt för operativsystemet att förbjuda exekvering i vissa datorer, vilket ger förbättrad säkerhet. Funktionen finns i både 32- och 64-bitsläge och används av Linux, Solaris, Windows XP SP2, Windows Server 2003 SP1 och senare operativsystemsversioner.
Exekveringslägen
Exekveringsläge | Krav på OS | Applikationer måste kompileras om | Default Adresstorlek | Default Operandstorlek | Register Extensions | Typisk registerstorlek | |
---|---|---|---|---|---|---|---|
Long Mode | 64-bit Mode | 64-bitars OS | ja | 64 | 32 | ja | 64 |
Compatibility Mode |
nej | 32 | nej | 32 | |||
16 | 16 | 16 | |||||
Legacy Mode |
Protected Mode | 32-bitars OS | nej | 32 | 32 | nej | 32 |
16 | 16 | ||||||
Virtual 8086 mode | 16 | 16 | 16 | ||||
Real Mode | 16-bitars OS |
Förklaring av exekveringslägen
Den här arkitekturen har två huvudsakliga exekveringslägen:
- Long Mode
- Det huvudsakliga exekveringsläget för AMD64. Det kombinerar processorns eget 64-bitars läge och ett 32-bitars kompatibilitetsläge. Det tar också bort några sällan använda funktioner från 80386. Det används av 64-bitars operativsystem; bland de system stödjer Long Mode finns Linux, BSD-varianter, Solaris och Windows XP Professional x64 Edition.
- Eftersom den grundläggande instruktionsupsättningen är oförändrad kan x86-kod exekveras utan emulering eller prestandaförlust, till skillnad från på Intels IA-64. Däremot kan även 32-bitars applikationer tjäna på att kompileras om särskilt för AMD64, eftersom den har fler register, vilket gör att en kompilator kan optimera koden bättre.
- I Long Mode kan ett 64-bitars operativsystem köra 32-bitars och 64-bitars applikationer samtidigt. Dessutom har AMD64 stöd för att köra 16-bitars x86-kod. Trots det har Microsoft uttryckligen utelämnat 16-bitarssupport i Windows XP Professional x64 Edition på grund av problem med att köra 16-bitarskod i deras emulator WoW64, bland annat eftersom databredden för referenser i olika delar av fönsterhanteringen passerar de gränser som hade bibehållits för att upprätthålla kompatibiliteten med Win16.
- Legacy Mode
- I Legacy Mode kan 16- och 32-bitars operativsystem, som MS-DOS och Windows XP, köras. Här kan bara 16- och 32-bitars kod exekveras. 64-bitars program kan inte köras. Legacy Mode omfattar i sin tur alla typer av lägen som en traditionell x86-processor kan hantera.
Marknadsanalys
AMD64 representerar ett avsteg från AMD:s historia av att följa Intels standarder, men följer Intels tidigare sätt att utöka x86-arkitekturen från 16 (8086) till 32 (Intel 80386) bitar och vidare, utan att ta bort bakåtkompatibiliteten.
Det var länge en allmän uppfattning att 64-bitars RISC-processorer, exempelvis DEC Alpha, så småningom skulle komma att ersätta den ålderdomliga x86-arkitekturen, som är en avkomling till 8-bitarsprocessorer som 8085 och Z80. En av anledningarna till att detta inte skedde är de stora investeringar som genom åren gjorts i applikationer för x86-baserade system. Firmor som Intel, Cyrix, AMD och andra fann också snabbt olika sätt att applicera moderna konstruktionsprinciper, inspirerade av både RISC-principer och andra idéer, transparent, dvs utan att ändra den grundläggande programmeringsmodellen på assemblernivå. Stora företag som Intel kan också använda mycket avancerade implementationstekniker på den fysikaliska nivån och på så sätt höja prestanda oavsett arkitektur. Vidare är maskinkod för x86 ganska kompakt, mycket på grund av ursprunget i 8-bitarsprocessorer, något som är en stor fördel när det gäller att utnyttja begränsade cache-minnen effektivt.
En annan anledning är att de värsta prestandaproblemen med de ursprungliga 8088 och 8087 processorerna, som adressgenerering i mikrokod och ett långsamt buss-interface, förbättrades avsevärt redan med 80186 och 80286. Tre år senare, 1985, lanserades 80386 som utökande den begränsade linjära adressrymden och dessutom kunde dölja (den starkt kritiserade) segmenteringen helt och hållet. Därefter följde en rad konstruktioner med successivt allt mer parallellt arbetande exekveringsenheter (486, Pentium, P6, K7, etc). De kvarvarande prestandabegränsande egenheterna, som de stackade x87-registren, har också till stor del faktoriserats ut (med "register renaming" och andra tekniker) och på senare tid ersatts (av SSE2) utan att förlora bakåtkompatibilitet.
AMD64 utökar slutligen x86-arkitekturen till en fullständig 64-bitars miljö med fullständig bakåtkompatibilitet för äldre mjukvara. Medan 32-bitarsläget är helt bakåtkompatibilitet är även 64-bitarsläget till största delen bakåtkompatibelt, detta gör det enkelt att anpassa gamla kompilatorer och andra verktyg till 64-bitarsläge.
Implementationer
Följande processorer implementerar AMD64-arkitekturen:
- AMD K8
- AMD Athlon 64
- AMD Athlon 64 X2
- AMD Athlon 64 FX
- AMD Opteron
- AMD Turion 64
- AMD Sempron (bara 'Palermo'-modellerna använder "E6 stepping")
- AMD Phenom 64 X3
- AMD Phenom 64 X4
- AMD K10
- AMD Phenom2 64 X3
- AMD Phenom2 64 X4
- EM64T (Intels version)