x86-64

S Vikipedije, slobodne enciklopedije

x86-64 (takođe poznat i kao x64, x86 64 i amd64) je 64-bitna verzija skupa instrukcija x86. On podržava daleko veće količine virtuelne i fizičke memorije nego što je to moguće kod prethodnika, omogućavajući programima skladištenje veće količine podataka u memoriji. x86-64 takođe pruža 64-bitne registre opšte namene i brojne druge poboljšanja. Originalnu specifikaciju je napravio AMD, a sprovedena je od strane AMD-a, Intela, VIA, i drugih. Potpuno je kompatibilan sa 16-bitnim i 32-bitnim x86 kodom.[1] Pošto su potpuni 16-bitni i 32-bitni skupovi instrukcija ostali implementirani u hardveru bez ikakve emulacije, postojeći x86 programi rade bez problema u kompatibilnosti ili lošijih performansi[2], dok postojeće aplikacije koje koriste nove karakteristike dizajna procesora mogu postići poboljšanja performansi.

Pre izbacivanja, "x86-64" i "x86_64" su se odnosili na skup instrukcija. Posle izbacivanja, AMD je nazvan AMD64.[3] Intel initially used the names IA-32e and EM64T before finally settling on Intel 64 for their implementation. Some in the industry, including Apple,[4][5][6] Intel je u početku koristio imena IA-32E i EM64T pre konačnog rešenja da se koristi ime Intel 64 za njihovo sprovođenje. Neki u industriji, uključujući i Epl, koristiti x86-64 i x86_64, dok drugi, posebno San Majkrosistems (sada Orakl) i Majkrosoft, koriste x64 dok BSD porodica operativnih sistema i nekoliko Linuks distribucija koriste AMD64.

AMD K8 procesor je prvi implementirao arhitekturu, i ovo je bio prvi značajan dodatak x86 arhitekturi koju je dizajnirala neka kompanija osim Intela. Intel je bio prinuđen da sledi taj primer i uveo je modifikovanu NetBrst (engl. NetBurst) porodicu koja je bila potpuno softverski kompatibilana sa dizajnom i specifikacijama AMD-a. VIA Teknolodžis (engl. VIA Technologies) je predstavio x86-64 u svojoj VIA Isaja (engl. Isaiah) arhitekturi, sa VIA Nano.

x86-64 specifikacija se razlikuje od Intelove Itanium (ranije IA-64) arhitekture, čiji skup instrukcija nije kompatibilan sa x86 arhitekturom.

AMD64[uredi | uredi izvor]

AMD64 logo

Skup instrukcija iz AMD64 je implementiran u AMD-ovom Opteronu, Atlon64, Atlon 64 FX, Atlon64 X2, Atlon II, Atlon X2, Turion 64, Turion 64 X2, kasnije i Sempron, Fenom, Fenom II, FX, i Fjužn (engl. Fusion) procesorima.

Istorija AMD64[uredi | uredi izvor]

AMD64 je nastao kao alternativa radikalno drugačije IA-64 arhitekture, koja je dizajniran od strane kompanije Intel i HP. Prvobitno objavljena u 1999[7] sa punom specifikacijom u avgustu 2000,[8] AMD64 arhitektura je napravljena da se doda 64-bitno računarstvo na postojeću x86 arhitekturu, za razliku od Intelovog stvaranja potpuno nove 64-bitnu arhitekturu sa IA-64.

Prvi AMD64 procesor, Opteron, je izbačen u aprilu 2003.

Karakteristike arhitekture[uredi | uredi izvor]

AMD64 registri
63 ... 47 ... 31 ... 15 ... 07 ... 00 (pozicija bita)
Glavni registri (8/16/32/64 bita)
RAX EAX AX AL A registar
RBX EBX BX BL B registar
RCX ECX CX CL C registar
RDX EDX DX DL D registar
Indeksni registri (16/32/64 bita)
RSI ESI SI Source Index
RDI EDI DI Destination Index
Stek registri (16/32/64 bita)
RBP EBP BP Base Pointer
RSP ESP SP Stack Pointer
Dodatni registri (64 bita)
R8 registar 8
R9 registar 9
R10 registar 10
R11 registar 11
R12 registar 12
R13 registar 13
R14 registar 14
R15 registar 15
Pokazivač instrukcije (16/32/64 bita)
RIP EIP IP Instruction Pointer
Segmentni registri (16 bita)
CS Code Segment
DS Data Segment
ES Extra Segment
FS F Segment
GS G Segment
SS Stack Segment
XMM (SSE) registri (128 bita)
XMM0 (128 bita) registar 0
XMM1 (128 bita) registar 1
XMM2 (128 bita) registar 2
XMM3 (128 bita) registar 3
XMM4 (128 bita) registar 4
XMM5 (128 bita) registar 5
XMM6 (128 bita) registar 6
XMM7 (128 bita) registar 7
XMM8 (128 bita) registar 8
XMM9 (128 bita) registar 9
XMM10 (128 bita) registar 10
XMM11 (128 bita) registar 11
XMM12 (128 bita) registar 12
XMM13 (128 bita) registar 13
XMM14 (128 bita) registar 14
XMM15 (128 bita) registar 15
Statusni registar
17 16 15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 (pozicija bita)
V R 0 N IOPL O D I T S Z - A - P - C EFlags

