X86
x86 |
---|
Opšte karakteristike |
Dizajner |
Intel, AMD |
Bitovi |
16-bita, 32-bita i/ili 64-bita |
Predstavljeno |
1978 (16-bita), 1985 (32-bita, 2003 (64-bita) |
Dizajn |
CISC |
Tip |
Registarska memorija |
Šifrovanje |
Promenljivo (od 1 do 15 bajtova) |
Grananje |
Statusni registar |
endian |
mali (Little) |
Veličina strane |
8086–i286: Nijedna i386, i486: 4 KB strane P5 Pentium: dodaje 4 MB stranama (Legacy PAE: 4 KB→2 MB) x86-64: dodaje 1 GB stranama. |
Ekstenzije |
x87, IA-32, MMX, SSE, SSE2, x86-64, SSE3, SSSE3, SSE4, SSE5, AVX |
Otvoreni |
Delimično. Za neke napredne funkcije, h86 može zahtevati licencu od Intel-a, h86-64 mogu zahtevati dodatni licencu od AMD. 80486 procesor je na tržištu više od 20 godina i tako ne može biti predmet patentnih zahteva. Ovaj podskup h86 arhitekture je stoga potpuno otvoren. |
Registri |
Registri opšte namene |
16-bita: 6 polu-posvećeni registri + BP i SP; 32-bita: 6 registri opšte namene + EBP i ESP; 64-bita: 14 registi opšte namene + RBP i RSP. |
Pokretni zarez |
16-bita: Opciono podeljeni x87 FPU. 32-bita: Opciono deli ili su integrisani u x87 FPU, integrišu SSE2 jedinice u kasnije procesore. 64-bita: integrišu x87 i SSE2 jedinice. |
Termin x86 označava porodicu kompatibilnog skupa instrukcija arhitekture[1] zasnovanih na Intel 8086 CPU. 8086 je uveden 1978. godine, kao potpuno 16-bitni nastavak Intel-ove 8-bitne serije zasnovane na 8080 mikroprocesoru, sa memorijskom segmentacijom kao rešenjem za adresiranje više memorije nego što bi bilo moguće pokriti običnim 16-bitnim adresama. Termin x86 je izveden iz činjenice da su raniji naslednici 8080, takođe imali imena sa završetkom "86".
Mnoga dodavanja i proširenja su bila dodata na x86 skup instrukcija tokom godina, većinom dosledno sa punom kompatibilnošću prethodnih procesora.[2] Arhitektura je implementirana u procesor od Intel-a, Cyrix-a, AMD-a, VIA i mnogih drugih kompanija.
Termin nije sinonim sa IBM PC kompatibilnošću jer to podrazumeva mnoštvo drugog računarskog hardvera; ugrađeni sistemi kao i računari opšte namene koristili su x86 čipove pre nego što je startovalo PC-kompatibilno tržište,[3] neki od njih pre samog IBM PC-a.
Pregled
[uredi | uredi izvor]U 1980. i ranim 1990. godinama kada su 8088 i 80286 i dalje bili u opštoj upotrebi, termin x86 obično je predstavljao bilo koji 8086 kompatibilni CPU. Danas, međutim, x86 obično podrazumeva binarnu kompatibilnost takođe sa 32-bitnim skupom instrukcija od 80386. To je zbog činjenice da je ovaj skup instrukcija postao nešto kao najmanji zajednički imenilac za mnoge operativne sisteme, a verovatno i zbog toga što je postao uobičajeni termin nakon uvođenja 80386 u 1985. godini.
Termin x86 ponekad može se istaći kao x86-32[4] da bi se razlikovao od ili originalnog 16-bitnog "x86-16" ili od 64-bitnog x86-64.[5] Iako se većina x86 procesora, koji se koriste u novim personalnim računarima i serverima, ima 64-bitnu kompatibilnost, da bi se izbegli problemi sa kompatibilnošću sa starijim računarima ili sistemima, termin x86-64 (ili x64) se često koristi da označi 64-bitni softver, sa terminom x86 koji trenutno implicira samo 32-bita.[6][7]
Iako je 8086 prvenstveno razvijen za ugrađene sisteme i male jedno-korisničke računare, u velikoj meri kao odgovor na uspešnu 8080-kompatibilnost Zilog Z80,[8] liniji x86 ubrzo su porasle karakteristike i procesorska snaga. Danas, x86 je sveprisutan u stacionarnim i prenosivim personalnim računarima i zamenio je opseg srednjih računara i računara sa smanjenim skupom instrukcija (RISC) zasnovanih računara većinom od servera i radnih stanica. Velika količina softvera, koji uključuju operativne sisteme (OS) kao što su DOS, Microsoft Windows, Linux, BSD, Solaris i Mac OS X funkcionišu sa x86 zasnovanim hardverom.
Moderan x86 je relativno redak u ugrađenim sistemima, međutim, i male aplikacije sa niskom potrošnjom energije (koje koriste male baterije) kao i jeftino miksoprocesorsko tržište, kao što su kućni aparati i igračke, nemaju nikakvo značajno x86 prisustvo.[9] Jednostavna 8-bitna i 16-bitna arhitektura su zajedničke ovde, iako x86-kompatibilan VIA C7, VIA Nano, AMD Geode, Athlon Neo i Intel Atom su primeri 32- i 64-bitnog dizajna koji se koriste sa relativno malom snagom i jeftinim segmentima.
Bilo je nekoliko pokušaja, uključujući i sam Intel, da prekine tržišnu dominaciju "nelegalne" x86 arhitekture dizajnirane direktno od prvih jednostavnih 8-bitnih mikroprocesora. Primeri za to su iAPX 432 (drugo ime Intel 8800), Intel 960, Intel 860 i Intel/Hewlett-Packard Itanium arhitektura. Međutim, kontinuirano prečišćavanje x86 mikroahitekture, kola i proizvodnje poluprovodnika napravili su poteškoće u zameni x86 u mnogim segmentima. AMD-ovo 64-bitno proširenje x86 (kojim je Intel konačno odgovorio da je sa kompatibilnim dizajnom)[10] i skalabilnost x86 čipova kao što su osmojezgarni Intel Xeon i 12-jezgarni AMD Opteron su podvukli x86 kao primer kako kontinuirano prečišćavanje utvrđenih industrijskih standarda može odoleti konkurenciji od potpuno novih arhitektura.[11]
Hronologija
[uredi | uredi izvor]U donjoj tabeli su navedeni brendovi zajedničkih[12] potrošačkih ciljanih procesora koji implementraju x86 skup instrukcija, koji su grupisani po generacijama koje naglašavaju važne događaje x86 istorije. Napomena: CPU generacije nisu stroge – svaku generaciju odlikuje značajno poboljšanje ili komercijalni uspeh dizajna procesorske mikroarhitekture.
Generacija | Prvi put predstavljen | Istaknuti potrošač CPU brenda | Linearni/fizički adresni prostor | Značajne (nove) funkcije |
---|---|---|---|---|
1 | 1978 | Intel 8086, Intel 8088 i kolonovi | 16-bita / 20-bita (segmentirana) | Prvi x86 mikroprocesor |
1982 | Intel 80186, Intel 80188 i kolonovi, NEC V20/V30 | Hardver za brzo izračunavanje adresa, brzo množenje/deljenje, itd. | ||
2 | Intel 80286 i kolonovi | 16-bita(30-bita virtuelno)/24-bita(segmentirana) | MMU, za zaštićeni režim i veći adresni prostor. | |
3 (IA-32) | 1985 | Intel 80386 i kolonovi, AMD Am386 | 32-bita (46-bita virtuelno)/32-bita | 32-bitni skup instrukcija sa MMU straničenjem |
4 (FPU) | 1989 | Intel 80486 i kolonovi, AMD Am486/Am5x86 | RISC-popup protočne obrade, x87 FPU (80-bita), na čipu keš. | |
4/5 | 1997 | IDT/Centaur-C6, Cyrix III-Samuel, VIA C3-Samuel2 / VIA C3-Ezra (2001), VIA C7 (2005) | U cilju, integrisanog FPU, neki modeli sa dva L2 keša na čipu, MMX, SSE. | |
5 | 1993 | Pentium, Pentium MMX, Cyrix 5x86, Rise mP6 | Superskalar, 64-bitna magistrala podataka, brži FPU, MMX (2× 32-bita). | |
5/6 | 1996 | AMD K5, Nx586 (1994) | μ-op prevođenje. | |
6 | 1995 | Pentium Pro, Cyrix 6x86, Cyrix MII, Cyrix III-Joshua (2000) | Kao gore navedeno/ 36-bitni fizički (PAE) | μ-op prevođenje, uslovni potezi instrukcija, out-of-order, preimenovanje registara, spekulativno izvršenje, PAE (Pentium Pro), u paketu L2 keš (Pentium Pro). |
1997 | AMD K6/-2/3, Pentium II/III | L3-keš podrška, 3DNow!, SSE (2× 64-bita). | ||
2003 | Pentium M, Intel Core (2006) | optimizovan za male snage. | ||
7 | 1999 | Athlon, Athlon XP | Super skalarni FPU, široki dizajn (do tri x86 instrukcije/generatorskom taktu | |
2000 | Pentium 4 | Duboka protočna obrada, visoka frekvenca, SSE2, hyper-threading. | ||
7/8 | 2000 | Transmeta Crusoe, Transmeta Efficeon | VLIW dizajn sa x86 emulatorom, memorijski kontroler na čipu. | |
2004 | Pentium 4 Prescott | 64-bita/64-bita fizički u prvoj AMD implementaciji | Veoma duboka protočna obrada, veoma visoka frekvenca, SSE3, 64-bitno sposoban (celobrojni CPU) je samo dostupan u LGA 755 podnožju. | |
2006 | Intel Core 2 | 64-bitna (celobrojn CPU), mala potrošnja, višejezgarni, manja frekvencija generator takta, SSE4 (Penryn). | ||
2008 | VIA Nano | Spoljna upotreba, superskalarni, 64-bitna (celobrojn CPU), hardverski-bazirana enkripcija, veoma mala potrošnja, adaptivno upravljanje potrošnjom. | ||
8 (x86-64) | 2003 | Athlon 64, Opteron | x86-64 skup instrukcija (CPU glavno celobrojno jezgro), memorijski kontroler na čipu, hipertransport. | |
8/9 | 2007 | AMD Phenom | Kao što je gore/48-biza fizički za AMD Phenom | MMonolitni četvorojezgarni, SSE4a, hipertransport ili QuickPath, materni memorijski kontroler, L3 keš na čipu, modularni. |
2008 | Intel Core i3/i5/i7, AMD Phenom II | |||
Intel Atom | In-order ali visoka protočna obrada, veoma mala potrošnja, na nekim modelima: 64-bitna (celobrojn CPU), na čipu GPU. | |||
2011 | AMD Bobcat, Llano | Van upotrebe, 64-bitna (celobrojn CPU), na čipu GPU, mala potrošnja (Bobcat). | ||
9 (GPU) | 2011 | Intel Sandy Bridge/Ivy Bridge, AMD Bulldozer i Trinity | SSE5/AVX (4×64-bita), visoko modularni dizajn, integrisani na čipu GPU. | |
2013 | Intel Haswell | AVX2, FMA3, TSX, BMI1, i BMI2 instrukcije. | ||
– (MIC pilot) |
2012 | Intel Xeon Phi (Larrabee) | Mnogo integrisanih jezgara (62), In-order P54C sa x86-64, veoma široka vektorska jedinica, LRBni instrukcije (8× 64-bita). |
Istorija
[uredi | uredi izvor]Pozadina
[uredi | uredi izvor]X86 arhitektura je prvi put korišćena u Intel 8086 centralnoj procesorskoj jedinici (CPU) objavljena tokom 1978. godine, potpuno 16-bitni dizajn bio je zasnovan na ranim 8-bitnom 8008 i 8080. Iako binarno nekompatibilan, bio je dizajniran da omogući programe asemblerskog jezika pisane za ove procesore (kao i savremeni 8085) da budu mehanički prevedeni na ekvivalentni 8086 sklop. Ovo je napravilo da novi procesor bude sa primamljivim softverskim migracionim putem za mnoge kupce. Međutim, 16-bitna spoljna magistrala podataka od 8086 podrazumeva prilično značajan redizajn hardvera, kao i druge komplikacije i troškove. Da bi rešili ovu prepreku, Intel je predstavio skoro indentičan 8088, u osnovi 8086 sa 8-bitnom eksternom magistralom podataka koja dopušta jednostavnije štampane ploče i zahteva manje (1-bitne širine) DRAM čipove; bilo je takođe jednostavnije povezati se na već uspostavljen (npr. niske cene) 8-bitni sistem i periferne čipove. Između ostalog, ne-tehničkih faktori, ovo je doprinelo da IBM odluči da dizajnira kućni računar/personalni računar zasnovan na 8088, uprkos prisustvu 16-bitnog mikroprocesora od Motorola, Zilog, i National Semiconductor (kao i nekoliko uspostavljenih 8-bitnih procesora, koji su se takođe razmatrali). Dobijen IBM PC kasnije je postao prioritetan za Z80 zasnovan CP/M sistem, Apple IIs, i drugih popularnih računara kao de facto standard za personalne računare, čime se omogućava da 8088 i njegovi naslednici dominiraju ovako velikim delom tržišta mikroprocesora.
iAPX 432 i 80286.
[uredi | uredi izvor]Drugi faktor je bio da nepredni ali ne-kompatibilni 32-bitni Intel 8800 (alias iAPX 432) nije uspeo na tržištu u vreme kada je originalni IBM-PC pokrenut; novi i brz 80286, zapravo je doprineo u razočarenju u odnosu na performanse polu-savremenog 8800. tokom rane 1982. godine (80186, pokrenut istovremeno sa 80286, bio je namenjen za ugrađene sisteme, pa bi stoga imao u svakom slučaju veliko tržište). Tržišni neuspeh 32-bitnog 8800 bio je značajan podsticaj za Intel da nastavi da razvija napredije 8086 kompatibilne procesore, kao što je 80386 (32-bitno proširenje dobro obavljenog 80286).
Ostali proizvođači
[uredi | uredi izvor]U različata vremena, kompanije kao što su IBM, NEC,[13] AMD, TI, STM, Fujitsu, OKI, Siemens, Cyrix, Intersil, C&T, NexGen, UMC, i DM&P počele su da dizajniraju i/ili proizvode x86 procesore (CPU) namenjene personalnim račinarima kao i ugrađenim sistemima. Takve x86 implementacije su retko jednostavne kopije, ali često koriste različite unutrašnje mikroarhitekture kao i različita rešenja u elektronskim i fizičkim nivoima. Savim prirodno, rani kompatibilni mikroprocesori su 16-bitni, dok su 32-bitni razvijeni mnogo kasnije. Za tržište personalnih računara, realne količine su počele da se pojavljuju oko 1990. godine sa i386 i i486 kompatibilnim procesorima, često pod nazivom slično Intel-ovim originalnim čipovima. Druge kompanije, koje dizajniraju ili proizvode x86 ili h87 procesore, uključuju ITT Corporation, National Semiconductor, ULSI System Technology, i Weitek.
Nakon što je sledila potpuno protočna obrada i486, Intel je predstavio brend ime Pentium (koji, za razliku od brojnih drugih, mogao biti zaštićen) za svoj novi skup superskalarnog x86 dizajna. Sa x86 imenovanom šemom sada legalno očišćenom, IBM se udružio sa Cyrix da proizvede 5x86, a zatim vrlo efikasan 6x86 (M1) i 6x86MX (MII) linije Cyrix dizajna, koji su bili prvi x86 mikroprocesori koji implementiraju registarsko preimenovanje da omoguće spekulativno izvršenje. AMD je u međuvremenu dizajnirao i proizveo napredni ali zakasneli 5k86 (K5), koji je, interno, bio usko baziran na AMD-ov rani 29K RISC dizajn; slično kao NexGen's Nx586, on koristi strategiju tako da prikaže stanje protočne obrade dekodiranih x86 instrukcija u ujednačenim i lako rukujućim mikrooperacijama, metod koji je ostao osnova za većinu x86 dizajna do današnjeg dana.
Neke rane verzije ovih mikroprocesora su imale problem odvođenja toplote. 6x86 je takođe pogođen sa nekoliko manjih kompatibilnih problema, Nx586 je imao nedostatak pokretnog zareza (FPU) i (tadašnje ključne) pin-kompatibilnosti, dok je K5 imao nešto razočaravajući učinak kada je (konačno) uveden. Korisničko neznanje o alternativi za Pentium seriju dodatno je doprinelo da ti dizajni budu neuspešni, uprkos činjenici da je K5 imao veoma dobru Pentium kompatibilnost i 6x86 je bio znatno brži od Pentium-a u celobrojnom kodu.[14] AMD je kasnije uspeo da se nametne kao ozbiljan takmičar sa K6 skupom procesora, koji su trasirali put ka veoma uspešnim Athlon i Opteron procesorima. Bilo je i drugih takmičara, kao što su Centaur Technology (ranije IDT), Rise Technology, i Transmeta. VIA Technologies-ov energetski efikasan S3 i S7 procesori, koji su bili dizajnirani od strane Centaur kompanije, prodati su za mnogo godina. Centaur-ov najnoviji dizajn, VIA Nano, je njihov prvi procesor sa supersklarnim i speculative execution (spekulativno izvršenje je tehnika optimizacije gde računarski sistem obavlja neki zadatak koji ne može biti stvarno potreban). On je, verovatno zanimljivo, uveden u otprilike isto vreme kao i Intel-ov prvi "in-order" procesor još od R5 Pentium, Intel Atom.
Proširenje veličine reči
[uredi | uredi izvor]Skup instrukcija arhitekture je dva puta proširen na veću veličinu reči. Godine 1985, Intel je objavio 80386 (kasnije poznat kao i386) koji je postepeno zamenio 16-bitne čipove u računarima (mada obično ne u ugrađenim sistemima) tokom narednih godina; ovo proširenje programskih modela se prvobitno odnosilo na i386 arhitekturu (kao prva implementacija) ali Intel ju je kasnije nazvao IA-32 kada uvodi svoju (izmišljenu) IA-64 arhitekturu. Godine 1999—2003, AMD proširuje ovu 32-bitnu arhitekturu na 64-bita i osnosi si se na nju kao na x86-64 u ranim dokumentacijama i kasnije kao AMD64. Intel uskoro usvaja AMD-ove arhitektonske dodatke pod imenom IA-32e koje je kasnije preimenovao u EM64T i konačno Intel 64. Među ovih pet imena, originalni x86-64 se verovatno najčešće koristi iako Microsoft i Sun Microsystems takođe koriste termin x86.
Pregled
[uredi | uredi izvor]Osnovne osobine arhitekture
[uredi | uredi izvor]X86 arhitektura je promenljive dužine instrukcije, pre svega "CISC" dizajna sa akcentom na zaostalu kompatibilnost. Skup instrukcija nije tipičan CISC, međutim, već u osnovi su proširene verzije jednostvane osmo-bitne 8008 i 8080 arhitekture. Adresiranje bajta je omogućeno i reči se čuvaju u memoriji sa little-endian (Little endian je način zapisa podatka u memoriji tako da je na nižoj adresi niži bajt memorijske reči.) redosledih bitova. Pristup memoriji za ne-poravnate (unaligned) adrese je dozvoljen za sve važeće veličine reči. Najveća prirodna veličina za celi broj u aritmetici i memorijskim adresama (ili ofsetu) je 16, 32 ili 64 bita u zavisnosti od generacije arhitekture (noviji procesori uključuju direktnu podršku i za manje cele brojeve). Višestruke skalarne vrednosti mogu se izvršavati istovremeno preko SIMD jedinice prisutne u kasnijim generacijama, kao što je opisano u nastavku.[15] Neposredno adresiranje ofseta i neposredni podaci mogu se izraziti kao 8-bitna količina za česte pojavne slučajeve ili u kontekstima gde je opseg -128...127 dovoljan. Tipične istrukcije su stoga 2 ili 3 bajta dugačke (mada su neke mnogo duže, a neke su jednobajtne).
Da bi se dalje uštedeo prestor kodiranja, većina registara se izražavaju u opcodes korišćenjem tri bita, i najviše jednog operanda da instrukcija može biti memorijska lokacija (neki "CISC" dizajni, kao što je PDP-11, može koristiti dve). Međutim, ovaj operand memorije takođe može biti odredište (ili kombinacija izvora i odredišta), dok drugi operandi, izvor, mogu biti ili registrovani ili immediate operand (immediate operand je operand koji je direktno kodiran kao deo mašinske instrukcije). Među ostalim faktorima, to doprinosi veličini koda koji konkuriše osmo-bitnoj mašini i omgućava efektivno korišćenje instrukcija keša. Relativno mali broj opštih registara (takođe naslodnik svoji 8-bitnih predaka) je napravio važan metod registar-relativnog adresiranja (koriseći male neposredne ofsete) pristupa operanadima, posebno na steku. Mnogo napora je stoga uloženo u pravljenje takvog pristupa kao što je brz registarski pristup, odnosno jedan ciklus protočnih instrukcija, u većini slučajeva u kojima je pristup podacima moguć na najvišem nivou u kešu.
Pokretni zarez i SIMD
[uredi | uredi izvor]Prikazani pokretni zarez procesora sa 80-bitnim internim registrima, 8086, je razvijen za originalni 8086. Ovaj mikroprocesor se kasnije razvio u prošireni 80387, a kasniji procosori su ugrađena zaostala kompatibilna verzija ove funkcionalnosti na istom mikroprocesoru kao glavnom procesoru. Pored toga, moderni x86 dizajn takođe sadrži SIMD-jedinicu (vidi SSE dole) gde instrukcije mogu da rade paralelno na (jednoj ili dve) 128-bitnoj reči, od kojih svaka sadrži 2 i 4 broja u pokretnom zarezu (svaki 64 ili 32 bitne širine respektivno), ili alternativno, 2, 4, 8 ili 16 celobrojnih brojeva (svaki 64, 32, 16 ili 8 bitova dužine respektivno). Široki SIMD registri znače da postojeći x86 procesor može učitati ili uskladištiti do 128 bita memorijskih podataka u jednoj instrukciji i takođe obavljati operacije nad bitovima (mada ne celobrojna aritmetika[16]) na količini punih 128-bita paralelno. Sa uvođenjem Intel-ovih "SandyBridge" procesora, x86 procesori počeli su da koriste 256-bita širine SIMD registre, zajedno sa AVX (Advanced Vector Extensions) skupom instrukcija. Knights Corner, arhitektura koju koristi Intel na svojim Xeon Phi ko-procesorima, koriste 512-bitne širine SIMD registre.
Trenutne implementacije Tokom izvršenja, aktuelni x86 procesori koriste nekoliko dodatnih koraka za dekodiranje da podele više instrukcija na manje komade (mikrooperacije). Oni se potom predaju kontrolnoj jedinici koja ih baferuje i raspoređuje u skladu sa x86-semantikom, tako da one mogu biti izvršene, delimično paralelno, pomoću jednog od nekoliko (više ili manje specijalizovane) izvršnih jedinica. Ovi moderni x86 dizajni su superskalarni, i takođe u stanju su da izvrše preko reda i spekulativne operacije (preko preimenovanja registra), što znači da može da izvrše više (delimično ili potpuno) x86 instrukcija istovremeno, a ne nužno u istom rasporedu koji je dobijen u unstrukcijskom strimu.
Kada je uveden, sredinom 1990. godina, ovaj metod se ponakad nazivao "RISC jezgro" ili "RISC prevođenje", delom zbog marketinških razloga, ali i zbog toga što ove mikrooperacije dele neke osobine sa određenim vrstama RISC instrukcija. Međutim, tradicionalni mikrokod (koristi se od 1950. godine) takođe suštinski deli mnoge iste osobine; novi metod uglavnom se razlikuje u tome da se prevođenje na mikrooperacije sada dešava asinhrono. Ne moranje sinhronizacije izvršne jedinice sa koracima dekodovanja otvara mogućnosti za dodatne analize (baferovanog) strima koda, pa samim tim omogućava detekciju operacija koje se mogu obavljati paralelno, istovremeno hraneći više od jedne izvršne jedinice.
Kasniji procesori takođe rade suprotno kada je moguće; oni kombinuju određene x86 sekvence (kao što je poređenje, praćeno uslovnim skokom) u više mikrooperacija koje bolje odgovaraju modelu izvršenja i na taj način se mogu izvršiti brže ili sa manje korišćenja mašinskog resursa.
Još jedan način za poboljšanje performansi je da se keširaju dekodavane mikrooperacije, tako da procesor može direktno pristupiti dekodovanim mikrooperacijama iz posebnog keša, umesto da ih ponovo dekodira. Intel je pratio ovaj pristup sa Execution Trace Cache karakteristikama u njihovoj NetBurst mikroarhitekturi (za Pentium 4 procesor) i kasnije u Decoded Stream Buffer-u (za jzgro-brendirane procesore od Sandy Bridge).[17]
Transmeta je koristila potpuno drugačiji metod u njihovim x86 kompatibilnim CPU-ovima. Oni su koristili tačno-na-vreme prevođenje za konvertovanje x86 instrukcije na CPU-ov maternji VLIW skup instrukcija. Transmeta je tvrdila da njihov pristup omogućava dizjne veće energetske efikasnosti, pošto se CPU može odreći komplikovanih koraka za dekodovanje više tradicionalnih x86 instrukcija.
Segmentacija
[uredi | uredi izvor]Mikroračunari tokom kasnih 1970. godina su radili protiv 16-bitnne 64 KV adresnih limita, pošto je memorija postajala jeftinija. Neki mikroračunari poput PDP-11 su koristili složene šeme bankarske-zamene, ili, u slučaju Digital's VAX, kada su redizajnirani mnogo skuplji procesori koji su mogli direktno da rade sa 32-bitnim adresama i podacima. Originalni 8086, se razvio iz prostog 8080 mikroprocesora i, pre svega, u cilju veoma malih i jeftinih računara i drugih specijalizovanih uređaja, umesto usvajanja jednostavnih segment registara koji povećavaju širinu memorijske adrese za samo 4 bita. Množenjem 64KV magistrale sa 16, 20-bitna adresa je mogla da adresira ukupno jedan megabajt (1.048.576 bajtova), što je u to vreme bio dosta veliki broj za mali računar. Koncept segmenta registara nije bio nov za mnoge mainframes (mainframe su vrlo veliki računari sposobni da podrže stotine ili ček hiljade korisnika) koji su koristili segment registar da brzo menjaju različite zadatke. U praksi, na x86 je bilo (je) dosta kritika za implementaciju koja u velikoj meri komplikuje mnogo zajedničkih programskih zadataka i kompajlere. Međutim, arhitektura ubrzo dozvoljava linearno 32-bitno adresiranje (počevši od 80386 kraje 1985. godine), ali glavnim akterima (kao što je Microsoft) je trebalo nekoliko godina da konvertuju njihove 16-bitno bazirane sisteme. 80386 (i 80486) se stoga još mnogo godina u velikoj meri koristio kao brz (ali još uvek 16-bitno zasnovan) 8086.
Podacima i/ili kodovima se moglo upravljati u "near" 16-bitnim segmentima u okviru 1 MV adresnog prostora, ili je kompajler mogao da radi u "far" modu koristeći 32-bitne segment/ofset parove dostižući (samo) 1MV. Iako će se to pokazati prilično ograničavajućim do sredine 1980. godina, to je radilo za PC tržište u nastajanju, a napravilo ga je vrlo jednostavnim za prevođenje softvera sa starih 8008, 8080, 8085 i Z80 na novije procesore. Tokom 1985. godine, model 16-bitne adrese postao je efikasan uvođenjem 32-bitnih ofset registara, u 386 dizajnu.
U realnom modu, segmentacija se postiže šiftovanjem segmentnih adresa ulevo za 4 biti i dodavanjem ofseta u redu kako bi se dobila konačna 20-bitna dresa. Na primer, ako je DS A000h i SI 5677h, DS:SI će ukazivati na apsolutnu adresu DS × 10h + SI = A5677h. Tako je ukupan adresni prostor u realnom režimu 220 bajta, ili 1MV, prilično impresivna cifra za 1978. godinu. Sve memorijske adrese se sastoje od segmenta i ofseta; svaka vrsta pristupa (kod, podaci, ili stek) ima default segmentni registar koji je u vezi sa njim (za podatke uobičajeni registar je DS, za kod CS, i za stek SS). Za pristup podacima, segmentni registar može eksplicitno da se navede (korišćenjem segmentnog override prefiksa) da koristi bilo koji od četiri segment registra.
U ovoj šemi, dva različita segment/ofset para mogu pokazivati na jednu apsolutnu lokaciju. Tako, ako je DS A111h i SI 4567h, DS:SI će pokazivati na istu A5677h adresu kao i gore. Ova šema čini je nemogućom da koristi više od četiri segmenta odjednom. CS i SS su od vitalnog značaja za pravilno funkcionisanje programa, tako da se samo DS i ES mogu koristiti za pokazivanje na segmentima podataka izvan programa (ili, tačnije, van trenutnog segmentnog izvršavanja programa) ili steka.
U zaštićenom režimu, segmentni registar nema duže sadržaje fizičke adrese od početka segmenta, ali sadrži "selector" koji pokazuje na system-level strukturu, zvanu segmentni deskriptor. Segmentni deskriptor sadrži fizičku adresu od početka segmenta, dužinu segmenta, i dozvole pristupa tom segmentu. Ofset se proverava zbog dužine segmenta, sa ofsetima koji se odnose na lokacije izvan segmenta uzrokujući izuzetke. Ofsetovi koji se odnosi na lokacije unutar segmenta su u kombinaciji sa fizičkom adresom od početka segmenta da bi se dobila fizičku adresu koja odgovara tom ofsetu.
Segmentirana priroda može da napravi teškim programiranje i dizajn kompajlera, jer upotreba near i far pokazivača utiče na performanse.
Režimi adresiranja
[uredi | uredi izvor]Režimi adresiranja za 16-bitni x86 procesor mogu se sumirati ovom formulom:
Režimi adresiranja za 32-bitnu veličinu adrese na 32-bitnim i 64-bitnim x86 procesorima mogu se sumirati ovom formulom:
Režimi adresiranja za 64-bitni kod na 64-bitnom x86 procesoru mogu se sumirati ovom formulom:
- displacement - premeštanje
- general register - opšti registar
Instrukcije relativne adrese u 64-bitnom kodu (RIP + pomeranje, gde je RIP instrukcija pokazivača registra) pojednostavljuju implementaciju poziciono-nezavisnog koda (kao što se koristilo u deljenim bibliotekama u nekim operativnim sistemima).
Procesor 8086 je imao 64KV 8-bitnog ( ili alternativno 32K – reči od 16-bita) U/I prostora, kao i 64KV (jedan segment) steka u memoriji podržanoj od računarskog hardvera. Samo se reči (2 bajta) mogu staviti na stek. Stek raste nadole (ka numeričko nižim adresama), njegovo dno pokazće se pomoću SS:SP. Postoje 256 prekida, koje mogu da se pokrenu pomoću i hardver i softver. Prekidi mogu kaskadirati, koristeći stek za čuvanje povratne adrese.
X86 registri
[uredi | uredi izvor]16-bita
[uredi | uredi izvor]Originalni Intel 8086 i 8088 imaju četrnaest 16-bitnih registara. Četiri od njih (AX, BX, CX, DX) su registri opšte namene (GPR), iako svaki od njih može imati dodatnu namenu; na primer, samo CX može da se koristi kao brojač za instrukcije petlje. Svaka može biti pristupna kao dva odvojena bajta (tako BX-ovom visokom bajtu može se pristupiti kao BH i niskom bajtu kao BL). Postoje dva pokazivačka registra: SP koji pokazuje na vrh steka i BP (bazni pokazivač) koji se koristi da pokaže na neko drugo mesto u steku, obično gornje lokalne promenljive. Dva registra (SI i DI) su za indeksiranje niza.
Četiri registara segmenta (CS, DS, SS i ES) se koriste za formiranje memorijske adrese. FLAGS ragistar sadrži zastavice kao carry flag (carry flag je jedan bit u statusnom registarskom sistemu (zastava) koji se koristi da označe kada je aritmetika nošenja ili pozajmice generisana od najznačajnijih ALU bit pozicija), overflow flag (overflow flag je obično jedan bit u statusnom registarskom sistemu koji se koristi da označi kada je došlo aritmetike prelivanja u operaciji, ukazujući da potpisani dvodopunski rezultat ne može da stane u broju bitova koji se koriste za operaciju (širina ALU)) i zero flag (zero flag je jedan bit zastava koja je centralna karakteristika na većini konvencionalnih procesora arhitekture (uključujući k86, ARM, PDP-11, 68000 i brojne druge)). Konačno, pokazivač instrukcija (IP) pokazuje na sledeću instrukciju koja će biti učitana iz memorije i zatim izvršena. Ovom registru ne može se direktno pristupiti (čitati ili pisati) pomoću programa.
U Intel 50286, tri posebna registra drže deskriptor tabele adresa (GDTR, LDTR, IDTR), a četvrti registar zadataka (TR).
32-bita
[uredi | uredi izvor]Sa pojavom 32-bitnog 80386 procesora, 16-bitni registri opšte namene, bazni registar, indeksni registar, instrukcijski pokazivač, i FLAGS registar, ali ne i segmentni registri, su prošireni na 32 bita. Ovo je predstavljeno prefiksom "E" (za prošireno) na ime registra u x86 asemblerskom jeziku. Tako, AX registar odgovara najnižim bitovima novog 32-bitnog EAX registra, SI odgovara najnižim 16 bitovima ESI, i tako dalje. Registri opšte namene, bazni registri i indeks registri mogu se koristiti kao osnovni u režimu adresiranja, i svi ti registri osim stek pokazivača mogu biti korišćeni kao indeksi u režimu adresiranja.
Dva nova segmentna registra (FS i GS) su bila dodata. Sa većim brojem registara, instrukcija i operanada, format mašinskog koda je proširen. Da se obezbedi kompatibilnost unazad, segmenti sa izvršnim kodom se mogu označiti kao oni koji sadrže ili 16-bitne ili 32-bitne instrukcije. Posebni prefiksi omogućavaju uključivanje 32-bitnih instrukcija u 16-bitnom segmentu ili obrnuto.
Procesor 8038 je imao opcioni koprocesor u pokretnom zarezu, 80387; on je imao osam 80-bitne širine registara: st(0) do st(7).[18] Sa 80486 procesorska jedinica sa pokretnim zarezom (FPU) je integrisana na čip.
Sa Pentium MMX, osam 64-bitnih MMX celobrojnih registara je dodato (MMX0 do MMX7, koji dele niže bitove sa 80-bitnom-širokom FPU steku).[19] Sa Pentium III, 32-bitni Streaming SIMD Extensions (SSE) kontrolni/statusni registar (MXCSR) i osam 128-bitnih SSE registri sa pokretnim zarezom (XMM0 do XMM7) bili su dodati.[20]
64-bita
[uredi | uredi izvor]Počevši sa AMD Opteron procesorom, x86 arhitektura se proširila sa 32-bitnih registara na 64-bitne registre, na sličan način kako se to dogodilo sa 16 na 32-bitno proširenje. Prefiks R identifikuje 64-bitne registre (RAX, RBX, RCX, RDX, RSI, RDI, RBP, RSP, RFLAGS, RIP), i osam dodatnih 64-bitnih registara opšte namene (R8-R15) je takođe dodato u stvaranju x86-64. Međutim, ova proširenja su upotrebljiva samo u 64-bitnom režimu, koji je jedan od dva načina na raspolaganju u dugom modu. Režimi adresiranja nisu se dramatično promenili od 32-bitnog režima, osim što je adresa proširena na 64 bita, virtuelne adrese se sada prijavljuju proširene na 64 bita (kako bi se onemogućio rižim bitova u virtuelnim adresama), a drugi izborni detalji su dramatično smanjeni. Pored toga, dodat je režim adresiranja da omogući memorijske reference u odnosu na RIP (instrukcioni pokazivač ili programski pokazivač), da olakša implementaciju poziciono-nezavisnog koda, koji se koristi u deljenim bibliotekama i nekim operativnim sistemima.
128-bita
[uredi | uredi izvor]SIMD registruje XMM0–XMM15.
256-bita
[uredi | uredi izvor]SIMD registruje YMM0–YMM15.
512-bita
[uredi | uredi izvor]SIMD registruje ZMM0–ZMM31.
Mešoviti/specijalne namene
[uredi | uredi izvor]x86 procesori (počevši od 80386) takođe uključuju razne specijalne/mešovite registre kao kontrolne registre (CR0 do 4, CR8 za samo 64-bita), dibag (za dibagovanje) registre (DR0 do 3, plus 6 i 7), test registre (TR3 do 7; samo 80486), deskriptor registre (GDTR, LDTR, IDTR), registre zadataka (TR), i model-specifične registre (MSR, koji se pojavljuje sa Pentium[21]).
Svrha
[uredi | uredi izvor]Iako su glavni registri (sa izuzetkom instrukcijskog pokazivača) "opšte namene" i mogu biti korišćeni za bilo šta, oni su prvobitno bili predviđeni da se mogu koristiti za sledeće svrhe:
- AX/EAX/RAX: akumulator
- BX/EBX/RBX: bazni indeks (koristi se sa nizovima)
- CX/ECX/RCX: brojač (za korišćenje sa petljama i stringovima)
- DX/EDX/RDX: proširena preciznost akumulatora (npr. kombinovanje 32-bitnih EAX i EDX za 64-bitne celobrojne operacije)
- SI/ESI/RSI: izvorni indeks za string operacije
- DI/EDI/RDI: indeks destinacije za strig operacije
- SP/ESP/RSP: stek pokazivač za gornju adresu steka
- BP/EBP/RBP: stek bazni pokazivač za čuvanje adrese trenutnog prozora steka
- IP/EIP/RIP: instrukcijski pokazivač. Čuva programski brojač, trenutnu adresu instrukcije
Segmentni registri:
- CS: Kod
- DS: Podatak
- SS: Stek
- ES: Ekstra
- FS
- GS
Nema posebnih predviđenih namena za ostalih 8 registara dostupnim samo u 64-bitnom režimu.
Neke instrukcije se efikasnije kompajliraju i izvršavaju kada koriste ove registre za njihovu dizajniranu namenu. Na primer, koristeći AL kao akumulator i dodavanjem trenutne bajt vrednosti na njega, proizvodi efikasno sabiranje na AL opcode od 04h, dok se korišćenjem BL-a proizvodi generičko i duže dodavanje na registar opcode od 80C3h. Drugi primer je dvostruko procizno deljenje i množenje koje radi konkretno sa AX i DX registrima.
Moderni kompajleri imaju korist od uveđenja sib bajta (scale-index-base byte) koji omogućava registrima da budu ravnomerno tretirani (nalik mokroračunarima). Međutim, korišćenje univerzalnog sib ba je neoptimalno, pošto on proizvodi duže kodiranje koje samo koristi njegovu selektivnost kada je to potrebno. (Glavna korist od sib bajta je da omogućava ortogonalne i moćnije režime adresiranja, koji omogućavaju da se sačuvaju instrukcije i koriste registri za proračune adresa, kao što je skaliranje indeksa.) Neke specijalne instrukcije gube prioritet u hardverskom dizajnu i postaju sporije od ekvivalentnih malih kod sekvenci. Značajan primer je LODSW instrukcija.
Struktura
[uredi | uredi izvor]64 | 56 | 48 | 40 | 32 | 24 | 16 | 8 |
---|---|---|---|---|---|---|---|
R?X | |||||||
E?X | |||||||
?X | |||||||
?H | ?L |
64 | 56 | 48 | 40 | 32 | 24 | 16 | 8 |
---|---|---|---|---|---|---|---|
? | |||||||
?D | |||||||
?W | |||||||
?B |
16 | 8 |
---|---|
?S |
64 | 56 | 48 | 40 | 32 | 24 | 16 | 8 |
---|---|---|---|---|---|---|---|
R?P | |||||||
E?P | |||||||
?P | |||||||
?PL |
Napomena: ?PL registri su dostupni samo u 64-bitnom režimu
64 | 56 | 48 | 40 | 32 | 24 | 16 | 8 |
---|---|---|---|---|---|---|---|
R?I | |||||||
E?I | |||||||
?I | |||||||
?IL |
64 | 56 | 48 | 40 | 32 | 24 | 16 | 8 |
---|---|---|---|---|---|---|---|
RIP | |||||||
EIP | |||||||
IP |
Režimi rada
[uredi | uredi izvor]Realni mod
[uredi | uredi izvor]Realni režim je radni režim za 8086 i kasnije x86-kompatibilnih CPU-ova. Realni režim karakteriše se pomoću 20-bitnog prostora segmentne memorijske adrese (što znači da samo 1MV memorije može biti pristupan), direktnim pristupom softvera na BIOS rutinu i periferni hardver, i nema koncept memorijske zaštite ili multitaskinga na hardverskom nivou. Svi x86 CPU-ovi u 80286 seriji i kasnije počinju u realnom modu pri uključenju; 80186 CPU i raniji procesori su imali samo jedan operativni mod, koji je ekvivalentan realnom modu u kasnijim čipovima.
Da bi iskoristili više od 64KV memorije, moraju biti korišćeni segmentni registri. Ovo je stvorilo velike kompalikacije za implementaciju kompajlera, koji su uveli razne pokazivačke modove kao što su "near", "far" i "huge" da bi iskoristili implicitnu prirodu segmentirane arhitekture u različitim stepenima, sa nekim pokazivačima koji sadrže 16-bitni ofset unutar impliciranog segmenta i drugim pokazivačima koji sadrže segmentne adrese i ofset-ove u okviru segmenata.
Zaštićeni režim
[uredi | uredi izvor]Dodatno, u realnom modu, Intel 80286 podržava zaštićeni režim, koji širi adresibilnu fitičku memoriju do 16 MB i adresibilnu virtuelnu memoriju do 1GB, i koji omogućava zaštićenu memoriju, koji sprečava programe da kvare jedan drugog. Ovo se radi korišćenjem segmentnih registara samo za skladištenje indeksa u tabelu segmenta. Postojale su takve dve tabele, Globalna Deskriptor Tabela (GDT) i Lokalna Deskriptor Tabela (LDT), svaka sadrži do 8192 deskriptora segmenata, svaki segment daje pristup za 64KV memorije. Tabela segmenta obezbeđuje 24-bitnu baznu adresu, koja se može dodati na željeni ofset da bi se stvorila apsolutna adresa. Svakom segmentu može biti dodeljen jedan od četiri nivoa prstena koji se koriste za hardversku-zasnovanu računarsku bezbednost.
Intel 80386 uveo je podršku straničenja u zaštićenom režimu, mehanizam koji omogućuje korišćenje ostraničene viruelne memorije.
Straničenje se koristi intenzivno pomoću modernih multitasking operativnih sistema. Linux, 386BSD i Windows NT su razvijeni za 386 pošto je to bila prva Intel-ova arhitektura CPU-a koja je podržavala 32-bitni segmentni ofset. 386 arhitektura je postala osnovna za dalji razvoj x86 serije.
X86 procesori koji podržavaju zaštićeni režim u realnom modu za zaostalu kompatibilnost sa starijom 8086 klasom procesora. Po uključenju (a.k.a pokretanje), procesor se pokreće u realnom režimu, a zatim počinje izvršavanje instrukcija. Operativni sistemski boot code (boot code su u osnovi "instrukcije" koje se pokreću na računaru kada on startuje), koji može biti skladišten u ROM-u, može da stavi procesor u zaštićeni režim da omogući staničenje i ostale funkcije. Skup instrukcija u zaštićenom režimu je zaostala kompatibilan sa onom koja se koristi u realnom režimu.
Virtuelni 8086 mod
[uredi | uredi izvor]Postoji pod-režim rada u 32-bitnom zaštićenom režimu, koji se zove virtuelni 8086 mod. Ovo je u suštini hibrini radni mod koji omogućava programe u realnom režimu i operativnim sistemima da rade dok su pod zaštićenim režimom nadzora operativnog sistema. Ovo omogućava veliku fleksibilnost u izvršavanju programa u zaštićenom režimu i programa u realnom režimu, istovremeno. Ovaj režim je dostupan samo u 32-bitnoj verziji zaštićenog režima; virtuelni 8086 mod ne postoji u 16-bitnoj verziji zaštićenog režima, ili u dugom modu.
Dugi mod
[uredi | uredi izvor]Do 2002. godine, bilo je očigledno da 32-bitno adresni prostor x86 arhitekture ograničava svoje performanse u aplikacijama koje zahtevaju velike skupove podataka. 32-bitni adresni prostor bi omogućio procesoru da direktno adresira samo 4GB podataka, veličina koji prevazilazi aplikacije kao što su video procesovanje i database engines. Korišćenjem 64-bitnih adresa, jedan može da direktno adresira 16 EB (16 milijardi GB) podataka, iako većina 64-bitnih arhitektura ne podržava potpuni pristup 64-bitnom adresnom prostoru (AMD64, na primer, podržava samo 48 bita, podeljenih u 4 nivoa adresiranja, od 64-bitnoh adresa).
AMD je razvio 64-bitni proširenje 32-bitne x86 arhitekture koja se trenutno koristi u x86 procesorima, koja se u početku nazivala x86-64, a kasnije je preimenovana u AMD64. Opteron, Athlon 64, Turion 64, i kasnije Sempron porodice procesora koriste ovu arhitekturu. Uspeh AMD64 linije procesora u kombinaciji sa mlakim prijemom IA-64 arhitekture primorao je Intel da objavi svoju implementaciju AMD64 skupa instrukcija. Intel je prethodno implementirao podršku za AMD64,[22] ali je odlučio da ga ne omogući u nadi da AMD neće doneti AMD64 na tržište pre Itanium-ovog novog IA-64 skupa instrukcija široko usvojenog. Intel je brendirao svoju impelentaciju AMD64 kao EM64T, a kasnije ga je ponovo brendirao kao Intel 64.
U svojoj literaturi i proizvodnim verzijama imena, Microsoft i Sun se odnose prema AMD64/Intel 64 kolektivno kao h64 u Windows i Solaris operativnim sistemima respektivno. Linux distribucije se odnose prema njemu ili kao "x86-64", njegova varijanta "x86_64", ili "amd64". BSD sistemi koriste "amd64" dok Mac OS X koristi "x86_64".
Dugi mod je uglavnom proširenje 32-bitnog skupa instrukcija, ali za razliku od 16-ka-32-bitnoj tranziciji, mnoge instrukcije su pale u 64-bitnom modu. Ovo u stvari ne utiče na zaostalu binarnu kompatibilnost (koja će izvršiti stariji kod u drugom modu koji zadržavaju podršku za te instrukcije), ali menja način na koji asembler i kompajler moraju da rade za novi kod.
Ovo je bio prvi put da je pokrenuta glavna ekstenzija x86 arhitekture i da je poticala od strane drugih proizvođača, a da to nije bio Intel. Takođe je bio prvi put da je Intel prihvatio tehnologiju ove prirode iz spoljašnjeh izvora.
Ekstenzije
[uredi | uredi izvor]Jedinica za pokretni zarez
[uredi | uredi izvor]Rani x86 precesori mogli su biti prošireni sa hardverom za pokretni zarez u obliku serije numeričkih ko-procesora sa pokretnim zarezom, sa imenima kao 8087, 80287 o 80387, skraćeno x87. Ovo je takođe poznato kao NPX (Numeric Processor eXtension). Sa vrlo malo izuzetaka, 80486 i naredni x86 procesori su zatim integrisali ovu h87 funkcionalnost načip, koji je doneo h87 instrukcije de facto sastavni deo x86 skupa instrukcija.
Svaki h87 registar, poznat kao ST(0) do ST(7), je 80 bita širok i skladišti brojeve u IEEE standardu pokretnog-zareza - format sa dvostruko proširenom preciznošću. Ovi registri su organizovani kao stek sa ST(0) na vrhu. To je učinjeno kako bi se sačuvao opcode prostor, a registri su stoga bili slučajno dostupni samo za bilo koji operand u registar-registar aritmetičkim operacijama; ST0 mora uvek da bude jedan od dva operanada, ili izvor ili odredište, bez obzira da le je drugi operand ST(x) ili memorijski operand.
MMX
[uredi | uredi izvor]MMX je SIMD skup instrukcija dizajniran od strane Intel-a, i predstavljen 1997. godine za Pentium MMX procesor. MMX skup instrukcija je razvijen za sličan koncept, koji je prvo korišćen u Intel i860. On je podržavao većinu kasnijih IA-32 procesora od Intel-a i drugih proizvođača. MMX se obično oristi za video obradu (na primer multimedijalne aplikacije).
MMX je dodao 8 novih registara na arhitekturu, poznatih kao MM0 do MM7 (u daljem tekstu MMn). U stvarnosti, ovi novi registri su samo drugo ime za postojeće x87 FPU stek registre. Otuda, svo što se radi steku za pokretni zarez će takođe uticati na MMX registre. Za razliku od FP steka, ovi MMn registri su fiksirani, ne relativni, i zato su bili nasumično dostupni. Skup instrukcija nije usvojio stek-nalik semantiku, tako da su postojeći operativni sistemi i dalje mogli da pravilno čuvaju i vraćaju registarsko stanje kao je multitasking bez modifikacija.
Svaki MMn regsitar su 64-bitni celi brojevi. Međutim, jedan od glavnih koncepata MMX skupa instrukcija je koncept upakovanih tipova podataka, što znači da umesto korišćenja celog registra za jedan 64-bitni ceo broj (četvorostruka reč), jedan može da sadrži dva 32-bitna celobrojna broja (dvostruka reč), četiri 16-bitna celobrojna broja (reč) ili osam 8-bitnih celobrojnih brojeva (bajt). Imajući to u vidu MMX-ovi 64-bitni MMn registri su drugo ime za FPU stek i svaki od registara sa pokretnim zarozom su 80 bita širine, gornji 16 bita registri sa pokretnim zarezom su neiskorišćeni u MMX-u. Ovi bitovi su postavljeni na jedan od bilo koje MMX instrukcije, koja odgovara prikazu pokretnog zareza NaN-sova (not a number – nije broj) ili beskonačnosti.
3DNow!
[uredi | uredi izvor]Godine 1997. AMD je predstavio 3DNow!. Uvođenje ove tehnologije poklopilo se sa usponom 3D aplikacija za zabavu i bila je dizajnirana da poboljša CPU-ove prerformanse za obredu vektora grafičko-zahtevnih aplikacija. 3D programeri video igara i 3D proizvođači grafičkog hardvera koristili su 3DNow! da poboljšaju svoje performanse na AMD-ovom K6 i Athlon seriji procesora.
3DNow! je bio dizajniran da bude prirodna evolucija MMX sa celobrojnih brojeva do pokretnog zareza. Kao takav, on koristi potpuno istu registar konvenciju za imenovanje kao MMX, tj. MM0 do MM7. Jedina rezlika je ta da umesto pakovanja celih brojeva u ove registre, dva jedno precizna broja sa pokretnim zarezom se pakuju u svakom registru. Prednost drugačije imenovanog FPU registara je ta da se iste instrukcije i strukture podataka koriste za čuvanje stanja FPU registara, se takođe mogu koristiti za čuvanje stanja 3DNow! registra. Tako nisu potrebne da se naprave posebne modifikacije na operativnim sistemima koji inače ne znaju ništa o njima.
SSE
[uredi | uredi izvor]Godine 1999, Intel je predstavio Streaming SIMD Extensions (SSE) skup instrukcija, iz čega sledi u 2000. godini SSE2. Prvi dodatak je dozvoljavao rasterećenje bazičnih operacija u pokretnom zarezu od x86 steka i drugi je napravio MMX skoro zastarelim i omogućila instrukcijama da budu realna meta od strane konvencionalnih kompajlera. Predstavljen u 2004. godini sa Prescott revizijom Pentium 4 procesora, SSE3 je dodao specifičnu memoriju i nitno-rukvanje instrukcijama da bi povećao performanse Intel-ove HyperThreading tehnologije. AMD je licencirao SSE3 skup instrukcija i implementirao većinu SSE3 instrukcija za njihovu E reviziju i kasnije Athlon 64 procesore. Athlon 64 nije podržavao HyperThreading i nedostatke tih SSE3 instrukcija koje su korišćene samo za HyperThreading.
SSE odbacio je svo nasleđe sa FPU stekom. Ovo takođe znači da je ovaj skup instrukcija odbacio sve nasleđene veze sa prethodnom generacijom SIMD skupa instrukcija, kao što je MMX. Ali to je oslobodilo dizajnere, omogućilo im je da koriste veće registre, bez ograničenja veličine od FPU registara. Dizajneri su stvorili osam 128-bitnih registara, imenovanih XMM0 do XMM7. (Napomena: u AMD64 broj SSE XMM registara je povećan sa 8 na 16.) Međutim, mana je da su operativni sistemi morali da imaju svest o ovom novom skupu instrukcija, kako bi mogli da sačuvaju svoje stanja registra. Tako je Intel stvorio nešto izmenjenu verziju Zaštićenog režima, nazvanu Enhanced mod koji omogućava korišćenje SSE instrukcija, dok one ostaju onesposobljene u regularnom Zaštinom modu. OS koji se svestan SSE-a će aktivirati Enhanced mod, dok će nesvesni OS ući samo u tradicionalni Zaštitini režim.
SSE je SIMD skup instrukcija koji radi samo sa vrednostima u pokretnom zarezu, kao 3DNow! Međutim, za razliku od 3DNow! on prekida sve starije konekvije sa FPU stekom. Pošto ima veće registre nego 3DNow!, SSE može spakovati duplo više od jedno precizno decimale u njegovom registru. Osiginalni SSE bio je ograničen samo na jeno-precizne brejeve, kao što je 3DNow! SSE2 uveo je mogućnost da spakuje duplo precizne brojeve, koje 3DNow! nije imao mogućnost da radi, pošto su duplo precizni brojevi 64-bitne veličine, što bi bio ceo jedan 3DNow! MMn registar. Na 128 bita, SSE XMMn registar bi mogao da spakuje dva duplo precizna decimalna broja u jedan registar, Tako SSE2 je pogodniji za naučne proračune nego SSE1 ili 3DNow!, koji su bili ograničeni na samo jednu preciznost. SSE3 nije uveo nikakve dodatne registre.
Preširenje fizičke adrese (PAE)
[uredi | uredi izvor]Proširenje fizičke adrese ili PAE bilo je prvi put dodato u Intel Pentium Pro, da omogući dodatnih 4 bita fizičkog adresiranja u 32-bitnom zaštićenom režimu. Veličina memorije u Zašzićenom režimu je obično ograničena na 4 GB. Putem trikova u procesorskim stranama i sistemima za upravljanje segmentima memorije, x86 operativni sistem mogao je da pristupi više od 32-bitnog adresnog prostora, čak i bez prelasna na 65-bitnu paradigmu. Ovaj mod ne menja dužinu segmenta ofseta ili linearne adrese; oni su još uvek samo 32 bitni.
X86
[uredi | uredi izvor]U aprilu 2003. godine, AMD je objavio prvi x86 procesor sa 64-bitnim fizičkim memorijskim adresama registara sposobnim da adresiraju mnoogo više od 4GB memorije koje koriste nova x86-64 proširenja (takođe poznat kao h64). Intel je predstavio njihov prvi x86-64 procesor u julu 2004. godine.
X86-64 je prethodio drugoj arhitekturi koja koristi 64-bitno memorijsko adresiranje: Intel je predstavio Itanium 2001. godine za računarsko tržište visokoh performansi. Međutim, Itanium je bio nekompatibilan sa x86 i danas se ne koristi u širokoj upotrebi. X86-64 takođe je predstavio NX bit, koji nudi neku zaštitu od bezbednosnih grešaka izazvanih prekoračenjem bafera.
Virtuelizacija
[uredi | uredi izvor]Pre 2005. godine x86 arhitektura procesora nije bila u stanju da ispuni Popek i Goldberg zahteve – specifikacija za virtualizaciju nastala je 1974. godine od Gerald J. Popek i Robert P. Goldberg. Međutim oba, komercijalna i otvoreni izvor x86 vitualizacije hipervizorskih proizvoda bili su razvijeni korišćenjem softversko-baziranih virtualizacija. Komercijalni sistemi uključuju VMware ESX, VMware Workstation, Parallels, Microsoft Hyper-V Server, i Microsoft Virtual PC; dok sistemi otvorenog izvora uključuju QEMU/KQEMU, VirtualBox, i Xen.
Uvođenje AMD-V i Intel VT-x skupa instrukcija u 2005 godini, omogućava x86 procesorima da zadovolje Popek and Goldberg virtualizacione zahteve.[23]
Vidi još
[uredi | uredi izvor]Reference
[uredi | uredi izvor]- ^ Unlike the microarchitecture (and specific electronic and physical implementation) used for a specific microprocessor design.
- ^ Intel abandoned its "x86" naming scheme with the P5 Pentium during 1993 (as numbers could not be trademarked). However, the term x86 was already established among technicians, compiler writers etc.
- ^ the GRID Compass laptop, for instance
- ^ See [1], for instance
- ^ Intel currently uses IA-32 and Intel 64 (formerly EM64T or IA-32e) for x86 and x86-64 respectively. Intel have used various names to market the successive generations of the architecture over the years: the name "iAPX 86" was originally used for the 8086 product family, and likewise the 80286 was the "iAPX 286". Intel originally referred to the 80386 simply by that number (ca. 1986) before switching to the name "386 DX" (1990) and then "Intel386 DX" (1991). The 80386 or x86-32 is sometimes denoted as i386, often by GNU-Linux distributions. Likewise, AMD today prefers AMD64 over the x86-64 name it once introduced.
- ^ „Linux* Kernel Compiling”. Intel. Arhivirano iz originala 6. 6. 2007. g. Pristupljeno 4. 9. 2007.
- ^ „Intel Web page search result for "x64"”. Arhivirano iz originala 24. 10. 2007. g. Pristupljeno 4. 9. 2007.
- ^ „Birth of a Standard: The Intel 8086 Microprocessor”. Arhivirano iz originala 26. 09. 2010. g. Pristupljeno 31. 03. 2012.
- ^ The embedded processor market is populated by more than 25 different architectures, which, due to the price sensitivity, low power and hardware simplicity requirements, outnumber the x86.
- ^ „"Time and again, processor architects have looked at the inelegant x86 architecture and declared it cannot be stretched to accommodate the latest innovations," said Nathan Brookwood, principal analyst, Insight 64.”. Arhivirano iz originala 7. 3. 2012. g. Pristupljeno 22. 12. 2013.
- ^ Microsoft to End Intel Itanium Support[mrtva veza]
- ^ „Microprocessor Hall of Fame”. Intel. Arhivirano iz originala 6. 7. 2007. g. Pristupljeno 11. 8. 2007.
- ^ The NEC V20 and V30 also provided the older 8080 instruction set, allowing PCs equipped with these microprocessors to operate CP/M applications at full speed (i.e. without the need to simulate a 8080 by software).
- ^ It had a slower FPU however, which is slightly ironic as Cyrix started out as a designer of fast Floating point units for x86 processors.
- ^ 16-bit and 32-bit microprocessors were introduced during 1978 and 1985 respectively; plans for 64-bit was announced during 1999 and gradually introduced from 2003 and onwards.
- ^ That is because integer arithmetic generates carry between subsequent bits (unlike simple bitwise operations).
- ^ „DSB Switches”. Intel VTune Amplifier 2013. Intel. Arhivirano iz originala 02. 12. 2013. g. Pristupljeno 26. 8. 2013.
- ^ Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 1: Basic Architecture (PDF). Intel. mart 2013. Chapter 8.
- ^ Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 1: Basic Architecture (PDF). Intel. mart 2013. Chapter 9.
- ^ Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 1: Basic Architecture (PDF). Intel. mart 2013. Chapter 10.
- ^ Two MSRs of particular interest are SYSENTER_EIP_MSR and SYSENTER_ESP_MSR, introduced on the Pentium® II processor, which store the address of the kernel mode system service handler and corresponding kernel stack pointer. Initialized during system startup, SYSENTER_EIP_MSR and SYSENTER_ESP_MSR are used by the SYSENTER (Intel) or SYSCALL (AMD) instructions to achieve Fast System Calls, about three times faster than the software interrupt method used previously.
- ^ „Intel's Yamhill Technology: x86-64 compatible | Geek.com[[Kategorija:Botovski naslovi]]”. Arhivirano iz originala 05. 09. 2012. g. Pristupljeno 23. 12. 2013. Sukob URL—vikiveza (pomoć)
- ^ Adams, Keith; Agesen, Ole (20. 21. 200606). „A Comparison of Software and Hardware Techniques for x86 Virtualization” (PDF). Proceedings of the International Conference on Architectural Support for Programming Languages and Operating Systems, San Jose, CA, USA, 2006. ACM 1-59593-451-0/06/0010. Arhivirano iz originala (PDF) 20. 08. 2010. g. Pristupljeno 22. 12. 2006. Proverite vrednost paramet(a)ra za datum:
|date=
(pomoć)
Literatura
[uredi | uredi izvor]- Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 1: Basic Architecture (PDF). Intel. mart 2013. Chapter 10.
- Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 1: Basic Architecture (PDF). Intel. mart 2013. Chapter 8.
- Intel 64 and IA-32 Architectures Software Developer’s Manual Volume 1: Basic Architecture (PDF). Intel. mart 2013. Chapter 9.
Spoljašnje veze
[uredi | uredi izvor]- 25 godina Intel Arhitekture
- x86 CPU vodič Arhivirano na sajtu Wayback Machine (23. februar 2007)