Intel X86 arkkitehtuuri
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
muokkaax86-arkkitehtuurin prosessori sisältävät rekistereitä, jotka toimivat muistina ja ovat hierarkiassa päämuistin ja välimuistin yläpuolella.
16-bittiset
muokkaaAlkuperä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
muokkaaVuonna 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
muokkaaAlkaen 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:
muokkaaKä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:
muokkaaOhjausyksikkö 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
muokkaax86-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.
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
muokkaaMMX
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
muokkaaVarhaiset vaiheet
muokkaa1974
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
muokkaaIntel 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
muokkaaEnsimmäinen sukupolvi
muokkaa8086
muokkaaValmistettu 1978 - 1990.
Ensimmäinen 16-bittinen Intelin X86-sarjan suoritin.
Viivaleveys 3µm, kellotaajuus 5-10MHz. Käskykanta x86-16.
80186
muokkaaValmistettu 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
muokkaa80286
muokkaaValmistettu 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
muokkaa80386
muokkaaValmistettu 1985 - 2007.
Kellotaajuus 12-40MHz, viivaleveys 1,5µm - 1µm, käskykanta x86 (IA32).
Ensimmäinen 32-bittinen Intelin suoritin.
Neljäs sukupolvi
muokkaa80486
muokkaaValmistettu 1989 - 2007.
Kellotaajuus 16 - 100MHz, viivaleveys 1µm - 0,6µm, käskykanta x86 (sisältäen x87 liukulukuyksikön).
Viides sukupolvi
muokkaaPentium
muokkaaJulkaistiin 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
muokkaaKuudes 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
muokkaaSeitsemä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)
muokkaaKahdeksas sukupolvi esitteli 64-bittiset suorittimet.
Core 2
Pentium Dual Core
Celeron Dual Core
Atom
Core i3 / i5 / i7 / i9
...
x86-64
muokkaaIntelin 64 bittisistä x86 prosesoreista käytetään nimitystä Intel 64.[5]
Historiaa
muokkaa2000-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
muokkaaIntelin 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
muokkaaWikipedia, 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,0 1,1 1,2 1,3 1,4 https://en.wikipedia.org/wiki/X86
- ↑ 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.
- ↑ Pulkkinen, Matti P., "Ohjelmoijan on ymmärrettävä 64-bittisen suorittimen erot, MicroPC" 5 / 2005
- ↑ 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
- ↑ https://en.wikipedia.org/wiki/X86-64#Intel_64