Intel X86 arkkitehtuuri

Wikiopistosta
Intel 8086

Intel X86 on Intelin, pääasiassa kuluttajatietokoneisiin kehittämä suoritinarkkitehtuuri, joka perustuu Intel 8086- prosessoriin ja sen Intel 8088 -versioon. 8086- prosessori julkaistiin vuonna 1978 täysin 16-bittisenä laajennuksena Intelin 8-bittisestä 8080 mikroprosessorista. Nimen "x86" alkuperä on useat 86-loppuiset suorittimet, jotka seurasivat ensimmäistä 8086-suoritinta.

Rekisterit[muokkaa]

x86-arkkitehtuurin prosessori sisältävät rekistereitä, jotka toimivat muistina ja ovat hierarkiassa päämuistin ja välimuistin yläpuolella.

16-bittiset[muokkaa]

Alkuperäiset Intel 8086 ja 8088 prosessorit sisälsivät 14kpl 16-bitin rekisteriä. Näihin lisättiin myöhemmin matematiikkasuoritin (floating-point coprosessor) nimeltä 8087. Se lisäsi 8kpl lisärekisteriä jotka pystyivät käsittelemään liukulukuja.[1]

32-bittiset[muokkaa]

Vuonna 1985 julkaistu Intel 80386 sisälsi 32-bitin prosessorin. Yleisrekisterit, tilarekisterit, käskyosoittimet ja osoiterekisterit laajennettiin 32-bittiseksi. Suuremmalla määrällä rekistereitä, käskyillä ja operandeilla konekieltä pystyttiin laajentamaan.[1]

64-bittiset[muokkaa]

Alkaen AMD:n Opteron prosessorista, x86 arkkitehtuuri laajensi 32-bittisistä rekistereistä 64-bittisiin rekistereihin samalla tavalla kuin aiemmin oltiin siirrytty 16-bittisestä 32-bittisiin rekistereihin.[1]

Prosessorin rekisterirakenne sisältää seuraavanlaisia rekistereitä:

Käyttäjälle näkyvät rekisterit:[muokkaa]

Käyttäjä voi ohjelmoida suoritinta tätä rekisteriä käyttämällä ja optimoida rekisterien käyttöä.

  • Yleisrekisterit (8kpl 32-bitin rekisteriä) voidaan ohjelmoida käyttämään kaiken tyyppisiä x86 käskyjä. Ne voivat myös sisältää operandeja osoitteiden laskemiseen. Lisäksi ECX, ESI ja EDI rekistereiden sisältöä voidaan käyttää operandina suoraan, ilman erillistä viittausta. 64-bittisessä järjestelmässä, rekistereitä on 16kpl.
  • Osoiterekisterit sisältävät, segmenttivalitsimen (6kpl 16-bitin rekisteriä), indeksirekisterin ja pino-osoittimen
  • Tilarekisterit sisältävät 32-bitin ”lippubittejä”(EFLAGS), jotka kuvaavat virhetilanteita, tiloja ja vertailujen tuloksia. 64-bittisesä järjestelmässä "lippubittejä" kutsutaan nimellä (RFLAGS).
  • Käskyosoitin (PC), sisältää konekäskyn osoitteen, josta seuraava käsky alkaa.[2]

Ohjaus ja status rekisterit:[muokkaa]

Ohjausyksikkö ohjaa tätä kautta prosessin toimintoja ja käyttöjärjestelmän ohjelmat hallitsevat suoritettavia ohjelmia.

Nämä rekisterit eivät aina ole samoissa kategorioissa. Esimerkiksi x86-arkitehtuurin prosessoreissa käskyosoitin (PC) on käyttäjälle näkyvissä.[2]

x86-arkkitehtuuri käyttää neljää (CR0 - CR4) ohjausrekisteriä ohjatakseen prosessorin eri toimintoja. Kaikki rekisterit CR0 rekisteriä lukuun ottamatta ovat joko 32-bittisiä tai 64-bittisiä mikäli järjestelmä tukee x86 64-bitin arkkitehtuuria. CR0 rekisteri sisältää järjestelmän ohjaukseen tarvittavia "lippubittejä".[2]

