X86

x86 on Intelin kehittämä ja valmistama suoritinarkkitehtuuri. Intel ei ole arkkitehtuurin mukaisten suorittimien ainoa valmistaja vaan myös AMD, Cyrix, NEC, Transmeta, VIA ja Zilog ovat valmistaneet x86-yhteensopivia suorittimia lisenssillä. IBM PC:n jälkeen useat henkilökohtaiset tietokoneet käyttävät x86-arkkitehtuurin tai uudemman x86-64:n mukaista suoritinta. Ennen IBM PC:tä muun muassa MOS 6502 oli laajalti käytössä mikrotietokoneissa ja varhaiseksi henkilökohtaiseksi tietokoneeksi on kutsuttu myös vuonna 1961 suunniteltua LINC-tietokonetta. == Historia == Computer Terminal Corporation (CTC) sopi kahden mikropiirivalmistajan kanssa (Intel ja Texas Instruments) ohjelmoitavan PMOS-piirin kehittämisestä Datapoint 2200 -päätettä varten. Valmistajat eivät kyenneet CTC:n aikatauluun mutta saivat pitää suunnitelmansa. Intel aloitti Intel 8008:n myynnin. 8-bittisen 8008:n pohjalta kehitettiin Intel 8080 sekä 16-bittinen Intel 8086, joka oli ensimmäinen x86-suoritin. 8086:n pohjalta kehitettiin 8-bittisellä ulkoisella väylällä varustettu Intel 8088, jonka IBM valitsi IBM PC -tietokoneeseen. Ennen IBM PC:tä markkinoilla oli "vuoden 1977 kolmikko" mikrotietokoneita: Apple II, Commodore PET ja TRS-80. Seuraavia 16-bittisiä suorittimia olivat Intel 80186 ja Intel 80286. 32-bittisen Intel 80386:n myötä käskykanta sai nimen IA-32 ja sitä seurasi Intel 80486. == Intelin alkuperäiset x86-suorittimet == 1972 Intel toi markkinoille ensimmäisen 8-bittisen mikrosuorittimen 8008. Seuraavana vuonna tuli parannettu versio 8080, joka on tunnetuin toisen sukupolven mikrosuoritin, ja 1976 edelleen parannettu versio 8085. 1978 Intel pyrki jättämään kilpailijat taakseen siirtymällä 16-bittiseen suorittimeen julkistamalla mallin 8086. 8087-liukulukulaskentayksikköä käytetään suorittimen rinnalla matemaattisiin laskutoimituksiin. Tiedonkäsittely ja -siirto tapahtuvat 16-bittisin sanoin. Suorittimen muistiavaruus on yksi megatavu, joka on jaettu 64 kilotavun segmentteihin. Tämä suoritin oli 10 kertaa nopeampi kuin 8080 ja käskykannaltaan pääosin yhteensopiva 8080-mallin kanssa. 8088 on kehitetty 8086-mallista kustannusten säästämiseksi. Siinä tiedonsiirto suorittimen ulkopuolella tapahtuu 8-bittisinä tavuina, mutta käskykannaltaan yhteensopivana suoritin tunnistaa kuitenkin kaikki 8086-suorittimen käskyt, eikä ohjelmoijan tarvitse tietää kumpi suoritin on käytössä. 8-bittinen ulkoinen dataväylä mahdollisti halvempien oheiskomponenttien käytön, mutta teki suorittimesta hitaamman. 1982 Intel toi markkinoille 16-bittisen 80186-suorittimen (ja 8-bittisen 80188-suorittimen). Tähän suorittimeen on yhdistetty toiminnot, jotka 8086-suorittimella vaativat 15 ylimääräistä mikropiiriä. Ohjelmallinen yhteensopivuus vanhempiin suorittimiin säilytettiin, mutta sen lisäksi suorittimeen sisällytettiin muutama uusi suoritinkäsky. 80187-mallia käytettiin 80186-suorittimen rinnalla matemaattisten laskutoimitusten nopeaan suorittamiseen. 1982 esitellyn 80286:n (matematiikkasuoritin 80287) ympärille IBM rakensi siihen asti kehittyneimmän tietokonemallinsa IBM PC/AT:n 1984. Tässä suorittimessa on toimintoja, jotka sallivat parannetun muistinhallinnan ja ohjelmien moniajon. Muistiavaruus on 16 megatavua ja näennäismuistia yksi gigatavu. Parannuksista huolimatta muistinhallinta oli kuitenkin edelleen hankalaa, koska suorittimen rekisterit olivat kapeampia kuin koneen osoiteväylän leveys. == IA-32 == Intel 80386 mallista lähtien Intel luopui asteittain alkuliitteestä 80 ja otti sen tilalle käyttöön kirjaimen i erottautuakseen kilpailijoistaan. IA-32 käskykanta esiteltiin 80386 mallissa, josta johtuen siihen toisinaan viitataan i386. Intel viittaa nykyään 32-bittiseen x86-arkkitehtuuriin nimellä IA-32, joka on lyhenne sanoista Intel Architecture, 32-bit. 80386 eli i386 (matematiikkasuoritin i387, ns. x87) on 80286-suorittimen laajennus, jossa rekisterien ja osoiteväylän ja laskentayksiköiden leveys on 32 bittiä. Muistiavaruus on 4 gigatavua, eikä segmentointia enää välttämättä tarvitse käyttää, mikä helpotti huomattavasti suurten ohjelmien sekä modernien käyttöjärjestelmien tekemistä suorittimelle. i486 on 386-mallin nopeampi versio. Matematiikkasuoritin on ensimmäistä kertaa integroitu samaan piiriin perussuorittimen kanssa. 486 oli ensimmäinen liukuhihnoitettu x86-suoritin, ja liukuhihnansa ansiosta se pystyi aloittamaan uusien käskyjen suorittamisen selvästi useammin kuin 80386, jossa käskyjen välillä meni aina useampi kellojakso. Intelin seuraavan sukupolven suorittimien tuotemerkiksi tuli Pentium. Pentium-suorittimet ovat ohjelmallisesti yhteensopivia alkuperäisen 8086-suorittimen kanssa, mutta lisäksi on olemassa joukko uusia ohjelmakäskyjä. == Tekniikkaa == Yhteisiä piirteitä x86-arkkitehtuurin mukaisessa suorittimessa ovat olleet peruskäskykanta, rekisterit ja segmentoitu muistiarkkitehtuuri. Suunnittelussa on ollut periaatteena, että vanhemman sukupolven suorittimelle kirjoitetut ohjelmat toimivat uudemmissakin suorittimissa sellaisenaan. 16-bittiset mallit käyttivät real mode -tilaa, jonka jälkeen 80386:n myötä tuli 32-bittinen protected mode -tila. Uudemmissa 64-bittisissä suorittimissa on long mode -tila. Käskysarja on CISC-tyypinen. Käskyissä on useita vaihtuvamittaisia sekä valinnaisia kenttiä ja yhden käskyn pituus voi vaihdella yhdestä kuuteentoista tavuun. CISC-käskyt pilkotaan RISC- tyyppisiin mikro-operaatioihin suuremman suorituskyvyn ja hyötysuhteen vuoksi. Siirtymisessä 64-bittiseen AMD64-arkkitehtuuriin segmentoidusta muistista on luovuttu muistisivujen käytön johdosta. Samalla yleiskäyttöisten rekisterien määrä on noussut kahdeksasta kuuteentoista ja suhteelliset viittaukset ovat tulleet mukaan, mikä helpottaa osoiteriippumattoman ohjelmakoodin tuottamista. Intel on käyttänyt x86-sarjan P6-suorittimista lähtien (1995) mikrokoodia, joka voidaan päivittää ohjelmallisesti suorittimen virheiden korjaamiseen. AMD:llä on ollut tukea K7-mikroarkkitehtuurista lähtien (1999) ja VIA:lla VIA Nano -malleista lähtien (2008). Käyttöjärjestelmät kuten Linux, Solaris ja Windows sisältävät ajuritukea mikrokoodin päivittämiseen ilman BIOSin päivitystä. P6-suorittimissa oli pieni SRAM, johon mahtui enintään 60 mikrokäskyä. Kaikkia x86-käskykannan komennoista ei toteutettu mikrokäskyillä. Suorittimien mikrokoodi on ollut oikeuskiistan aiheena NECin ja Intelin välillä. == x86-64 == === AMD64 === AMD:n suunnittelemista laajennuksista uutisoitiin alkuvuodesta 2002. AMD:n ehdotuksen myötä laajennuksia kutsuttiin termillä x86-64, joka sisälsi yhteensopivuuden olemassa olevian 32-bittisien ohjelmistojen kanssa. AMD:n laajennukset kiinnostivat laitevalmistajia huomattavasti kesällä 2002, kun AMD lupasi taaksepäin yhteensopivuutta olemassa olevien ohjelmistojen kanssa sekä uusien laajennuksien tarvitsevan vain 2-3 prosenttia enemmän piisirun pinta-alaa. Samaan Intel oli ongelmissa IA-64 (Itanium) -arkkitehtuurin kanssa. Vastineena Intel aloitti oman Yamhill- projektinsa 64-bittisien laajennuksien lisäämiseen IA-32 käskykantaa käyttävään suorittimeen. AMD julkaisi 64-bittisen Athlon 64:n syyskuussa 2003. AMD:n 64-bittiset laajennukset lisäsivät sekä yleiskäyttöisiä rekistereitä että SSE/SSE2-laajennuksien rekistereiden määrää ja laajensivat osoiteavaruutta. Vuoden 2003 artikkeleissa arkkitehtuuria kutsuttiin jo nimellä AMD64. AMD:n ratkaisulla 64-bittinen suoritin voi ajaa sekä 32- että 64-bittisiä ohjelmia ja käyttöjärjestelmiä. AMD:n K8 prosessoriarkkitehtuuri (palvelinversio nimellä AMD Opteron) toi mukanaan laajennuksia X86-arkkitehtuuriin.http://www.prosessori.fi/uutiset/uutinen2.asp?id=33156 K8 laajensi X86-arkkitehtuurin 64-bittiseksi AMD64-nimellä tunnetulla arkkitehtuurilla. AMD:n prosessoreissa Athlon 64 -mallista lähtien lähtien northbridge muistiohjain on ollut integroituna CPU:lle käyttäen HyperTransport-väylää (ent. Lightning Data Transport, LDT). === EM64T === Intelin Yamhill-projekti tähtäsi lisäämään 64-bittisen laajennuksen IA32-käskykantaa käyttäviin suorittimiin. Intel kutsui tätä Intel 64 -arkkitehtuuriksi ja EMT64-arkkitehtuuriksi. EM64T (Extended Memory 64 Technology) oli Intelin käyttämä termi 64-bittiselle laajennukselle. Intel myöhemmin muutti käskykantaa, jolloin siitä tuli yhteensopiva AMD64-laajennuksen kanssa. Intelin toteutuksesta puuttuu muutamia osia, kuten AMD:n 3DNow!-käskyt, liukulukutilan vähennetty tallennus. Lisäksi Intelillä on omia ominaisuuksia, kuten prosessorin sarjanumero ja MONITOR- ja MWAIT-käskyt. Suorittimissa on joitain eroja, kuten tyhjennetäänkö rekisterien ylimmät bitit, kun vain alimpia käytetään. Varhaisesti Intelin toteutuksesta puuttui myös NX-bitin tuki ja muistiavaruus oli rajoitettu 236 tavuun, kun nykyisissä se on 240 tavua.https://www.opsinventor.com/whats-the-difference-between- amd64-and-intel-em64t/ Intel julkaisi kesällä 2004 Nocona-koodinimellä tunnetun Xeon-prosessorin, joka käytti EMT64-laajennuksia. Vuonna 2005 julkaistussa Pentium 4 -mallissa Intel lisäsi tuen AMD:n käskykannalle, mutta käytti arkkitehtuurista usein kryptisiä nimityksiä kuten IA-32e. === Muut valmistajat === AMD:n ja Intelin lisäksi VIA valmisti 64-bittistä x86-64 suoritinta (koodinimi Isaiah), joka julkaistiin vuonna 2008. == Palvelinmallit == AMD:n palvelinmallisarja tunnetaan nimellä AMD Opteron. Opteron-mallit ottivat käyttöön HyperTransport-väylän vuonna 2003 korvaten aiemman suoritinväylä-teknologian. Intelin mallisarja palvelimiin tunnetaan nimellä Xeon. Xeon-malleissa aiempi suoritinväylä on korvattu QuickPath-väylällä vuonna 2009. == Muiden valmistajien x86-suorittimet == Cyrix suunnitteli alun perin Intel-yhteensopivan mutta nopeamman matematiikkaprosessorin, mutta myöhemmin alkoi suunnitella kokonaisia suorittimia. 486- ja Pentium- aikakausina Cyrix suunnitteli ja valmistutti suorittimia, jotka olivat huomattavasti Intelin vastaavia halvempia, mutta vain hiukan hitaampia. Cyrix poistui markkinoilta kun VIA osti sen. Tunnetuin Cyrix-prosessori oli Cyrix 6x86 vuodelta 1995. Myös VIA valmistaa pienen sähkönkulutuksen suorittimia, joissa on x86-arkkitehtuuri. VIA on tunnetumpi henkilökohtaisten tietokoneiden suorittimien ohjeispiirien valmistajana. VIA:n prosessorit perustuvat pääosin IDT:n Winchip-piireihin, VIA:n ostettua IDT:n Centaur-nimisen prosessoriosaston. AMD osti 1996 x86-arkkitehtuurin mukaisia suorittimia valmistaneen NexGen-yritysen. Tunnetuin NexGen-yrityksen suoritin oli Nx586 vuodelta 1995. Jo 1970-luvulla Intelin kanssa kilpaili Zilog-nimisen yrityksen valmistama 8080 suorittimen parannettu versio Z80. Zilog myy yhä samaa prosessoria pienten sulautettujen sovellusten tarpeisiin. NEC valmisti aikoinaan 8088- ja 8086-yhteensopivia suorittimia, mm. nimillä V20 ja V30. NEC:in valmistamat mallit olivat n. 30 % Intelin vastaavia nopeampia. Transmeta kehitti Crusoe- ja Efficeon-prosessorit, joissa painotettiin aiempaa pienempää virrankulutusta. AMD on valmistanut x86-yhteensopivia suorittimia pitkän aikaa, mm. AMD Am386 (1991) alkaen. == Ominaisuudet == 32-bittinen x86 (80386 ja uudemmat) sisältävät kahdeksan yleiskäyttöistä 32-bittistä rekisteriä, joiden nimet ovat pääosin historiallisista syistä johtuvia. Kaksi rekisteriä on varattu erityiskäyttöön: pino-osoitin (`ESP`) ja perusosoitin (`EBP`). Rekistereistä voidaan osoittaa osaan, esimerkiksi `EAX` rekisterin kahta vähiten merkitsevää tavua voidaan käyttää 16-bittisenä rekisterinä nimeltä `AX` `AX` rekisterin vähemmän merkitsevää tavua voidaan käyttää 8-bittisellä rekisterillä nimeltä `AL` ja ylempää tavua rekisterillä `AH`. Alirekisterit ovat peräisin vanhemmasta 16-bittisestä käskykannasta. == Käskylaajennuksia == Yleisesti tunnettuja SIMD-tyyppisiä käskykantalaajennuksia ovat: * MMX * 3DNow * SSE (SSE2, SSE3, SSE4) * AVX (AVX2, AVX512, AVX10) AMD:n FMA3 () lisää kolmen operandin käskylaajennuksia tyypillisten kahden operandin käskyjen rinnalle. Lisäksi on kehitetty XOP-, FMA4- ja F16C- (ent. CVT16) laajennoksia. Lisäksi nykyisissä prosessoreissa on virtualisointitekniikat (AMD-V, VT-x, VIA VT). Useissa AMD-prosessoreissa on tuki IOMMU-toiminnolle, joka Intelillä sisältyy VT-d-toimintoon. Tuki eri laajennuksille vaihtelee prosessorimallin ja valmistajan mukaan. == Patentit == Intel on varoittanut yhtiöitä, jotka suunnittelevat x86-käskykannan emulointia käskykantaan liittyvistä patenteista. ==Lähteet== * * === Viitteet === ==Kirjallisuutta== * == Aiheesta muualla == * x86 Assembly Guide * X86 Opcode and Instruction Reference * Intelin suorittimet * AMD:n suorittimet * VIA:n suorittimet * Zilogin suorittimet Luokka:Suoritinarkkitehtuurit Luokka:Seulonnan keskeiset artikkelit