Primarna karakteristika AMD64 je dostupnost 64-bitnih procesorskih registara, na primer rax, rbx i slično, 64-bitne aritmetičke i logičke operacije celim brojem, i 64-bitni virtuelne adrese. Dizajneri su iskoristili priliku da naprave i druga poboljšanja. Najznačajnije promene uključuju:

  • 64-bitni ceo broj: Svi registri opšte namene (GPR) su proširena sa 32 bita na 64 bita, i sve aritmetičke i logičke operacije, operacije memorija-registar i registar-memorija, itd, sada mogu da rade direktno na 64-bitnim celim brojevima.
  • Dodatni registri: Pored povećanja veličine registara opšte namene, broj imenovanih registara opšte namene je povećan sa osam (eax, ebx, ecx, edx, ebp, esp, esi, edi) u x86 na 16 (rax, rbx, rcx, rdx, rbp, rsp, rsi, rdi, r8, r9, r10, r11, r12, r13, r14, r15). Zbog toga je moguće držati više lokalnih promenljivih u registrima, a ne na steku, i da registri čuvaju često pristupljene konstante; argumenti za male i brze potprograme može takođe biti usvojen u registrima u većoj meri. AMD64 i dalje ima manje registre od mnogih zajedničkih RISC skupova instrukcija (koji obično imaju 32 registara) ili mašina sličnih VLIV-u, kao što su IA-64 (koji ima 128 registara). Međutim, implementacija AMD64 može imati daleko više internih registara od broja arhitektonskih registara izloženih po skupu instrukcija (vidi preimenovanje registara).
  • Dodatni XMM (SSE) registri: Slično, broj 128-bitnih XMM registara (koristi se za striming SIMD instrukcija) je takođe povećan sa 8 na 16.
  • Veći prostor za virtuelno adresiranje: AMD64 arhitektura definiše 64-bitni virtuelni adresni format, od kojih se 48 bita koriste u trenutnim implementacijama. Ovo omogućava do 256 terabajta (248 bajtova) virtuelnog adresnog prostora. Definicija arhitekture omogućava da ova granica bude podignuta u budućim implementacijama do punih 64 bita, proširujući virtuelni adresni prostor do 16 eksabajta (264 bajtova). To je mnogo u odnosu na samo 4 gigabajta (232 bajta) za x86.

To znači da se nad veoma velikim datotekama može biti operisan preko mapiranja celog fajla u adresni prostor procesa (što je često mnogo brže nego rad pozivima čitanja i pisanja), umesto mapiranja regiona datoteke u i van adresnog prostora.

  • Veći fizički adresni prostor: originalna implementacija AMD64 arhitekture implementira 40-bitne fizičke adrese i tako mogao da adresira do 1 TB (240 bajta) RAM memorije. Trenutne implementacije AMD64 arhitekture (počevši od AMD 10h mikroarhitekture) proširuju ga na 48-bitne fizičke adrese i zbog toga može da adresira i do 256 TB RAM-a. Arhitektura dozvoljava produženje do 52 bita u budućnosti (ograničen zbog page table entry formata); ovo bi omogućilo adresiranje do 4 petabajta RAM-a. Za poređenje, 32-bitni x86 procesori su ograničeni na 64 GB RAM memorije u Physical Address Extension režimu, ili 4 GB RAM-a bez PAE režima.
  • Veći fizički adresni prostor u legasi (engl. legacy) režimu: Kada radi u režimu legasi AMD64 arhitektura podržava PAE režim, kao i većina najnovijih x86 procesora, ali AMD64 proteže PAE od 36 bita do arhitektonskog limita od 52 bita fizičkoe adrese. Bilo kakva implementacija stoga dozvoljava istu granicu fizičke adrese u dugom režimu.
  • SSE instrukcije: Originalna AMD64 arhitektura je usvojila Intelov SSE i SSE2 i kao osnovne instrukcije. SSE3 instrukcije su dodate u aprilu 2005. SSE2 je alternativa IEEE 80-bitnoj preciznosti x86 skupa instrukcija sa izborom od IEEE 32-bitnog ili 64-bitnog računanja sa pokretnim zarezom. Ovo obezbeđuje operacijama sa pokretnim zarezom da budu kompatibilne sa mnogim drugim savremenim procesorima. SSE i SSE2 instrukcije su takođe proširene da rade na osam novih XMM registara. SSE i SSE2 su dostupni u 32-bitnom režimu u modernim x86 procesorima; Međutim, ako se oni koriste za 32-bitne programe, ti programi će raditi samo na sistemima sa procesorima koji imaju ovu funkciju. Ovo nije problem u 64-bitnim programima, jer svi AMD64 procesori imaju SSE i SSE2 i, pa koristeći SSE i SSE2 instrukcije i umesto x86 instrukcija ne smanjuje skup mašina na kojima se x86-64 programi mogu pokrenuti. SSE i SSE2 su generalno brži i dupliraju većinu karakteristika tradicionalneih x86 instrukcija, MMX, i 3DNow!.
  • No-Execute bit: "NX" bit (63. u page table) omogućava operativnom sistemu da odredi koje stranice virtuelne adrese mogu sadržati izvršni kod a koje ne mogu. Pokušaj da se izvrši kod sa stranice označene sa " no execute" će rezultovati u prestupu pri pristupanju memoriji, sličano pokušaj da se piše preko " read-only" strane. Ovo bi trebalo da oteža zlonamernom kodu da preuzme kontrolu nad sistemom preko " buffer overrun" ili "unchecked buffer" napada. Slična funkcija je dostupna na x86 procesorima od 80286 kao atributom segmentnih deskriptora, međutim ovo radi samo na celom segmentu istovremeno.

Segmentirano adresiranje je dugo smatrano zastarelim načinom rada, a svi aktuelne PC (PC) operativni sistemi na snazi zaobilaze ga, postavljajući sve segmente na baznu adresu nule i (u 32-bitnoj implementaciji) veličine 4 GB. AMD je prvi prodavac porodice x86 koji je sproveo "no-execute" u linearnom modu adresiranja. Funkcija je takođe dostupna u legasi režimu na AMD64 procesorima, a odnedavno i na Intel x86 procesorima, kada se koristi PAE.

  • Uklanjanje starijih karakteristika: nekoliko karakteristika "sistemskog programiranja" x86 arhitekture se ne koriste u modernim operativnim sistemima i nisu dostupni na AMD64 u dugom (64-bitnom i kompatibilnom) režimu. Ovo uključuje segmentirano adresiranje (iako segmenti FS i GS segmenti ostaju u zakržljaloj formi za upotrebu kao dodatnih baznih pokazivača OS strukturama), koji je mehanizam za promenu stanja zadatka, i virtuelni 8086 mod. Ove osobine ostaju u potpunosti implementirane u "legasi režimu", što dozvoljava ovim procesorima pokretanje 32-bitnih i 16-bitnih operativnih sistema bez modifikacija. Neke instrukcije za koje se pokazalo da su retko korišćene nisu podržane u 64-bitnom režimu: čuvanje/vraćanje segmenta registara na stek, čuvanje/vraćanje svih registara, decimalna aritmetika, BOUND i INTO instrukcije, " far " skokove i poziva sa neposrednim operanadima.