MMX rekisterit (8kpl 64-bitin rekisteriä) ovat Intelin luomia lisärekistereitä. Rekisterit ovat SIMD-mallia (Single Program, Multiple Data), jossa sama komento suoritetaan useammalle arvolle yhtäaikaisesti. SIMD-mallissa dataa käsitellään rinnakkaisesti.[2]

Data ja käskyt[muokkaa]

x86-arkkitehtuurin prosessorit voivat käsitellä 8 (byte, suom. tavu), 16 (word, suom. sana), 32 (doubleword), 64 (quadword), and 128 (double quadword) bitin pituisia tietotyyppejä. Tämän lisäksi x86 tukee hyvin laajaa joukkoa muita tietotyyppejä, joita ymmärtävät ja operoivat vain tietyt käskyt. x86-arkkitehtuurissa data tallennetaan little-endian -tyliin, eli vähiten merkitsevästä tavusta alkaen. [2] Taulukossa 1 näkyvät x86-arkkitehtuurin prosessorien hyödyntämät tietotyypit.

x86 Tietotyypit
Data Type Description
General Byte, word (16 bits), doubleword (32 bits), quadword (64 bits), and double

quadword (128 bits) locations with arbitrary binary contents.

Integer A signed binary value contained in a byte, word, or doubleword, using twos

complement representation.

Ordinal An unsigned integer contained in a byte, word, or doubleword.
Unpacked binary coded

decimal (BCD)

A representation of a BCD digit in the range 0 through 9, with one digit in

each byte.

Packed BCD Packed byte representation of two BCD digits; value in the range 0 to 99.
Near pointer A 16-bit, 32-bit, or 64-bit effective address that represents the offset within a

segment. Used for all pointers in a nonsegmented memory and for references

within a segment in a segmented memory.

Far pointer A logical address consisting of a 16-bit segment selector and an offset of 16,

32, or 64 bits. Far pointers are used for memory references in a segmented

memory model where the identity of a segment being accessed must be

specified explicitly.

Bit field A contiguous sequence of bits in which the position of each bit is considered

as an independent unit. A bit string can begin at any bit position of any byte

and can contain up to 32 bits.

Bit string A contiguous sequence of bits, containing from zero to 223 - 1 bits.
Byte string A contiguous sequence of bytes, words, or doublewords, containing from

zero to 223 - 1 bytes.

Floating point
Packed SIMD (single

instruction, multiple data)

Packed 64-bit and 128-bit data types.

Taulukko 1. x86 tietotyypit. [2]

Perinteiselle x86-arkkitehtuurille on tunnusomaista laaja suoritinkäskyjen joukko, eli ne ovat CISC-prosessoreita, joissa on painotettu taaksepäin yhteensopivuutta. [3] Suurin osa käskyistä on tavallisia, myös eri käskyjoukoista löytyviä, mutta jotkin käskytyypit ovat vain x86-arkkitehtuurille luotuja. Tarkoituksena on ollut luoda työkalut, joilla kääntäjien luojat voisivat mahdollisimman optimoituja käännöksiä korkeamman tason kielillä ohjelmoiduista ohjelmista. [2]

Käskylaajennuksia[muokkaa]

MMX

MMX on laajennuskäskyjoukko, joiden tarkoituksena on nopeuttaa prosessorin toimintaa äänen- ja kuvankäsittelyä vaativissa tehtävissä. [2] MMX-käskyt käsittelevät dataa SIMD (single-instruction, multiple-data) -tyylillä, jossa sama operaatio voidaan toteuttaa saman kellosyklin aikana useammalle datalle.[4]

SSE

Kun MMX-laajennus tehosti prosessorin toimintaa esittelemällä käskyjä, joiden avulla sama operaatio voidaan tuottaa usean rekisterin sisältämälle kokonaislukudatalle samaan aikaan, niin SSE (streaming SIMD extensions) -laajennus kehitti tätä edelleen niin että sama operaatio voidaan toteuttaa myös liukuluvuille.[4]

Historiaa[muokkaa]

