Tavujärjestys

Wikipediasta
Siirry navigaatioon Siirry hakuun
Endian example

Tavujärjestys (engl. byte order, myös engl. endianness) tietokoneessa tarkoittaa sitä, missä järjestyksessä tietokoneen suoritin käsittelee suurempia kuin yhden tavun pituisia kokonaisuuksia.

Esimerkiksi neljästä 8-bittisestä tavusta muodostuva 32-bittinen sana voidaan tallentaa tietokoneen muistiin useilla eri tavoilla. Asian havainnollistamiseksi eri tavuihin kuuluvat bitit on tässä merkitty kirjaimin A–D, joista A edustaa suurinta eli eniten merkitsevää tavua.

Unix-käyttöjärjestelmä siirrettiin PDP-11-tietokoneilta IBM Series 1 -minitietokoneille. Sananpituus oli molemmissa sama, mutta tavut vaihtoivat paikkaansa. Käyttöjärjestelmän käynnistyttyä se ilmoitti olevansa NUXI, jonka vuoksi ongelmaa on kutsuttu myös NUXI-ongelmaksi.[1]

Intel 8008-suorittimen tavujärjestys oli little endian eli vähemmän merkityksellinen tavu oli ensin: syynä tähän oli JUMP-käskyn muoto yhteensopivana Datapoint 2200:n kanssa.[2] Tämä on vaikuttanut myöhempään x86-arkkitehtuuriin.[2]

Danny Cohen tunnustetaan termien big endian ja little endian esittämisestä artikkelissaan On Holy Wars and a Plea for Peace.[3][4]

Big endian -muodossa (laskeva tavujärjestys) sanan merkitsevimmät tavut tallentuvat ensin eli alempiin muistiosoitteisiin:

AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDD

Tämä vastaa tavallisesti käytettyjä lukujärjestelmiä, joissa suurin eli merkitsevin arvo ilmoitetaan ensimmäiseksi (esimerkiksi luvussa 256 numero 2 edustaa satoja, joten se on merkitsevämpi kuin kymmeniä edustava numero 5, joka puolestaan merkitsee enemmän kuin ykkösiä edustava numero 6). Tätä tavujärjestystä käyttävät monien tietokonevalmistajien suorittimet, ja se on myös Internetissä käytettävän IP-protokollan otsikkotiedoissa käytetty tavujärjestys (engl. network byte order).

Little endian

[muokkaa | muokkaa wikitekstiä]

Little endian -muodossa (nouseva tavujärjestys) sanan vähiten merkitsevät tavut tallentuvat ensin:

DDDDDDDDCCCCCCCCBBBBBBBBAAAAAAAA

Tämän voi rinnastaa tyypilliseen suomalaiseen tapaan esittää päivämäärät järjestyksessä, jossa ensin ilmoitetaan päivä, sitten kuukausi ja lopulta vuosiluku. Tällaista tavujärjestystä käyttävät Intelin suorittimet, PDP-11, VAX ja useat sulautetut järjestelmät.

Tavujärjestys on oleellista tietää käsiteltäessä binaarimuodossa olevia tiedostoja. Unicoden myötä sama tarve on tullut esiin myös tekstitiedostoissa.

Bi-endian suoritin voi toimia kummassakin tilassa. Tietyissä suorittimissa tämä on mahdollista asettaa suorittimen resetoinnin yhteydessä. Esimerkki bi-endian-suorittimesta on ARM.[5]

ISO 9660 -tiedostojärjestelmässä useampitavuiset arvot ovat tallennettu kummassakin (little, big) tavujärjestyksessä, joten sitä voi kutsua myös bi-endian-tavujärjestykseksi.[6][7]

Middle-endian

[muokkaa | muokkaa wikitekstiä]

Middle-endian on yleistermi muille vaihtoehdoille. Esimerkiksi PDP-11:n ohjelmakääntäjä tallentaa 32-bittiset arvot vaihtamalla 16-bittisten puoliskojen järjestystä ennakoidusta little-endian muodosta. Tälle on myös nimitys PDP-endian.[8] Esimerkiksi jos little- ja big-endian muodoissa "ABCD" ja "DCBA" ovat normaaleja, PDP-muodossa arvo olisi "BADC".[8]

  1. Libes, Don; Ressler, Sandy: Life With UNIX, s. 9−10. Prentice Hall, 1989.
  2. a b Stanley Mazor: The History of the Microcomputer-Invention and Evolution (PDF) citeseerx.ist.psu.edu. Viitattu 24.10.2021. (englanniksi)
  3. Danny Cohen internethalloffame.org. Viitattu 25.10.2021. (englanniksi)
  4. Danny Cohen: ON HOLY WARS AND A PLEA FOR PEACE rfc-editor.org. 1.4.1980. Viitattu 25.10.2021. (englanniksi)
  5. Memory endianness ARM. Viitattu 1.2.2017.
  6. ISO Disk Image File Format Sustainability of Digital Formats Planning for Library of Congress Collections. Viitattu 1.2.2017.
  7. The ISO 9660 File System users.telenet.be. Arkistoitu 3.3.2017. Viitattu 1.2.2017.
  8. a b PDP-endian en.chys.info. Arkistoitu 29.10.2016. Viitattu 1.2.2017.

Aiheesta muualla

[muokkaa | muokkaa wikitekstiä]