Detalji virtuelnog adresnog prostora[uredi | uredi izvor]

Kanonska forma adresiranja[uredi | uredi izvor]

Iako su virtuelne adrese širine 64 bita u 64-bitnom režimu, aktuelne implementacije (i svi čipovi za koje se zna da su u fazi planiranja) ne dozvoljavaju da se ceo virtuelni adresni prostor od 264 bajtova (16 EB) koristi. Većini operativnih sistema i aplikacija neće trebati toliki adresni prostor za doglednu budućnost (na primer, Windows implementacija za AMD64 su koristi samo 16 TB, ili 44 bita), pa sprovođenje takve široke virtuelne adrese će jednostavno povećati složenost i Troškovi bez stvarne koristi. AMD je stoga odlučio da, u prvim implementacijama arhitekture, samo najmanje značajnih 48 bita virtuelne adrese bi prevodilac adresa zapravo koristio. Dalje, od bita 48 do 63 svi moraju biti kopija bita 47, ili procesor će podići izuzetak. Adrese koje ispunjavaju ovo pravilo se nazivaju "kanonske forme." Adrese kanonske forma idu od 0 do 00007FFF'FFFFFFFF i od FFFF8000'00000000 do FFFFFFFF'FFFFFFFF, za ukupno 256TB upotrebljivog virtuelnog adresnog prostora.

Ovo omogućava važnu funkciju za kasniju skalabilnost na pravo 64-bitno adresiranje: mnogim operativnim sistemima (uključujući Windows NT porodicu) uzima višu polovinu prostora adresa (nazvan kernel prostor) za sebe i ostavlja donju polovinu (korisnički prostor) za aplikacioni kod, korisničke stekove, hipove i druge regione podataka. Dizajn "kanonske adrese" obezbeđuje da svaka kompatibilna implementacija AMD64 ima dve memorijske polovine: donja polovina počinje na adresi 00000000'00000000 i "raste nagore" kako više virtuelnih adresa postanu dostupni, dok je viša polovina "usidrena" na vrh adrese prostora i raste nadole. Takođe, fiksiranje sadržaja neiskorišćene bit-nih adresa sprečava njihovu upotrebu od strane operativnog sistema kao flag, privilege markers, itd, zato što bi takva upotreba mogla da postane problematična kada je arhitektura proširena da sprovodi više bitova virtuelnih adresa.

Trenutna 48-bitna implementacija

56-bitna implementacija

Puna 64-bitna implementacija

Page table struktura[uredi | uredi izvor]

Dugi režim 64-bitnog adresiranja ("long mode") je nadskup Physical Address Extensions (PAE), zbog toga, veličina stranica može biti 4 KB (212 bajtova) ili 2 MB (221 bajt). Dugi režim takođe podržava stranice veličine 1 GB (230 bajtova). Umesto page table sistema na tri nivoa kojeg koriste sistemi u PAE režimu, sistemi koji rade u dugom modu koristi četiri nivoa page table: PAE-ov Page-Directory Pointer Table produžen je od 4 unosa do 512, a dodatna Page-Map Level 4 (PML4) tabela se dodaje, koja sadrži 512 stavki u 48-bitnim implementacijama. U implementacijama koje pružaju veće virtualne adrese, potonja tabela bi rasla ili da zadovolji dovoljne unose da opiše ceo rang adresa, do teorijskog maksimuma od 33.554.432 unosa za 64-bitnu implementaciju, ili će biti prerankirani novim nivoom za mapiranje kao što je PML5. Puna hijerarhija mapiranja stranica od 4 MB za celi 48-bitni prostor bi zauzeo više od 512 MB RAM-a (oko 0,196% od 256 TB celog virtuelnog prostora)

Granice operativnih sistema[uredi | uredi izvor]

Operativni sistem takođe može ograničiti virtualni prostor za adresiranje. Detalji su dati u odeljku „Kompatibilnost sa operativnim sistemima i karakteristike“.

Detalji fizičkog adresnog prostora[uredi | uredi izvor]

Trenutne AMD64 implementacije podržavaju fizički adresni prostor do 248 bajtova RAM-a ili 256 TB. Veća količina instaliranog RAM-a omogućava operativnom sistemu da drži više "pageable" podataka i koda u RAM-u, što može poboljšati performanse, mada će različita opterećenja imati različite tačke umanjujućih povratka.

Gornja granica memorije koja se može koristiti u datom x86-64 sistemu zavisi od raznih faktora i mogu biti daleko manje nego maksimum procesora. Na primer, od juna 2010, nema poznatih matičnih ploča za x86-64 procesorom koji podržavaju 256 TB RAM memorije. Operativni sistem može da postavi dodatna ograničenja na količinu RAM koji je upotrebljiv ili podržan. Detalji o ovome su dati u odeljku tački su date u " Kompatibilnost sa operativnim sistemima i karakteristike ".

Režimi rada[uredi | uredi izvor]