Varhaiset vaiheet[muokkaa]

1974

Intel julkaisee 8-bittisen 8080 prosessorin, jossa on 4500 transistoria ja se on 10 kertaa tehokkaampi kuin intelin aikaisempi 8008 prosessori.

1976

Steve Jobs ja Steve Wozniak tuo markkinoille Apple II tietokoneen, joka käyttää 8-bittistä 6502 prosessoria MOS Technologyltä. Tämä oli suuri takaisku Intelille ja X86 arkkitehtuurille.

1978

Intel tuo markkinoille 16-bittisen 8086 mikroprosessorin, josta tuli uusi standardi alalle.

1979

Intel tuo markkinoille 8088 prosessorin, joka on halvempi versio aikaisemmasta 8086 prosessorista.

1981

IBM valitsee Intelin 8088 prosessorin uuteen IBM PC:hen. Tämä oli Intelille todella iso "voitto"

1982 - 1984

Intel julkaisi vuonna 1982 16-bittisen 80286 prosessorin, joka sisälsi 134,000 transistoria. Tätä prosessoria käytettiin uudessa toisen sukupolven IBM PC-AT tietokoneessa, josta käytännössä tuli PC standardi melkein kymmeneksi vuodeksi. IBM kehitti PC-AT -tietokoneen vuonna 1984.

Muut valmistajat[muokkaa]

Intel ei suinkaan ollut ainoa yritys joka suunnitteli ja valmisti x86 prosessoreita kuluttajien käyttöön. Eri aikoihin yritykset kuten IBM, AMD, Cyrix ja NEC alkoivat suunnitelemaan ja valmistamaan x86 prosessoreita. Nämä toteutukset ovat harvoin vain yksinkertaisia kopioita toisistaan, mutta niissä usein käytetään erilaisia ratkaisuja elektronisella ja fyysisellä tasolla, sekä erilaisia sisäisiä mikroarkkitehtuureita. Varhaisimmat yhteensopivat mikroprosessorit olivat luonnollisesti 16-bittisiä, sillä 32-bittiset mallit kehitettiin paljon myöhemmin.

AMD valmisti ensimmäisen x86-yhteensopivan prosessorinsa AMD Am386 vuonna 1991, ja osti vuonna 1996 x86-arkkitehtuurin mukaisia prosessoreita valmistaneen NexGen-yrityksen. AMD on siis valmistanut x86-yhteensopivia prosessoreita jo pitkän aikaa.

Suorittimia[muokkaa]

Ensimmäinen sukupolvi[muokkaa]

8086[muokkaa]

Valmistettu 1978 - 1990.
Ensimmäinen 16-bittinen Intelin X86-sarjan suoritin.
Viivaleveys 3µm, kellotaajuus 5-10MHz. Käskykanta x86-16.

80186[muokkaa]

Valmistettu 1986 - 2007.
Kellotaajuus 6-25MHz, käskykanta x86-16.
Lisätty muutamia uusia käskyjä vrt. 8086 suorittimeen, muun muassa enter/leave, pusha/popa, bound ja ins/outs.

Toinen sukupolvi[muokkaa]

80286[muokkaa]

Valmistettu 1982 - 1990.
Kellotaajuus 6-25MHz, käskykanta x86-16.
80286 suoritin suunniteltiin moniajoa varten, järjestelmiin joissa on useita eri käyttäjiä.
Suoritin oli noin 100% nopeampi per kellosykli, kuin edeltäjänsä useissa sovelluksissa.
80286 sisälsi kaikkien edellisten sukupolvien käskyt. Sen lisäksi siinä oli uutena ARPL, CLTS, LAR, LGDT, LIDT, LLDT, LMSW, LSL, LTR, SGDT, SIDT, SLDT, SMSW, STR, VERR, sekä VERW suojatun tilan käskyt.
Suoritin kykeni hyödyntämään jopa 16MB RAM muistia.

Kolmas sukupolvi[muokkaa]

80386[muokkaa]

Valmistettu 1985 - 2007.
Kellotaajuus 12-40MHz, viivaleveys 1,5µm - 1µm, käskykanta x86 (IA32).
Ensimmäinen 32-bittinen Intelin suoritin.

Neljäs sukupolvi[muokkaa]

80486[muokkaa]

Valmistettu 1989 - 2007.
Kellotaajuus 16 - 100MHz, viivaleveys 1µm - 0,6µm, käskykanta x86 (sisältäen x87 liukulukuyksikön).

Viides sukupolvi[muokkaa]

Pentium[muokkaa]

Julkaistiin 1993. Ensimmäisen julkaistun prosessorin koodimini oli P5. Prosessoria alettiin valmistamaan 0.8 mikrometrin prosessilla.
Kellotaajuudet olivat 66 ja 60 megahertsiä.
Prosessori oli teknisesti 32-bittinen, mutta uusi arkkitehtuuri mahdollisti datan käsittelemisen tuplasti nopeammin.
Arkkitehtuuri erosi huomattavasti muista Pentium prosessoreista.

Kuudes sukupolvi[muokkaa]

Kuudes sukupolvi esitteli L2 ja L3 välimuistit, sekä SSE, MMX+, 3DNow! ja 3DNow!+ käskylaajennokset.

Suorittimia muun muassa:
Celeron
Pentium Pro
Pentium II
Pentium II Xeon
Pentium III
Pentium III Xeon

Seitsemäs sukupolvi[muokkaa]

Seitsemännen sukupolven mukana tuli SSE2 käskylaajennos, sekä HyperThreading monisäikeistys.
HyperThreading jakoi yhden fyysisen prosessoriytimen kahdeksi virtuaaliseksi ytimeksi, mahdollistaen näin tehokkaamman ohjelmien moniajon.

Seitsemännen sukupolven suorittimia on muun muassa:
Pentium 5
Pentium M
Pentium Dual Core
Core

Kahdeksas sukupolvi (x86-64)[muokkaa]

Kahdeksas sukupolvi esitteli 64-bittiset suorittimet.

Core 2
Pentium Dual Core
Celeron Dual Core
Atom
Core i3 / i5 / i7 / i9
...

x86-64[muokkaa]

Intelin 64 bittisistä x86 prosesoreista käytetään nimitystä Intel 64.[5]

Historiaa[muokkaa]

2000-luvun vaihteessa Intel käytti prosessoreissaan pääasiassa 32-bittistä x86 arkkitehtuuria.
Markkinoilla oli siihen aikaan käytössä huomattavasti tehokkaampia 64-bittisiä suorittimia, joten intel päätti esitellä oman 64-bittisen arkkitehtuurin (IA-64) Itanum prosessorissaan.
IA-64 ei suoraan tukenut x86 mallia, mutta pystyi emuloimaan sitä. Intelin yritys 64-bittisten prosessorien markkinoille kuitenkin epäonnistui, sillä IA-64 ei tukenut x86 ohjelmien käskyjä tarpeeksi hyvin, jota suuri osa ohjelmista käytti.
IA-64 ei siis saavuttanut suurta suosiota, sillä se rikkoi backward compatibilityä.[1]

Sillä välin AMD julkaisi ensimmäisen 64-bittisen x86 prosessorinsa joka tuki hyvin myös 32 ja 12 bittisiä ohjelmia Long modensa avulla.

Intel päätti siis julkaista oman 64-bittisen x86 prosessorinsa 4. heinäkuuta 2004 : Intel Pentium 4 "Prescott". [1]


Palvelinmallit[muokkaa]

Intelin työasema- ja palvelinkäyttöön tarkoitetut suorittimet tunnetaan nimellä Intel Xeon. Vuonna 2013 80% maailman supertietokoneista käytti Xeon-suorittimia.

Pentium II Xeon

Ensimmäinen Xeon-suoritin. Julkaistiin vuonna 1998. Se pohjautui Pentium II-suorittimeen, mutta käytti kalliimpia täydellä nopeudella toimivia L2-välimuistipiirejä, joiden koko oli 512 kilotavua, 1 megatavu tai 2 megatavua.

Pentium III Xeon