Režim rada Radni podrežim Operativni sistem Tip koda Podrazumevana veličina adrese Podrazumevana veličina operanada Tipično podržane veličine operanada Register file veličina Tipična GPR širina
Dugi režim 64-bitni režim 64-bitni operativni sistem 64-bitni kod 64 bita 32 bita 8, 16, 32, ili 64 bita 16 registra po fajlu 64 bita
Režim kompatibilnosti 64-bitni operativni sistem 32-bitni kod u zaštićenom režimu 32 bita 32 bita 8, 16, ili 32 bita 8 registra po fajlu 32 bita
64-bitni operativni sistem 16-bitni kod u zaštićenom režimu 16 bita 16 bita 8, 16, ili 32 bita 8 registra po fajlu 32 bita
Legasi režim Zaštićeni režim 32-bitni operativni sistem 32-bitni kod u zaštićenom režimu 32 bita 32 bita 8, 16, ili 32 bita 8 registra po fajlu 32 bita
16-bitni ili 32-bitni operativni sistem 16-bitni kod u zaštićenom režimu 16 bita 16 bita 8, 16, or 32 bita 8 registra po fajlu 16 ili 32 bita
Virtuelni 8086 režim 16-bitni ili 32-bitni operativni sistem 16-bitni kod u realnom režimu 16 bita 16 bita 8, 16, ili 32 bita 8 registra po fajlu 16 ili 32 bita
Realni režim 16-bitni ili 32-bit operativni sistem 16-bitni kod u realnom režimu 16 bita 16 bita 8, 16, ili 32 bita 8 registra po fajlu 16 ili 32 bita

Tradicionalni x87 FPU registarski stek nije uključen u ekstenziji registara veličine fajlova u 64-bitnom režimu.

State diagram of x86-64 operating modes

Dugi režim[uredi | uredi izvor]

Ovo je primarni način rada arhitekture. To je kombinacija procesorovog "nejtiv" (engl. native) 64-bitnog režima i kombinovanog 32 i 16-bitnog režima. Koriste ga 64-bitni OS-i. Pod 64-bitnim operativnim sistemom, 64-bitni programi rade u 64-bitnom režimu, a 32-bitni i 16-bitni zaštićeni režim aplikacije (koje ne moraju da koristite stvarni ili virtuelni 8086 režim kako bi se izvršio bilo kad) radi u režimu kompatibilnosti. Real-mode programi i programi koji koriste virtuelni 8086 režim u bilo kom trenutku ne može da se pokrenu u dugom modu, osim ako nije u pitanju emuliranje softvera.

Pošto je osnovni skup instrukcija isti, skoro da ne postoji umanjenje performansi u zaštićenom režimu x86 koda. Ovo je drugačije od Intelovog IA-64, gde razlike u osnovnom skupu instrukcija znači da rad 32-bitnog koda se mora uraditi ili emulacijom x86 (što čini proces sporijim) ili sa namenskom x 86 procesorom. Međutim, na platformi x86-64, mnoge aplikacije mogu da imaju koristi od 64-bitnog rekompajliranja, zbog dodatnih registara u 64-bitnom kodu i garantovane SSE2 FPU podrške, koju mogu da koriste kompajler za optimizaciju. Međutim, aplikacijama koje redovno rukuju celim brojevima širim od 32 bita, kao što su kriptografski algoritmi, biće potrebno prerađivanje koda kako bi iskoristile prednosti 64-bitnih registara.

Legasi režim[uredi | uredi izvor]

Režim koristi 16-bita ("zaštićeni mod" ili "pravi mod") i 32-bitne operativne sisteme. U ovom režimu, procesor se ponaša kao 32-bitni x86 procesor, a samo 16-bitni i 32-bitni kod može biti izvršen. Legasi režim omogućava maksimalno 32-bitno virtuelno adresiranje koji ograničava virtuelni adresni prostor na 4 GB. 64-bitni programi se ne mogu pokrenuti iz ovog režima.

AMD64 implementacije[uredi | uredi izvor]