Toisen sukupolven Xeon-suoritin julkaistiin vuonna 1999. Ensimmäinen versio Tanner erosi Pentium II:sta vain siten, että SSE-käskyt oli lisätty ja välimuistiohjainta oli parannettu. Toinen versio Cascades oli varustettu uudemmalla 0.18um:n valmistustekniikalla, käytti 133 megahertsin väylää ja sisälti 256 kilotavua L2-välimuistia itse prosessoripiirillä. Myöhemmin tuotiin markkinoille 1 ja 2 megatavun muistilla varustetut ja useamman suorittimen kokoonpanoissa toimivat versiot, joissa oli väylän nopeus oli vain 100 megahertsiä.

Xeon ja Xeon MP

Kolmannen sukupolven Xeon-suoritin julkaistiin vuonna 2001, ja nimi muuttui Pentium Xeonista pelkäksi Xeoniksi. Ensimmäinen versio Foster ei menestynyt markkinoilla kovin hyvin, ja 2002 Intel julkaisikin 130 nanometrin prosessilla valmistetun Prestonian. Prestoniassa oli 512 kilotavun L2-välimuisti ja se tuki Hyper-Threading-tekniikkaa. Prestoniasta tuli nopeasti suosituin palvelinsuoritin, kun sen väylänopeus nostettiin 533 megahertsiin.

Vuonna 2004 julkaistiin 64-bittiset Xeon ja Xeon MP.

Woodcrest

Vuonna 2006 julkaistiin Woodcrest-ytimeen pohjautuvat tuplaytimiset Xeon-suorittimet, jotka pohjautuivat uuteen, yhdeksännen sukupolven x86-suoritinarkkitehtuuriin nimeltään Core.

Clovertown

Clovertown on neljäytiminen versio Woodcrestistä.

Nehalem-pohjaiset Xeonit

Nehalem-ytimeen pohjautuvia Xeon-suorittimia olivat mm. Lynnfield, Clarkdale, Bloomfield ja Gainestown. Nämä suorittimet tukivat mm. DDR3-keskusmuistia.

Sandy Bridge & Ivy Bridge

Jopa 10-ytimisiä palvelinsuorittimia ja 3,5 gigahertsin kellotaajuudet.

Haswell-pohjaiset Xeonit

2013 julkaistiin ensimmäinen Haswell-pohjainen Xeon-suoritin, Haswell-WS, 2014 Haswell-EP ja 2015 Haswell-EX.

Skylake-pohjaiset Xeonit

Julkaistiin 2015.

Kaby Lake-pohjaiset Xeonit

Tammikuussa 2017 julkaistu Kaby Lake-pohjainen Xeon käytti samaa LGA1151-pistoketta kuin edeltäjänsä, ja erona olikin lähinnä parantunut energiatehokkuus ja lisääntynyt muistin määrä.

Lähteet[muokkaa]

Wikipedia, Xeon "Wolfdale-DP"

Gary Anthes (June 5, 2008) "Timeline: A brief history of the x86 microprocessor"

Benj Edwards (June 8, 2018) "Birth of a standard: The Intel 8086 microprocessor turns 40 today"

Daniel Robinson (March 22, 2013) "Intel's Pentium launched 20 years ago today"

Viitteet[muokkaa]

  1. 1,0 1,1 1,2 1,3 1,4 https://en.wikipedia.org/wiki/X86
  2. 2,0 2,1 2,2 2,3 2,4 2,5 2,6 2,7 Stallings, William, 2015, "Computer Organization and Architecture" (10th Edition), Hoboken NJ, Pearson Education, Inc.
  3. Pulkkinen, Matti P., "Ohjelmoijan on ymmärrettävä 64-bittisen suorittimen erot, MicroPC" 5 / 2005
  4. 4,0 4,1 Intel® 64 and IA-32 Architectures Software Developer’s Manual Volume 1: Basic Architecture https://www.intel.com/content/dam/www/public/us/en/documents/manuals/64-ia-32-architectures-software-developer-vol-1-manual.pdf
  5. https://en.wikipedia.org/wiki/X86-64#Intel_64