Sledeći procesori implementiraju AMD64 arhitekturu:

  • Opteron
  • Athlon 64
  • Athlon 64 X2
  • Athlon 64 FX
  • Athlon II (praćen "X2", "X3", or "X4" koji označavaju broj jezgara, i XLT modeli)
  • Turion 64
  • Turion 64 X2
  • Sempron ("Palermo" E6 i svi "Manila" modeli)
  • Phenom (praćen "X3" or "X4" koji označavaju broj jezgara)
  • Phenom II (praćen "X2", "X3", "X4" or "X6 koji označavaju broj jezgara)
  • FX
  • Fusion

Intel 64[uredi | uredi izvor]

Intel 64 je Intelova implementacija x86-64. Korišćen je u novijim verzijama Pentijuma 4, Celeron D, Kseon i Pentijum Dual Kor (engl. Pentium Dual-Core) procesora, Atom 230, 330, D410, D425, D510, D525, N450, N455, N470, N475, N550, N570, N2600 i N2800 i sve verzije Pentium Ikstrim Edišn (engl. Pentium Extreme Edition), Kor 2 (engl. Core 2), Kor i7, Kor i5, Kor i3 procesora.

Istorija Intela 64[uredi | uredi izvor]

Kroz istoriju, AMD je razvijao i pravio procesore po Intelovom dizajnu, ali sa pojavom x86-64 uloge su zamenjene. Intel se našao u situaciji gde je prihvatio arhitekturu koju je AMD napravio kao ekstenziju Intelove x86 procesorske linije. Intelov projekat je originalno nazvan Jamhil (engl. Yamhill). Nakon godina negiranja postojanja radova na ovom projektu, Intel je objavio da on zapravo postoji. Kreg Beret, PUO Intela u to vreme, je priznao da je ovo jedna od najlošije čuvanih tajni.

Intelov naziv za ovaj skup instrukcija je promenio nekoliko puta. Krajem 2006 Intel je počeo koristiti ime Intel 64 za njegovo sprovođenje, kao što AMD koristi AMD64.

Implementacije Intela 64[uredi | uredi izvor]

Prvi procesor koji je implementirao Intel 64 je bio Kseon sa kodnim imenom Nokona (engl. Nocona), juna 2004. Nasuprot tome, početni Preskot čipovi (februara 2004) nisu omogućili ovu funkciju. Intel je kasnije počeo sa prodajom Pentijum 4, sa ovom funkcijom omogućenom. E0 revizija dodaje eXecute Disable (ED), i bio je uključen u tadašnje Kseon procesore sa kodnim imenom Irvindejl (engl. Irwindale). Sve 9xx, 8xx, 6xx, 5x9, 5x6, 5x1, 3x6, i 3x1 serije procesora imaju Intel 64, kao i Kor 2 CPJ kao što će i budući procesori imati. Intel 64 je prisutan i u poslednjim verzijama Celeron D linije.

Prvi Intel mobilni procesor sa Intel 64 je Merom verzija Kor 2 procesora, koja je izbačena 27. jula 2006. Nijedan od Intelovih prthodnih CPJ nije implementirao Intel 64.

Sledeći procesori imaju Intel 64 arhitekturu:

  • NetBurst mikroarhitektura
    • Xeon (svi modeli posle "Nocona")
    • Celeron (neki modeli posle "Prescott")
    • Pentium 4 (neki modeli posle "Prescott")
    • Pentium D
    • Pentium Extreme Edition
  • Core mikroarhitektura
    • Xeon (svi modeli od "Woodcrest")
    • Core 2 (uključujući mobilne procesore od "Merom")
    • Pentium Dual-Core (E2140, E2160, E2180, E2200, E2220, E5200, E5300, E5400, E6300, E6500, T2310, T2330, T2370, T2390, T3200 i T3400)
    • Celeron (Celeron 4x0; Celeron M 5xx; E3200, E3300, E3400)
  • Atom mikroarhitektura
    • 200 series
    • 300 series
    • N4xx, N5xx series
    • Dxxx series
  • Nehalem, Sandy Bridge, Ivy Bridge and Haswell mikroarhitektura
    • Core i3
    • Core i5
    • Core i7

VIA-ina implementacija[uredi | uredi izvor]

VIA Nano, ranija znana kao VIA Isaja (VIA Isaiah) je 64-bitni procesor za lične računare. VIA Nano je izbačena od kompanije VIA Teknolodžis (engl. VIA Technologies) 2008. nakon 5 godina razvoja. Ova nova arhitektura je započeta ispočetka, i objavljena je 24. januara 2008. Procesor podržava nekoliko specifičnih ekstenzija za popravljanje efikasnosti u primenama sa slabom snagom. Očekuje se da će VIA Isaja biti duplo brža u računanju sa celim brojevima i 4 puta brža u računanju sa pokretnim zarezom od VIA Ester pri ekvivalentom taktu. Potrošnja energije je slična kao prethodne generacije BIA CPJ, sa snagom od 5 W do 25 W. Isaja je napravljena da podrži funkcije kao što je x86-64 skup instrukcija i x86 virtuelisanje, koji nisu bili dostupni u pređašnjim verzijama, VIA C7 liniji.

Razlike između AMD 64 i Intel 64[uredi | uredi izvor]

Iako skoro identični, postoje neke razlike između odva dva skupa instrukcija u semantici nekoliko retko korišćenih mašinskih instrukcija (i/ili situacija), koji se uglavnom koriste za sistemsko programiranje. Kompajleri uglavnom prave mašinski kod, koji izbegava bilo kakve različitosti, bar za obične aplikacione programe. Ovo je stoga interesantno uglavnom programerima kompajlera, operativnih sistema, i slično, koji moraju da se bave individualnim i specijalnim sistemskim instrukcijama.

Skorašnje implementacije[uredi | uredi izvor]

  • BSF i BSR instrukcije kod Intel 64 se ponašaju drugačije kada je izvor nula i kada je operand 32 bita. Procesor postavlja nulti flag i ostavlja gornja 32 bita destinacije nedefinisane.
  • AMD 64 zahteva drugačiji format za ažuriranje mikrokoda i kontrole MSR-a (model-specific registers) dok Intel 64 implementira ažuriranje mikrokoda isto kao kod svojih 32-bitnih procesora.
  • Intel 64 nema neke MSR-ove koji se smatraju bitnim kod AMD 64. To su SYSCFG, TOP_MEM, i TOP_MEM2.
  • Intel 64 dozvoljava SYSCALL i SYSRET samo u 64-bitnom režimu (ne i u režimu kompatibilnosti). Dozvoljava SYSENTER i SYSEXIT u oba režima.
  • AMD 64 nema SYSENTER i SYSEXIT u oba podrežima dugog režima.
  • Bliske grane sa 66H prefiksom se ponašaju drugačije. Intel 64 čisiti samo gornjih 32 bita, dok AMD 64 čisti gornjih 48 bitova.
  • Intel 64 nema mogućnost da sačuva i povrati smanjenu i bržu verziju stanja pomeranog zareza (uključujući FXSAVE i FXRSTOR instrukcije)
  • Skorašnji AMD 64 procesori imaju ponovo uvedenu ograničenu podršku za segmentisanje kako bi olakšali virtuelisanje 64-bitnih gestova.

Starije implementacije[uredi | uredi izvor]

  • Rani AMD64 procesori nisu imali CMPXCHG16B instrukciju, koja je ekstenzija CMPXCHG8B instrukcije prisutna na većini post-80486 procesora. Slično kao CMPXCHG8B, CMPXCHG16B omogućava atomske operacije na oktalnim rečima. Ovo je korisno za paralelne algoritme koji koriste "compare and swap" na podacima većim od pokazivača, što je često u "lock-free" and "wait-free" algoritmima. Bez CMPXCHG16B se moraju koristiti zaobilaznice, kao što su kritična sekcija ili alternativni "lock-free" pristupi. Ovo takođe sprečava da 64-bitni Windows ima adresni prostor za korisnički režim veći od 8 TB. 64-bitna verzija Windowsa 8.1 zahteva ovu funkciju.
  • Rani AMD 64 i Intel 64 procesori nisu imali LAHF i SAHF instrukcije. AMD je uveo instrukcije sa njihovim Atlon64, Opteron i Turion 64 procesori revizije D u martu 2005 dok je Intel uveo instrukcije sa Pentijumom 4 G1 u decembru 2005. 64-bitna verzija Windowsa 8.1 zahteva ovu funkciju.
  • Rani Intel 64 procesori nisu imali NX bit od AMD64 arhitekture. Ovu funkciju zahteva svaka verzija Windowsa 8.
  • Rane Intel 64 implementacije su dozvoljavale samo 64 GB fizičke memorije dok su originalne AMD64 implementacije dozvoljavale pristu 1 TB fizičke memorije. Skorašnje AMD64 i Intel 64 implementacije obezbeđuju 256 TB fizičkog adresnog prostora (i AMD planira ekpanziju do 4 petabajta). Kapacitet fizičke memorije ove veličine je prikladan za velike aplikacije (kao što su velike baze podataka), i račuarsktvo visokih performansi (centralno orijentisane aplikacije i naučničko računarstvo).

Kompatibilnost sa operativnim sistemima i karakteristike[uredi | uredi izvor]

Sledeći operativni sistemi podržavaju x86-64 arhitekturu u dugom režimu.

BSD[uredi | uredi izvor]

DregonFlaj BSD[uredi | uredi izvor]

Preliminarni infrastrukturni rad je započeo u februaru 2004. za x86-64 port. Ovaj razvoj je kasnije zastao. Razvoj je počeo ponovo tokom jula 2007 i nastavio tokom Guglovog leta koda 2008. i SOC 2009. Prva oficijelna verzija koja je podržavala x86-64 je bila 2.4.

Fri BSD[uredi | uredi izvor]

Fri BSD (FreeBSD) je dodao podršku pod imenom amd64 kao ekperimentalna arhitektura u 5.1 verziji u junu 2003. Bio je sadržan u standardnoj distribuciji od 5.2 januara 2004. Verzija 6.0 je sredila neke probleme sa radom x86 na amd64, i većina drajvera radi normalno, kao na x86 arhitekturi.

Net BSD[uredi | uredi izvor]

Ovde je arhitektura x86-64 prvi put dobila podršku 19. juna 2001. Od Net BSD-a 2.0, amd64 je u potpunoj integraciji sa ovim sistemom. 32-bitni kod je podržan u 64-bitnom režimu, sa netbsd-32 kernel slojem za kompatibilnost za 32-bitne sistemske pozive. NX bit je korišćen za obezbeđivanje neizvršivog steka i hipa sa granulacijom po strani (segmentirano granuliranje se koristi na 32-bitnoj x86)

DOS[uredi | uredi izvor]

Moguće je ući u dugi režim u DOS-u bez DOS ekstendera, ali se korinik mora vratiti na realan režim da bi pozvao BIOS ili DOS prekide.

Dakođe je moguće ući u dugi režim, sa DOS ekstenderom sličnim DOS/4GW, ali kompleksniji jer x86-64 nema virtuelni 8086 režim. DOS to ne zna, i ne treba očekivati prednosti, osim ako DOS radi u emulaciji sa adekvatnim drajverom za virtuelisanje, na primer interfejs za masovno skladištenje.

Linuks[uredi | uredi izvor]

Linuks je bio prvi OS koji je pokrenuo x86-64 u dugom režimu, počev od verzije 2.4 2001. Linuk takođe obezbeđuje kompatibilnost za pokretanje 32-bitnih programa. Ovo omogućava da se programi rekompajliraju u dugom režim zadržavajući korišćenje 32-bitnih programa. Nekoliko Linuks distribucija se trenutno isporučuje sa x86-64-native kernel-ima. Neki, kao što su Ark Linuks, SUSE, Mandriva, i Debian GNU/Linuks, omogućavaju korisnicima da instaliraju skup 32-bitnih komponenti i biblioteka prilikom instaliranja sa 64-bitnog DVD-a, što omogućava da većina postojećih 32-bitnih aplikacije radi. Druge distribucije, kao što su Fedora, Slekver i Ubuntu, dostupni su u jednoj verziji kompajliranu za 32-bitnu arhitekturu i drugu kompajliranu za 64-bitnu arhitekturu. Fedora i Red Het Enterprajs Linuks dozvoljava istovremenu ugradnju svih userland komponenti u 32 i 64-bitne verzije na 64-bitnom sistemu.

x32 ABI (Application Binary Interface), uveden u Linuk 3.4, omogućava programima kompajliranim za x32 ABI da radi u 64-bitnom režimu x86-64, dok koristi samo 32-bitne pokazivače i polja podataka. Iako ovo ograničava program na virtuelni adresni prostor od 4 GB takođe se smanjuje memorijski otisak programa i u nekim slučajevima može dozvoliti da radi brže.

64-bitni Linuks dozvoljava do 128 TB virtuelne adrese za pojedinačne procese, i može da adresira oko 64 TB fizičke memorije, pod uslovom da nema procesorskih i ograničenja sistema.

OS H[uredi | uredi izvor]

Mak OS H v10.4.7 i dalje verzije v10.4 pokreću 64-bitne komandne alatke koristeći POSIX i matematičke biblioteke na 64-bitnim Intel mašinama, kao što sve verzija 10.4 i 10.5 rade na 64-bitnim PowerPC mašinama. Mak OS H podržava 64-bitne GUI aplikacje koristeći Kokoa, Kvarc, OPENGL, i X11 na 64-bitnim Intel mašinama, kao i na 64-biotnim PowerPC mašinama. Sve biblioteke koje nisu za GUI takođe podržavaju 64-bitne aplikcije na tim platformama. Kernel, i sve ektenzije su samo 32-bitne.

Mak OS H 10.6 je prva verzija koja podržava 64-bitni kernel. Međutim, ne mogu svi 64-bitni računari pokrenuti 64-bitni kernel. 64-bitni kernel, kao 32-bitni kernel, podržava 32-bitne aplikacije, oba jezgra takođe podržavaju 64-bitne aplikacije. 32-bitne aplikacije imaju ograničeni virtuelni adresni prostor na 4 GB ispod oba jezgra. OS H 10.8 obuhvata samo 64-bitni kernel, ali nastavlja da podržava 32-bitne aplikacije.

OS H koristi univerzalni binarni format za paketiranje 32 i 64-bitne verzije aplikacije i bibliotekarskog koda u jednoj datoteci, najprikladnija verzija se automatski bira u vreme učitavanja. U Mek OS H 10.6, univerzalni binarni format se takođe koristi za kernel i za one ekstenzije kernela koji podržavaju 32-bitne i 64-bitne kernele.

Solaris[uredi | uredi izvor]

Za Solaris 10, baš kao i sa SPARC arhitekturu, postoji samo jedan slika operativnog sistema, koja sadrži 32-bitni i 64-bitni kernel, i označeno je kao "x64/x86" DVD-ROM slika. Podrazumevano ponašanje je da se pokrene 64-bitni kernel, omogućavajući da se i 64-bitni i postojeći ili novi 32-bitni programi biti pokrenuti. 32-bitni kernel se može ručno izabrati, u kom slučaju će samo 32-bitni programi raditi. Komanda isainfo može da se koristi za utvrđivanje da li sistem radi pod 64-bitnom kernelu.

Za Solaris 11, samo 64-bitni kernel je obezbeđen. Međutim, 64-bitni kernel podržava i 32 i 64-bitne programe, biblioteke, i sistemske pozive.

Windows[uredi | uredi izvor]

x64 klijent i server izdanja sistema Microsoft Windows, Windows XP Professional i Windows Server 2003 x64 Edition su pušteni marta 2005. Interno oni su zapravo isti build (5.2.3790.1830 SP1), jer dele istu izvornu bazu i operativnog sistema, pa čak i ažuriranja sistema su puštena u objedinjene pakete, kao Windows 2000 Profešnal i Server izdanja za x86. Windows Vista, koji takođe ima mnogo različitih izdanja, objavljena je u januaru 2007. Windows 7 je pušten u julu 2009. Windows Server 2008 R2 i novije verzije će biti dostupane samo kao x64 verzije. Windows za x64 ima sledeće karakteristike:

  • 8 TB of "user mode" virtual address space per process. 8 TB "Korisnički" virtuelni adresni prostor po procesu. x64 može da koristi sve ovo, pod uslovom da je povezan "large address aware" opcijom.

Ovo je uvećanje od 4096 za difoltna 2 GB virtuelnog adresnog prostora korisničkog režima koje nudi 32-bitni Windows.

  • 8 TB mod kernela virtuelnog adresnog prostora za operativni sistem. Kao i kod adresnog prostora korisničkog režima, to je povećanje 4096 preko 32-bitne verzije Windowsa. Veći prostor prvenstveno koristi keš memoriju fajl-sistema i kernel režim "hipa" (engl. heaps) (nonpaged pool and paged pool). Windows koristi samo 16 TB od 256 TB implementirano od procesora jer rani AMD64 procesori nisu imali CMPXCHG16B instrukciju.
  • Sposobnost da pokrenu postojeće 32-bitne aplikacije (.exe) i Dinamic Link biblioteke dynamic link libraries (.dlls) koristeći WoW64. Osim toga, 32-bitni program može, ako je povezan sa "large address aware" opcijom, da koristite do 4 GB virtuelnog adresnog prostora u 64-bitnom Windows-u, umesto podrazumevane 2 GB (opcionalno 3 GB sa / 3 GB boot opcijom i "large address aware" opcijom) koju nudi 32-bitni Windows.

Za razliku od upotrebe boot opcije / 3 GB na k86, ovo ne umanjuje kernel-režim-virtuelnog adresnog prostora na raspolaganju operativnom sistemu. 32-bitne aplikacije stoga mogu imati koristi odpokretanje na x64 Windowsu, čak i ako nisu rekompajlirane za x86-64.

  • I 32 i 64-bitne aplikacije, ako nisu povezane sa "large address aware", ograničene su na 2 GB virtuelnog adresnog prostora. Sposobnost da se koriste do 128 GB (Windows XP / Vista), 192 GB (Windows 7), 512 GB (Windows 8), 1 TB (Windows Server 2003), 2 TB (Windows Server 2008) ili 4 TB (Windows Server 2012) od fizičke memorije (RAM-a).
  • LLP64 model podataka: "int" i "long" tipovi su široke 32 bita, long long je 64 bita, dok pokazivači i tipovi izvedeni iz pokazivača su široke 64 bita.
  • Upravljački programi za uređaje u kernel modu moraju biti 64-bitne verzije, ne postoji način da pokrenete 32-bitni kernel-režim programa u okviru 64-bitnog operativnog sistema. Upravljački programi korisničkog režia mogu biti ili 32-bitni ili 64-bitni.
  • 16-bitni Windows (Win16) i DOS aplikacije neće raditi na x86-64 verzijama operativnog sistema Windows zbog uklanjanja Virtual DOS Mašine (NTVDM) koji se oslanjao na mogućnost korišćenja virtuelnog 8086 režima. Virtuelni 8086 režim ne može se uneti u toku rada u dugom režimu.
  • Puna implementacija NKS (Ne Ekecute) funkcije zaštite stranica. Ovo je takođe implementirano na nedavnim 32-bitnim verzijama operativnog sistema Windows, kada su startovani u PAE režimu.
  • Umesto FS segment deskriptora na x86 verzijama Windows NT familije, GS segment deskriptor se koristi da ukaže na dve definisane strukture operativnog sistema: Thread Information Block (NT_TIB) u korisničkom režimu i Processor Control Region (KPCR) u režimu kernela. Tako je, na primer, u korisničkom režimu GS:0 adresa prvog člana Thread Information Block-a. Održavanje ove konvencije je olakšalo portovanje x86-64, ali je nateralo AMD da zadrži funkciju segmenata FS i GS u dugom režimu - čak iako segmentirano adresiranje po sebi nije stvarno koristi od strane bilo kog modernog operativnog sistema.
  • Rani izveštaji tvrde kako operating system scheduler neće sačuvati i obnoviti k87 FPU stanje mašine preko thread context prekidača. Posmatrano ponašanje pokazuje da ovo nije slučaj: k87 stanje se čuva i vrati, osim za kernel-mode-only thread-ove (ograničenje koje postoji i u 32-bitnoj verziji). Najnovija dokumentacija dostupna od Majkrosofta navodi da se x87/MMX/3DNow! instrukcije mogu koristiti u dugom režimu, ali da su zastarele i mogu izazvati probleme sa kompatibilnošću u budućnosti.
  • Neke komponente kao što su Majkrosoft Džet Dejtabejz Endžin (engl. Microsoft Jet Database Engine) i pristup podacima objekata neće biti portovani u 64-bitnoj arhitekturi, kao što su x86-64 i IA-64.
  • Majkrosoft Vižual Studio može kompajlirati izvorne aplikacije da ciljaju ili x86-64 arhitekture, koja može da radi samo na 64-bitnom Windowsu, ili arhitekture IA-32, koje mogu raditi kao 32-bitne aplikacije na 32-bitnom Windowsu ili 64-bitnom Windowsu u režimu emulacije WoW64. Managed aplikacije mogu biti kompajlirane ili u IA-32, x86-64 ili EniCPU režimu. Softver stvoren u prva dva režima se ponaša kao njegov IA-32 ili x86-64 kodni duplikat. Međutim kada se koristi režim EniCPU, aplikacije u 32-bitnim verzijama operativnog sistema Windows rade kao 32-bitne aplikacije, dok rade kao 64-bitna aplikacija u 64-bitnim izdanjima operativnog sistema Windows.

Konzole za video igre[uredi | uredi izvor]

PlejStejšn 4 i IksBoks Jedan sadrže Jaguar, višejezgrani procesor koga je dizajnirao AMD. Oba koriste x86-64 da adresiraju 8 GB RAM-a.

Konvencije za nazive u industriji[uredi | uredi izvor]

Pošto su AMD64 i Intel 64 suštinski slični, mnogi softverski i hardverski proizvodi koriste jedan izraz da iskažu svoju kompatibilnost sa obe implementacije. AMD-ov originalni naziv za ovu procesorsku arhitekturu, " x86-64", se još uvek koristi za ovu svrhu, kao i varijanta "x86_64". Druge kompanije, kao što su Majkrosofz i San Majkrosistems/Orakl, koriste izraz "x64" u marketinškim materijalima.

Mnogi operativni sistemi i proizvodi, posebno one koja su ušli na tržište x86-64 pre ulaska Intela na tržište, koriste termin "AMD64" ili "amd64" da se odnosi i na AMD64 i Intel 64.

  • BSD sistemi, kao što su FreeBSD, MidnightBSD, NetBSD i OpenBSD referišu na AMD64 i Intel 64 imenom "amd64".
  • Linuks kernel i DregonFlaj BSD naziva 64-bitnu arhitekturu "x86_64".
  • Debian, Ubuntu, Gentu nazivaju i AMD64 i Intel 64 nazivom "amd64".
  • GNU Compiler Collection, Fedora, PackageKit, openSUSE, i Arch Linux nazivaju 64-bitnu arhitekturu "x86_64".
  • Haiku naziva 64-bitnu arhitekturu "x86_64".
  • U JDK se koristi ime amd64 za direktorijum u kome su x86-64 datoteke.
  • OS IKS naziva 64-bitnu arhitekturu "x86_64".
  • Microsoft Windows: x64 verzije operativnog sistema Windows koriste AMD64 nadimak interno da odrede različite komponente koje koriste ili su kompatibilni sa ovom arhitekturom. Na primer, promenljivoj okruženja PROCESSOR_ARCHITECTURE je dodeljena vrednost "amd64" nasuprot " x86" u 32-bitnim verzijama, a sistemski direktorijum na Windows x64 Edišn instalacionom CD-ROM-u je nazvan "AMD64", za razliku od "i386 "u 32-bitnim verzijama.
  • Solaris: komanda isalist u Solaris operativnom sistemu identifikuje oba sistema kao "amd64".
  • T2 SDE naziva i AMD64 i Intel 64 nazivom " x86-64", u direktorijumima izvornog koda.

Problemi sa licenciranjem[uredi | uredi izvor]

Intel licencira AMD-u pravo da koristi originalnu arhitekturu x86 na kojima se zasniva AMD x86-64. U 2009, AMD i Intel su rešili nekoliko tužbi i neslaganja oko unakrsnog-licenciranja, proširujući svoje ugovore unakrsnog-licenciranja.

Reference[uredi | uredi izvor]

  1. ^ Corporation, AMD (2011). „Volume 2: System Programming” (PDF). AMD64 Architecture Programmer's Manual. AMD Corporation. Pristupljeno 29. 10. 2011. 
  2. ^ Corporation, IBM (6. 9. 2007). „IBM WebSphere Application Server 64-bit Performance Demystified” (PDF). str. 14. Arhivirano iz originala (PDF) 25. 01. 2022. g. Pristupljeno 9. 4. 2010. „"Figures 5, 6 and 7 also show the 32-bit version of WAS runs applications at full native hardware performance on the POWER and x86-64 platforms. Unlike some 64-bit processor architectures, the POWER and x86-64 hardware does not emulate 32-bit mode. Therefore applications that do not benefit from 64-bit features can run with full performance on the 32-bit version of WebSphere running on the above mentioned 64-bit platforms." 
  3. ^ „Debian AMD64 FAQ”. Debian Wiki. Arhivirano iz originala 26. 09. 2019. g. Pristupljeno 3. 5. 2012. 
  4. ^ „x86-64 Code Model”. Apple. Pristupljeno 23. 11. 2012. 
  5. ^ arch(1) – Darwin and macOS General Commands Manual
  6. ^ Kevin Van Vechten (9. 8. 2006). „re: Intel XNU bug report”. Darwin-dev mailing list. Apple Computer. Arhivirano iz originala 01. 02. 2020. g. Pristupljeno 5. 10. 2006. „The kernel and developer tools have standardized on "x86_64" for the name of the Mach-O architecture 
  7. ^ „AMD Discloses New Technologies At Microporcessor Forum” (Saopštenje). AMD. 5. 10. 1999. Pristupljeno 9. 11. 2010. 
  8. ^ „AMD Releases x86-64 Architectural Specification; Enables Market Driven Migration to 64-Bit Computing” (Saopštenje). AMD. 10. 8. 2000. Pristupljeno 9. 11. 2010. 

Spoljašnje veze[uredi | uredi izvor]