Tiedon ta:rkistus ja muisti

Samankaltaiset tiedostot
Tiedon esitysmuodot. Luento 6 (verkkoluento 6) Lukujärjestelmät Kokonaisluvut, liukuluvut Merkit, merkkijonot Äänet, kuvat, muu tieto

Tiedon esitysmuodot Tiedon muuttumattomuuden tarkistus Järjestelmän sisäinen muisti

Luento 3 (verkkoluento 3) Ttk-91 konekielinen ohjelmointi. Ohjelman esitysmuoto Konekielinen ohjelmointi ttk-91:llä (Titokone, TitoTrainer)

Teemun juustokakku Rekisterien, välimuistin, muistin, levymuistin ja magneettinauhan nopeudet suhteutettuna juuston hakuaikaan juustokakkua tehdessä?

Konekäskyjen esitysmuoto muistissa (4) TTK-91 konekäskyn rakenne. Konekäskyn operandit ja tulos. Taulukkojen esitysmuoto. Tietueiden esitysmuoto

Luento 2 (verkkoluento 2) Ttk-91 järjestelmä

Tiedon sijainti. Konekäskyjen esitysmuoto muistissa (4) TTK-91 konekäskyn rakenne. Taulukkojen esitysmuoto. Konekäskyn operandit ja tulos

Tietokoneen toiminta, Kevät Luento 7 Tiedon esitysmuodot (jatk) Tiedon muuttumattomuuden tarkistus Järjestelmän sisäinen muisti

Konekäskyjen esitysmuoto muistissa (4)

Ohjelman esitysmuoto Rakenteellinen tieto Pariteetti Hamming-koodi Välimuisti Tavallinen muisti Muistien historiaa

Konekäskyjen esitysmuoto muistissa (4) TTK-91 konekäskyn rakenne. Konekäskyn operandit ja tulos. Taulukkojen esitysmuoto. Tietueiden esitysmuoto

Tiedon muuttumattomuuden tarkistus Järjestelmän sisäinen muisti Ohjelman toteutus järjestelmässä

Tietokoneen toiminta Copyright Teemu Kerola Konekohtainen, jokaisella omansa Käskyt ovat 1 tai useamman tavun mittaisia

Tiedon muuttumattomuuden tarkistus Järjestelmän sisäinen muisti

Tieto ja sen osoite (3) Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Osoitinmuuttujat. Tieto ja sen osoite (5)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset

Tietokoneen toiminta, Kevät Copyright Teemu Kerola Järjestelmän eri tasot Laitteiston nopeus

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Kertausluento luennoista 1-3 1

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Tiedon tarkistus (4) Esimerkki ohjelmistotason tarkistusmerkistä (2) Tiedon muuttumattomuus (2)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Kertausluento 1 (lu01, lu02, lu03) Tietokonejärjestelmän rakenne ttk-91 ja sillä ohjelmointi

Tiedon muuttumattomuuden tarkistus Järjestelmän sisäinen muisti

Luento 1 Tietokonejärjestelmän rakenne

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Jakso 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Tiedon tarkistus (4)

Tiedon tarkistus (4) Esimerkki ohjelmistotason tarkistusmerkistä (2) Tiedon muuttumattomuus (2)

Jakso 7 Tiedon muuttumattomuuden tarkistus Järjestelmän sisäinen muisti. Pariteetti Hamming-koodi Välimuisti Tavallinen muisti Muistien historiaa

Tiedon tarkistus (4)

Luento 1 Tietokonejärjestelmän rakenne. Järjestelmän eri tasot Laitteiston nopeus

Tiedon tarkistus (4) Esimerkki ohjelmistotason tarkistusmerkistä (2) Tiedon muuttumattomuus (2)

Luento 1 Tietokonejärjestelmän rakenne

Luento 5 (verkkoluento 5) Suoritin ja väylä

Luento 6 Tiedon esitysmuodot

Tiedon tarkistus (4) Esimerkki ohjelmistotason tarkistusmerkistä (2) Tiedon muuttumattomuus (2)

Tiedon sijainti suoritusaikana (3) Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Miten tietoon viitataan? (4)

Tiedon tyypit Kommunikointi ihmisen kanssa. Luento 6 Tiedon esitysmuodot. Tiedon esitys laitteistossa (4) Suorittimen ymmärtämä tieto (9)

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

Luento 6 Tiedon esitysmuodot

Jakso 6 Tiedon esitysmuodot

Luento 7 Tiedon muuttumattomuuden tarkistus Järjestelmän sisäinen muisti

Luento 6 Tiedon esitysmuodot. Tiedon esitys laitteistossa (4) Tiedon esitys (7) Suorittimen ymmärtämä tieto (9) Tietokoneen toiminta, K

Digitaalitekniikan matematiikka Luku 13 Sivu 1 (10) Virheen havaitseminen ja korjaus

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Luento 2 (verkkoluento 2) Ttk-91 järjestelmä

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset

Miksi konekieltä? Jakso 2 TTK-91-tietokone ja sen KOKSI-simulaattori. Tietokone TTK-91. Miksi ei oikeaa konekieltä? TTK-91: rekisterit

Jakso 2 TTK-91-tietokone ja sen KOKSI-simulaattori

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Luento 2 TTK-91 tietokone ja sen KOKSI simulaattori. Miksi konekieltä? Tietokone TTK-91. Miksi ei oikeaa konekieltä?

LOAD R1, =2 Sijoitetaan rekisteriin R1 arvo 2. LOAD R1, 100

Tiedon sijainti suoritusaikana. Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Miksi konekieltä? Jakso 2 TTK-91-tietokone ja sen KOKSI-simulaattori. Tietokone TTK-91. Miksi ei oikeaa konekieltä? TTK-91: tietotyypit (2)

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Luento 2 TTK-91 tietokone ja sen simulaattori. Miksi konekieltä? Tietokone TTK-91. Miksi ei oikeaa konekieltä? TTK-91 (1) TTK-91 laitteisto

Jakso 2 TTK-91-tietokone ja sen KOKSI-simulaattori

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset

Miksi konekieltä? Jakso 2 TTK-91-tietokone ja sen KOKSI-simulaattori. Tietokone TTK-91. Miksi ei oikeaa konekieltä?

Jakso 2 TTK-91 -tietokone ja sen KOKSI -simulaattori

Jakso 2 TTK-91 -tietokone ja sen KOKSI -simulaattori

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI)

Luento 3 Konekielinen ohjelmointi (TTK-91, KOKSI) Muuttujat Tietorakenteet Kontrolli Optimointi Tarkistukset

Luento 5 (verkkoluento 5) Suoritin ja väylä

Ohjelmassa muuttujalla on nimi ja arvo. Kääntäjä ja linkkeri varaavat muistilohkon, jonne muuttujan arvo talletetaan.

Jakso 5 Suoritin ja väylä. Suorittimen rakenne Väylän rakenne Käskyjen suoritussykli Poikkeukset ja keskeytykset TTK-91:n ja KOKSI:n rakenne

Jakso 5 Suoritin ja väylä

Jakso 5 Suoritin ja väylä

Tietokoneen toiminta, K Tavoitteet (4)

Jakso 12 Yhteenveto. Keskeiset asiat Teemu Kerola, K2000

Taulukot. Jukka Harju, Jukka Juslin

Suoritin. Jakso 5 Suoritin ja väylä. TTK-91 muistin rakenne. TTK-91 suorittimen rakenne

TIE448 Kääntäjätekniikka, syksy Antti-Juhani Kaijanaho. 27. lokakuuta 2009

Ongelma(t): Miten mikro-ohjelmoitavaa tietokonetta voisi ohjelmoida kirjoittamatta binääristä (mikro)koodia? Voisiko samalla algoritmin esitystavalla

Luento 1 (verkkoluento 1) Ohjelman sijainti Ohjelman esitysmuoto Laitteiston nopeus

Suoritin. Luento 5 Suoritin ja väylä. TTK-91 muistin rakenne. TTK-91 suorittimen rakenne

Ttk-91 esimerkkitietokone ja sen simulaattori

Luento 5 Suoritin ja väylä

Suoritin. Luento 5 Suoritin ja väylä. TTK-91 suorittimen rakenne (1) TTK-91 muistin rakenne. Käskyjen nouto- ja suoritussykli (5)

Aliohjelmatyypit (2) Jakso 4 Aliohjelmien toteutus

1. Keskusyksikön rakenne

Käännös, linkitys ja lataus

Sisältöä. Tietokoneen rakenne. Ch 1 - Ch 8 [Sta06] Valikoituja paloja TITO-kurssista. Tietokonejärjestelmä

Suoritin. Luento 5 Suoritin ja väylä. TTK-91 suorittimen rakenne (1) TTK-91 muistin rakenne

Luento 5 Suoritin ja väylä

Luento 5 Suoritin ja väylä

Luento 4 Aliohjelmien toteutus

Jakso 4 Aliohjelmien toteutus

Luento 1 (verkkoluento 1) Tietokonejärjestelmä

Luento 5 Suoritin ja väylä

Jakso 4 Aliohjelmien toteutus

Muistihierarkia Kiintolevyt I/O:n toteutus

Jakso 10 Ohjelman suoritus järjestelmässä

Monipuolinen esimerkki

Tietokonejärjestelmä. Tietokoneen rakenne. Ch 1 - Ch 8 [Sta06] Valikoituja paloja. TITO-kurssista. John von Neumann ja EDVAC, 1949.

Transkriptio:

Tiedon ta:rkistus ja muisti Ohjelman esitysmuodot Konekäskyt ja rakenteellinen tieto Tiedon muuttumattomuus Pariteettibitti Hamming-koodi CRC-koodi ja laitteiden monistaminen Muisti Välimuisti, tavallinen muisti Hooö luenn1oss>a es>ittelemme ~~~i~~~~~~~~~i~i~~~~~~~~~b~ tiedon. Seuraavaksi käymme läpi tiedon muuttumattomuuden tarkistusm enetelmistä pariteettibitin käytön, virheitä korjaavan Hamming-koodin, CRC-koodin ja laitteiden monistamiseen perustuvien menetelmien idean. Lopuksi esittelemme lyhyesti välimuistin perusidean ja kuinka keskusmuisti on toteutettu.

Konekäskyjen esitysmuoto muistissa Konekohtainen, joka valmistajalla omansa saman valmistajan jotkut suoritti met voivat olla taaksepäin yhteensopivia (suoritti men uudessa versiossa toimii aikaisemman version koodi) Käskyt 1 tai useamman tavun mittaisia SPARC'issa kaikki käskyt 1 sanan eli 4 tavun mittaisia PowerPC'ssä kaikki käskyt 1 sanan eli 4 tavun mittaisia Pentium ll'ssa käskyt 1-16 tavua, paljon pituuksia käy1össä Käskyillä yksi tai useampi muoto, kussakin tietty määrä erilaisia kenttiä opcode, Ri, Rj, Rk, osoitusmoodi pitkä tai lyhy1 vakio Ei omia konekäskyjä konekäskyjen manipulointiin, käytä aliohjelmia kääntäjä generoi konekäskyjä bittimanipulaatioilla, kä)>ttäen valmiita aliohjelmia suoritin osaa tulkita toimia sen mukaisesti. Jokainen tie:okoneiden valmistaja on speksannut omat konekäskyjen joukkonsa. Er suorittimilla on siis yleisesti ottaen kc.ikilla erilainen konekäskykanta ja ne eivät ole keskenään yhteensopivia. lntelin suorittimelle käännetty ä koodic. ei voi suorittaa IBM'n suorittimella ja päin vastoin. Toisaalta useat lntelin suorittimet ovat taaksepäin yhteensopivia siten, että aikaisemmalle versiolle käännetty koodi voi toimia myös ujdemmassa suoritinversiossa, mutta ei päin vastoin!

Konekäskyjen esitysmuoto muistissa Konekohtainen, joka valmistajalla omansa saman valmistajan jotkut suoritti met voivat olla taaksepäin yhteensopivia (suoritti men uudessa versi ossa toimii aikaisemman versi on koodi) Käskyt 1 tai useamman tavun mittaisia SPARC'issa kaikki käskyt 1 sanan eli 4 tavun mittaisia PowerPC'ssä kaikki käskyt 1 sanan eli 4 tavun mittaisia Pentium ll'ssa käskyt 1-16 tavua, paljon pituuksia käytössä ttk-91 kaikki käskyt 1 sanan eli 4 tavun mittaisia Käskyillä yksi tai useampi muoto, kussakin tietty määrä erilaisia kenttiä opcode, Ri, Rj, Rk, osoitusmoodi pitkä tai lyhyt vakio Ei omia konekäskyjä konekäskyjen manipulointiin, käytä aliohjelmia kääntäjä generoi konekäskyjä bittimanipulaatioilla, käyttäen valmiita aliohjelmia se Jos käskyn on se on hakea kun jo alusta pitäen tiedetään luettavien tavujen lukumäärä. Toisaalta muistitilaa voi mennä hukkaan, jos yksinkertaisillekin käskyille varataan tilaa yhtä paljon kuin monimutkaisillekin käskyille. Yksi keino tämän ongelman välttämiseksi on toteuttaa käskykanta käyttäen ainoastaan yksinkertaisia käskyjä, jotka voidaan kaikki esittää muutamalla tavulla vakiopituisessa kentässä. Monimutkaisten asioiden tekemiseen käytetään sitten useampi konekäsky.

Konekäskyjen esitysmuoto muistissa 1 opcodl Rkl Ri IRi 1 Konekohtainen, joka valmistajalla omansa 1 opcode IRkl Ri 1 iso_vakio 1 saman valmistajan jotkut suoritti met voivat olla taaksepäin yhteensopivia (suoritti men uudessa versiossa toimii aikaisemman version koodi) Käskyt 1 tai useamman tavun mittaisia SPARC'issa kaikki käskyt 1 sanan eli 4 tavun mittaisia PowerPC'ssä kaikki käskyt 1 sanan eli 4 tavun mittaisia Pentium ll'ssa käskyt 1-16 tavua, paljon pituuksia käytössä Käskyillä yksi tai useampi muoto, kussakin tietty määrä erilaisia kenttiä opcode, Ri, Rj, Rk, osoitusmoodi pitkä tai lyhyt vakio ttk-91 kaikki käskyt ------------------------... saman pituisia ja Ei omia konekäskyjä konekäskyjen manipulointiin, käytä saman muotoisia kääntäjä generoi konekäskyjä bittimanipulaatioilla, käyttäen valm11 a a 10 Je m1a Kon1ekäsky koostuu muutamasta kentästä, kuten ja Tietuetyyppejä voi olla vain yksi tai niitä voi olla useampi. Jos tietuetyyppejä on yksi, niin käskyn purku kenttiin on helppoa, koska se tehdään aina samalla tavalla. Jos taas tietuetyyppejå on useita, niin kenttiin purku täytyy tehdä useammassa vaiheessa, jolloin siihen kuluu enemmän aikaa.

Konekäskyjen esitysmuoto muistissa Konekohtainen, joka valmistajalla omansa saman valmistajan jotkut suoritti met voivat olla taakse (suorittimen uudessa versiossa toimii aikaisemman v Käskyt 1 tai useamman tavun mittaisia SPARC'issa kaikki käskyt 1 sanan eli 4 tavun mittaisi PowerPC'ssä kaikki käskyt 1 sanan eli 4 tavun mittais Pentium ll'ssa käskyt 1-16 tavua, paljon pituuksia käyr Käskyillä yksi tai useampi muoto, kussakin tietty opcode, Ri, Rj, Rk, osoitusmoodi pitkä tai lyhyt vakio generoi konekäsky ADD R1, =56 Createlnstr( opcadd, 1, 0, 0, 56) LOAD R1, opc SHL R1, =24.-1...,., 1 7::-r:-lor:-lo,.,.,lol,...,o~l LOAD R2, rj SHL R2, =21 OR R1, R2 17hloblol LOAD R2, m SHL R2, = 19 ~:-:::-r=~, OR R 1, R2 1 17 1110 loi 0 1 LOAD R2, rj SHL R2, 16 OR R1, R2 1 17 l1lo loi o 1 LOAD R2, addr OR R1, R2 1 17l1lolol56 1 Ei omia konekäskyjä konekäskyjen manipulointiin, käytä aliohjelmia kääntäjä generoi konekäskyjä bittimanipulaatioilla, käyttäen valmiita aliohjelmia ymmärtää oman aina osana konekielisen koodin generointi, jossa konekäskyt pitää rakentaa kenttä kerrallaan kuntoon. varten kääntäjissä on omia valmiiksi rakennettuja aliohjelmia, jotka sitten yhdistelevät parametreina annetut kentät uudeksi konekäskyksi. osaa '"'K'""

Ttk-91 konekäskyn rakenne Käskyn esitys bittitasolla on aina samantyyppinen ADD R 1, =56 ;Ri turha LOAD R2, R3 ;ADDR turha NOP ; Rj, M, Ri ;ADDR turhia LOAD R4, =1 234 8 OPER 8 bit Rj 3 b it M Ri 2 bit 3 bit ADDR 16 bit 3 1 24 2 1 19 16 15 (bit1t on numeroitu oikealta vasemmalle, nollasta alkaen) 0 OPER Rj Ri ADDR M operaatiokoodi, opcode, 0-112 (kaikki arvot eivät ole laillisia) 1. operandi, tulosrekisteri, RO-R7 (yleisrekisteri) indeksirekisteri, R1-R7 (arvo 0 indikoi että indeksirekisteri ei ole käytössä) osoiteosa, vakio-osa, arvoalue [-32767, +32767] moodi, muistinoutojen määrä toisen operandin laskemiseksi (ennen mahdollista muistiin talletusta STORE-käskyssä) 0 välitön osoitus 1 suora osoitus (STORE-käsky: suora osoitus) (STORE-käsky: ep äsuora osoitus) 2 ep äsuora osoitus (ST ORE-käsky: epäkelp o arvo, virhetilanne) 3 epäkelp o arvo, virhetilanne Ttk-9 1 koneen konekäskyn rakenne on tarkasti käyty läpi jo aikaisemmilla luennoilla. Käskyt ovat kaikki 32-bittisiä ja niissä on aina kaikki samat kentät. Joissakin tapauksissa kaikkia kenttiä ei käytetä, joten ne ovat tavallaan turhia. Esimerkiksi pelkkää vakiota käytett3essä kenttää Ri ei tarvittaisi ja toisaalta pelkästään rekistereillä operoitaessa vakiokenttä on ihan turha. NOP-käskyssä kaikki muut kentät paitsi operaatiokoodi Jvat turhia. Toisaalta, konekäskyssä ei voi esittää suuria vakioita tai muistiosoitteita, joten ne täytyy käsitellä jollc.in muulla tavalla.

Ttk-91 konekäskyn rakenne Käskyn esitys bittitasolla on aina samantyyppinen OPER Rj M Ri 8 bit 3 bit 2 bit 3 bit ADDR 16 bit LOAD R2, @ptry ADD R1, mjax 31 24 21 19 16 15 0 (bitit on numeroitu oikealta vasemmalle, nollasta alkaen) OPER Rj Ri ADDR M operaatiokoodi, opcode, 0-112 (kaikki arvot eivät ole laillisia) 1. operandi, tulosrekisteri, RO-R7 (yleisrekisteri) indeksirekisteri, R1-R7 (arvo 0 indikoi että indeksirekisteri ei ole käytössä) osoiteosa, vakio-osa, arvoalue [-32767, +32767] moodi, muistinoutojen määrä toisen operandin laskemiseksi (ennen mahdollista muistiin talletusta STORE-käskyssä) 0 välitön osoitus (STORE-käsky: suora osoitus) 1 suora osoitus (STORE-käsky: epäsuora osoitus) 2 epäsuora osoitus (STORE-käsky: epäkelpo arvo, virhetilanne) 3 epäkelpo arvo, virhetilanne Ttk-9 1 muistinosoitumuotoja on oikeastaan vain 2 kappaletta: suora ja epäsuora muistinosoitus. Rekisterioperandien tai välittömien operandien käyttö ei varsinaisesti on muistissa olevaan tietoon viittaamista, vaikka tällainen tiedon viittaustyyppi määritelläänkin saman moodikentän avulla. Epäsuora muistiviite on aika hidas toteuttaa, koska se vaatii kaksi muistiviitettä, minkä vuoksi sitä ei useinkaan enää käytetä. Toisaalta, ttk 91'ssä voi yhdistää muistista noudon ja matemaattisen operaation, mikä myöskin aiheuttaa toteutustasolla ongelmia, minkä vuoksi nykyaikaisissa koneissa varsinainen ty ö tehdään usein vain rekistereillä operoiden.

raulukkojen esitysmuoto ~ Peräkkäisrakenteena, kuten aikaisemmin esitettiin Ei yleensä omia konekäskyjä, manipulointi aliohjelmilla tai silmukoilla Vektorisuorittimissa on konekäskyjä lyhyiden vektoreiden (1-ulotteisten taulukoiden) manipulointiin 32 64 = 2048 bitin rekisteri vektorirekisterit tavallisten rekistereiden lisäky,..... 32 kaksoi starkuuden Ii ukuluvun rekisteri 8 8 bltt1 a ta1 64-bitin rekisteri (lntelin MMX konekäskyt) 4 16 bittiä tai 2 32 bittiä Tavallinen kaksoi starkkuuden Ii ukulukureki steri toimii vektori rekisteri nä vektorikonekäskyt vain vektorirekistereille: vload, vadd, vmult, vmultadd, vstore MMX: PADDB (Packed Bytes Add), PSUBB (Packed Bytes Substract), etc. lndeksoitu tiedonosoitusmoodi tukee 1-ulotteisten taulukeiden käyttöä joissakin koneissa ti edonosoitusmoodeja 2 -ulottei si IIe taulukoi IIe ovat taulukot joko riveittäin tai sarakettain talletettuna, kuten aikaisemmin esitettiin. Taulukoiden dimensioiden lukumäärä samoin kuin sen alkion pituus tai tietotyyppi voi olla mitä vain.

raulukkojen esitysmuoto Peräkkäisrakenteena, kuten aikaisemmin esitettiin Ei yleensä omia konekäskyjä, manipulointi aliohjelmilla tai silmukoilla Vektorisuorittimissa on konekäskyjä lyhyiden vektoreiden (1-ulotteisten taulukoiden) manipulointiin 32 64 = 2048 bitin rekisteri vektorirekisterit tavallisten rekistereiden lisäky,..... 32 kaksoi starkuuden Ii ukuluvun rekisteri 8 8 bltt1 a ta1 64-bitin rekisteri (lntelim MMX konekäskyt) 4 16 bittiä tai 2 32 bittiä Tavallinen kaksoi starkkuuden Ii ukulukureki steri toimii vektori rekisteri nä vektorikonekäskyt vain vektorirekistereille: vload, vadd, vmult, vmultadd, vstore MMX: PADDB (Packed Bytes Add), PSUBB (Packed Bytes Substract), etc. lndeksoitu tiedonosoitusmoodi tukee 1-ulotteisten taulukeiden käyttöä joissakin koneissa ti edonosoitusmoodeja 2 -ulottei si IIe taulukoi IIe tukea liukulukutaulukoita, mutta ei oikein hyvin 5-ulotteisia taulukoita, joiden alkio on 8-sanainen tietue. Tällaisissa tapauksissa taulukkoon viittaminen tapahtuu aina kahdessa vaiheessa, jossa ensin lasketaan viitatun alkion osoite talletetun taulukon sisällä ja sitten vasta tehdään muistiviite kyseiseen alkioon.

raulukkojen esitysmuoto Peräkkäisrakenteena, kuten aikaisemmin esitettiin Ei yleensä omia konekäskyjä, manipulointi aliohjelmilla tai silmukoilla Vektorisuorittimissa on konekäskyjä lyhyiden vektoreiden (1-ulotteisten taulukoiden) manipulointiin 32 64 = 2048 bitin rekisteri vektorirekisterit tavallisten rekistereiden lisäky,..... 32 kaksoi starkuuden Ii ukuluvun rekisteri 8 8 bltt1 a ta1 64-bitin rekisteri (lntelin MMX konekäskyt) 4 16 bittiä tai 2 32 bittiä Tavallinen kaksoi starkkuuden Ii ukulukureki steri toimii vektori rekisteri nä vektorikonekäskyt vain vektorirekistereille: vload, vadd, vmult, vmultadd, vstore MMX: PADDB (Packed Bytes Add), PSUBB (Packed Bytes Substract), etc. lndeksoitu tiedonosoitusmoodi tukee 1-ulotteisten taulukeiden käyttöä joissakin koneissa ti edonosoitusmoodeja 2 -ulottei si IIe taulukoi IIe on laskentaan eli numeroiden murskaamiseen suunnitellut ns. superkoneet sisältävät usein erillisiä vektorirekistereitä ja konekäskyjä niillä operointiin. Vektorin pituus voi olla vaikkapa 32 liukulukua, jolloin myös sovellu s täytyy huolella suunnitella hyödyntämään tämän pituisia vektoreita. Fortran-kääntäjät on viilattu usein tällaiseen laskentaan. Toisaalta, multimediaa varten myös tavallisissa pöytäkoneissa käytetyt lntelin suorittimet sisältävät MMX-vektorikäskyjä, joilla operoidaan esimerkiksi kahdeksaa 8-bittistä tai neljää 16-bittistä data-al kiota kerrallaan.

raulukkojen esitysmuoto Peräkkäisrakenteena, kuten aikaisemmin esitettiin LOAD R1, R5 MULT R1, =pituusaikio ADD R1, Tbl LOAD R1, @R1 Ei yleensä omia konekäskyjä, manipulointi aliohjelmilla tai silmukoilla Vektorisuorittimissa on konekäskyjä lyhyiden vektoreiden (1-ulotteisten taulukoiden) manipulointiin 32 64 = 2048 bitin rekisteri vektorirekisterit tavallisten rekistereiden lisäky,..... 32 kaksoi starkuuden Ii ukuluvun rekisteri 8 8 bltt1 a ta1 64-bitin rekisteri (lntelin MMX konekäskyt) 4 16 bittiä tai 2 32 bittiä Tavallinen kaksoi starkkuuden Ii ukulukureki steri toimii vektori rekisteri nä vektorikonekäskyt vain vektorirekistereille: vload, vadd, vmult, vmultadd, vstore MMX: PADDB (Packed Bytes Add), PSUBB (Packed Bytes Substract), etc. lndeksoitu tiedonosoitusmoodi tukee 1-ulotteisten taulukeiden käyttöä joissakin koneissa tiedonosoitusmoodeja 2-ulotteisille taulukoi IIe LOAD R1, Tbi(R5) LOAD R1, d2arr(r3)(r4) ;ei ttk-91 Useimmissa koneissa on laitteistotukea taulukkojer käsittelyyn indeksoidun tiedonosoitusmoodin muodoss<. Sen avulla yksiulotteiseen taulukkoon viittaaminen on helppoa ja se voidaan toteuttaa yhdessä konekäskysså. liman indeksoitua tiedonosoitusmoodia simppelikin taulukkoviite vaatisi ainakin kolme tai neljä konekäskyä, kun taulukon kantaosoite ja alkion pituudella painotettu indeksi pitäisi laskea ensin yhteen viitatun alkion osoitteen laskemiseksi. lndeksoitu tiedonsoitusmoodi tekee tämän suoraan laitteiston piirillä yhden konekäskyn sisällä.

Tietueiden esitysmuoto Peräkkäisrakenteena yhtenäinen alue muistissa Osoite on jonkin osoitinmuuttujan arvo pjohn John: " 34 l/ 21 183 Ei omia konekäskyjä, manipulointi aliohjelmilla tai kääntäjän generoimien vakiolisäysten avulla lndeksoitu tiedonosoitusmoodi tukee tietueisiin viittaamista id EQU 0 age EQU 1 height EQU 2 pjohn DC 0 ; ptr to John ; allocate John ; set pjohn to point to John LOAD R1, pjohn LOAD R2, age(r1) LOAD R3, height(r1) alkuosoite on samalla tietueen osoite. Samalla tavalla kuin tietueet ovat monisanaista ja ainoastaan yksi osa (kenttä) kerrallaan tuodaan rekisteriin prosessointia varten. Tietueen kenttiin viitataan aina kentän suhteellisen osoitteen ja tietueen alkuosoitteen avulla. Tietueita varataan ja vapautetaan yleensä suoritusaikana keosta. Yleensä niitä ei varata staattisesti esimerkiksi globaalien muuttujien tapaan.

Tietueiden esitysmuoto Peräkkäisrakenteena yhtenäinen alue muisti ssa Osoite on jonkin osoitinmuuttujan arvo pjohn John: ' 34 l/ 21 183 Ei omia konekäskyjä, manipulointi aliohjelmilla tai kääntäjän generoimien vakiolisäysten avulla lndeksoitu tiedonosoitusmoodi tukee tietueisiin viittaamista id EQU 0 age EQU 1 height EQU 2 pjohn DC 0 ; ptr to John ; allocate John ; set pjohn to point to John LOAD R1, pjohn LOAD R2, age(r1) LOAD R3, height(r1) Tietueen osoite pidetään yleensä tallessa jossakin osoitinmuutlujassa tai osoitinmuuttujataulukossa tai jonkin muun tietueen osoitinmuuttujakentässä. Systeemin eheyden kannalta on tärkeätä, että tällaiset osoitinmuuttujat eivät koskaan osoita vanhaan tietoon. Esimerkiksi, jos tietueen 'John' käyttämä muistitila vapautetaan uusiokäyttöön, niin myös kaikki siihen osoittavat osjitinmuuttujat pitäisi joko nollata tai muuten merkitä epäkelvoksi. Jos näin ei tehdä, niin seuraava viite esim. osoitinmuuttujan pjohn kautta kohdistuu kyllä oikeac.n muistiosoitteeseen, mutta siellä olevaan ihan eri dataan.

Tietueiden esitysmuoto Peräkkäisrakenteena yhtenäinen alue muisti ssa Osoite on jonkin osoitinmuuttujan arvo pjohn John: " 34 l/ 21 183 Ei omia konekäskyjä, manipulointi aliohjelmilla tai kääntäjän generoimien vakiolisäysten avulla lndeksoitu tiedonosoitusmoodi tukee tietueisiin viittaamista id EQU 0 age EQU 1 height EQU 2 pjohn DC 0 ; ptr to John ; allocate John ; set pjohn to point to John LOAD R1, pjohn LOAD R2, age(r1) LOAD R3, height(r1) Tietueiden käsittelyyn ei ole omia konekäskyjä, vaan niitä käsitellään kutakin tietuetyyppiä varten suunnitelluilla aliohjelmilla. Tällaiset aliohjelmat tekevät myös oikeellisuustarkistuksia sen lisäksi, että ne lukevat ja kirjoittavat tietueen eri kenttiä.

Tietueiden esitysmuoto!peräkkäisrakenteena yhtenäinen alue muisti ssa Osoite on jonkin osoitinmuuttujan arvo pjohn: John: "' 34 jl' 21 183!Ei omia konekäskyjä, manipulointi aliohjelmilla tai kääntäjän generoimien vakiolisäysten avulla lndeksoitu tiedonosoitusmoodi tukee tietueisiin viittaamista id EQU 0 age EQU 1 height EQU 2 pjohn DC 0 ; ptr to John ; allocate John ; set pjohn to point to John LOAD R1, pjohn LOAD R2, age(r1) LOAD R3, height(r1) lndeksoitu tiedonosoitusmoodi tukee taulukeiden lisäksi myös tietueiden käsittelyä. Taulukkoviitteissähän indeksirekisterissä pidetään suht'koht pientä taulukon sisäistä osoitetta eli indeksiä, ja vakiokentässä on taulukon alkuosoite. Tietueviitteissä taas indeksirekisterissä pidetään tietueen alkuosoitetta eli pointteria tietueeseen ja käskyn vakio-osassa on tietueen sisäinen osoite eli tietueen kentän suhteelllinen osoite tietueen sisällä. On hyvin kätevää, että yhdellä ja samalla tiedonosoitusm oodilla voidaan tukea molempien rakenteellisen tiedon perustyypin toteutusta.

Olioiden (object) esitysmuoto Oliot toteutetaan tietueina ja ne varataan yleensä keosta Olioihin viitataan niiden osoitteen perusteella Useat oli on kentistä sisältävät osoitteen (pointerin) suoritusaikana varattuun toiseen olioon Olion metodi toteutetaan kenttänä, jossa on osoite koodiin Ei omia konekäskyjä, manipulointi muiden tietueiden tapaan aliohjelmilla object StackA private data public data private methods public methods other data Oliot ovat käytännössä vain yhden tyyppisiä tietueita. Oliolle on erittäin tyypillistä, että niitä varataan ja vapautetaan suoritusaikana keosta. Olioperustaisissa järjestelmissä olioon viittaaminen tapahtuu hyvin rajoitetusti, jolloin myös kirjapito olioiden käyttämistä muistialueista ja niihin viittaavista osoitinmuuttujista voidaan hoitaa järjestelmällisesti. Useissa järjestelrrissä (esim. Java) itse osoitinmuutlujiin ei suoraan pääse käsiksi, vaan olioihin voi ainoastaan viitata ohjelmairtikielen omien rakenteiden kautta. C-kielessä ei ole tällaista rajoitetta, ja se onkin tiedostettu erääksi C:n heikkojdeksi. Jonkun systeemigurun mielestä taas tämä on jucri eräs C:n hyvistä puolista. Pitäkää varanne!

Olioiden (object) esitysmuoto Oliot toteutetaan tietueina ja ne varataan yleensä keosta Olioihin viitataan niiden osoitteen perusteella Useat olion kentistä sisältävät osoitteen (pointerin) suoritusaikana varattuun toiseen olioon Olion metodi toteutetaan kenttänä, jossa on osoite koodiin Ei omia konekäskyjä, manipulointi muiden tietueiden tapaan aliohjelmilla object StackA private data public data private methods public methods ult u:1 l.li:!li:! Olioon viittamiseksi meillä täytyy siis olla tiedossa sen muistiosoite. Muiden tietuetyyppien tapaan se on talletettu johonkin osoitinmuuttujac.n, joka puolestaan voi sijaita taulukossa tai jossakin toisessa tietueessa eli oliossa. Olion perimien ominaisuuf:sien määrittely voi sijaita jossakin toisessa oliossa, johon jokin kenttä tässä oliossa viittaa.

Olioiden (object) esitysmuoto Oliot toteutetaan tietueina ja ne varataan yleensä keosta Olioihin viitataan niiden osoitteen perusteella Useat olion kentistä sisältävät osoitteen (pointerin) suoritusaikana varattuun toiseen olioon Olion metodi toteutetaan kenttänä, jossa on osoite koodiin Ei omia konekäskyjä, manipulointi muiden tietueiden tapaan aliohjelmilla object StackA private data public data private methods public methods other data Metodit ovat yksinkertaisesti aliohjelmien alkuosoitteita. Tottakai metodin määrittelyyn sisältyy tieto siitä, onko se julkinen vai ainoastaan tämän olion sisältä kutsuttavissa samoin kuin kaikkien parametrien määrittely!. Olion toteutus konekielen tasolla tuntuu ehkä turhankin yksinkertaiselta ja tällöin helposti unohtuu, että oliokielten voima on juuri hienoissa ohjelmistorakenteissa, joiden avulla automaattisesti hoidetaan olioiden tietorakenteiden käytön ja eheyden valvonta sekä eri tavoin eri oliokielissä toteutettu ominaisuuksien perinnät ja muut olioihin liittyvät voimakkaat käsitteet kuten esimerkiksi polymorfismi.

Olioiden (object) esitysmuoto Oliot toteutetaan tietueina ja ne varataan yleensä keosta Olioihin viitataan niiden osoitteen perusteella Useat oli on kentistä sisältävät osoitteen (pointerin) suoritusaikana varattuun toiseen olioon Olion metodi toteutetaan kenttänä, jossa on osoite koodiin Ei omia konekäskyjä, manipulointi muiden tietueiden tapaan aliohjelmilla object StackA private data public data private methods public methods other data tapaan nämä aliohjelmat on toteutettu ohjelmistoympäristössä valmiiksi, kuten esimerkiksi Javassa.

Tiedon tarkistus Tiedon oikeellisuutta ei voi tarkistaa yleisessä tapauksessa. Tavoitteena on kerran oikein talletetun tiedon muuttumattomuus muistiin talletettu X'n arvoksi luku 5.43, X luetaan, onko arvo 5.43 väylälle kirjoitetaan luku 1234567, mitä tulee ulos väylältä toisesta päässä? Viasta johtuva virhe voidaan ehkä havaita ja joskus automaattisesti korjata ennen kuin siitä tulee häiriötä bitti voi muuttua muisti ssa tai tiedon siirrossa aiheuttaen virheen muistipiirissä voi olla staattinen vika, joka voi aiheuttaa staatti sen virheen transientti vika on esimerkiksi (esim. avaruussäteilyn) alkeishiukkanen, joka muuttaa biti n tiedonsiirron aikana ja aiheuttaa transi enti n virheen korjaamattomasta virheestä voi aihe utua (pienempi tai suurempi) häiriö Matin palkkasumma oli väärin? Videokuvassa oli yhdessä kuvassa tahra? Tietokannan eheys on eri asia, vaikka sekin on virhe henkilörekisterin tietueessa on Pekan palkka, mutta Matin kumulatiivinen vuosipalkka Yleisesti ottaen ei ole mitenkään mahdollista, että voisimme tarkistaa, onko jokin tieto laitteistossa oikein tai 'totta'. Tavoitteemme on paljon rajallisempi. Py rimme vain säilyttämään laitteistoon talletetun tiedon sellaisenaan olettaen, että se on alkuaan ollut tarkoitetun mukaista. Yritämme siis eri konstein taata, että tieto ei muutu esimerkiksi muistitalletuksen tai tiedonsiirron aikana. Tässäkään ei päästä absoluuttiseen tarkkuuteen vaan meidän on tasapainotellava kustannusten kanssa. Lopputuloksena on tilanne, jossa tiedon muuttumattomuus on hoidettu 'riittävän hyvin' eli jollakin hyvin suurella todennäköisyydellä.

Tiedon tarkistus Tiedon oikeellisuutta ei voi tarkistaa yleisessä tapauksessa. Tavoitteena on kerran oikein talletetun tiedon muuttumattomuus muistiin talletettu X'n arvoksi luku 5.43, X luetaan, onko arvo 5.43 väylälle kirjoitetaan luku 1234567, mitä tulee ulos väylältä toisesta päässä? Viasta johtuva virhe voidaan ehkä havaita ja joskus automaattisesti korjata ennen kuin siitä tulee häiriötä bitti voi muuttua muisti ssa tai tiedon siirrossa aiheuttaen virheen muistipiirissä voi olla staattinen vika, joka voi aiheuttaa staatti sen virheen transientti vika on esimerkiksi (esim. avaruussäteilyn) alkeishiukkanen, joka muuttaa biti n tiedonsiirron aikana ja aiheuttaa transi enti n virheen korjaamattomasta virheestä voi aihe utua (pienempi tai suurempi) häiriö Matin palkkasumma oli väärin? Videokuvassa oli yhdessä kuvassa tahra? Tietokannan eheys on eri asia, vaikka sekin on virhe henkilörekisterin tietueessa on Pekan palkka, mutta Matin kumulatiivinen vuosipalkka muuttumattomuuteen oleva yleensä fyysinen vika. muistipiirin bitti on ja siihen kirjoitettu tieto tallentuo aina 1:nä. Viast< tai jostain muusta syystä tieto voi muuttua virheelliseksi, joka sinällään ei vielä ole kovin paha juttu. Vasta kun virheestä aiheutuu tiedon käyttäjälle häiriötä, se muuttuu ongelmaksi ja silloinkin vain, jos häiriö on laadultaan merkittävä. Ongelmana on, että laitteisto ei tietoa k~s i te ll essää n tiedä, minkä lajin tieto on kyseessä ja onko mahdollinen häiriö vakava vai ei.

Tiedon tarkistus Tiedon oikeellisuutta ei voi tarkistaa yleisessä tapauksessa. Tavoitteena on kerran oikein talletetun tiedon muuttumattomuus muistiin talletettu X'n arvoksi luku 5.43, X luetaan, onko arvo 5.43 väylälle kirjoitetaan luku 1234567, mitä tulee ulos väylältä toisesta päässä? Viasta johtuva virhe voidaan ehkä havaita ja joskus automaattisesti korjata ennen kuin siitä tulee häiriötä bitti voi muuttua muistissa tai tiedon siirrossa aiheuttaen virheen muistipiirissä voi olla staattinen vika, joka voi aiheuttaa staattisen virheen transientti vika on esimerkiksi (esim. avaruussäteilyn) alkeishiukkanen, joka muuttaa biti n tiedonsiirron aikana ja aiheuttaa transi enti n virheen korjaamattomasta virheestä voi aihe utua (pienempi tai suurempi) häiriö Matin palkkasumma oli väärin? Videokuvassa oli yhdessä kuvassa tahra? Tietokannan eheys on eri asia, vaikka sekin on virhe henkilörekisterin tietueessa on Pekan palkka, mutta Matin kumulatiivinen vuosipalkka Virheellistä tietoa voi järjestelmään synty ä myös ohjelmistovirheiden vuoksi, mutta jätämme tällaisten virheiden havaitsemisen ja korjaamisen muille kursseille. Tyypillinen esimerkki ohjelmistovirheestä on samanaikaisuudenhallinnan puutteellinen toteutus, minkä seurauksena esimerkiksi tietokantaan samaan aikaan tulleet kaksi päivity stä menivät osittain päällekkäin. Tässä tapauksessa henkilörekisterin tietueen kentissä olevat tiedot ovat kenttäkohtaisesti oikein, mutta yhdessä epäkonsistentteja. Samanaikaisuuden aiheuttamia ongelmia käsitellään myöhemmin useammallakin kurssilla, mutta ei tällä kertaa tämän enempää.

Tiedon muuttumattomuuden valvonta Perusidea: otetaan tietoon mukaan ylimääräisiä bittejä, joiden avulla virheitä voidaan havaita ja ehkä myös korjata enemmän bittejä, enemmän tietoa, havaitaan useampi virhe, korjataan useampi virhe Järjestelmä suorittaa tarkistukset automaattisesti joko laitteistotasolla tai ohjelmistotasolla laitteistotasolla nopea, kiinteä tarkistus esim. rekisterissä olevan tiedon kaikkien yhden bitin virheiden korjaus ohjelmistotasolla hitaampi, joustava, muokattavissa oleva tarkistus ti Ii nump.ron k~ i kki P.n yhrlp.n hiti n vi rhp.i rlp.n h~v~ itsp.mi np.n t~ rki stusnump.ron ~vull~ Valvonnan kustannukset sekä tilassa että ajassa ylimääräiset bitit vievät muistitilaa, vaativat lisää johtimia ja vievät tilaa lastulla tarki stuksen toteutus laitei stolla vie tilaa lastulla ja ehkä hidastaa suoritusta tarkistusohjelman suoritus vie suoriti naikaa ja siis hidastaa suoritusta Perusidea tiedon muuttumattomuuden valvonnassa on ottaa mukaan ylimääräisiä bittejä. Mitä useampi ylimääräinen bitti on mukana, sitä todennäköisemm n virheet havaitaan ja voidaan korjata. Jos ta rki st u s bi ttej ~ ei ole lainkaan, niin mitään virheitä ei havaita saati sitten korjata. Jos taas tarkistusbittejä on huomattavasti enemmän kuin tietobittejä, niin on varsin todennäköistä, että kaikki tietobileissä olleet virheet voidaan korjata. Toisaalta, näin katastrofaalisen tilanteeseen varautuminen yleensä indikoi tilanteesta, jossa tavalliset tiedon muuttumattomuuden valvontamenetelmät eivät enää riitä. Palaamme asiaan myöhemmin tällä luennolla.

Tiedon muuttumattomuuden valvonta Perusidea: otetaan tietoon mukaan ylimääräisiä bittejä, joiden avulla virheitä voidaan havaita ja ehkä myös korjata enemmän bittejä, enemmän tietoa, havaitaan useampi virhe, korjataan useampi virhe Järjestelmä suorittaa tarkistukset automaattisesti joko laitteistotasolla tai ohjelmistotasolla laitteistotasolla nopea, kiinteä tarkistus esim. rekisterissä olevan tiedon kaikkien yhden bitin virheiden korjaus ohjelmistotasolla hitaampi, joustava, muokattavissa oleva tarkistus ti Ii numeron kaikki en yhden biti n virheiden havaitseminen tarkistusnumeron avulla Valvonnan kustannukset sekä tilassa että ajassa ylimääräiset bitit vievät muistitilaa, vaativat lisää johtimia ja vievät tilaa lastulla tarki stuksen toteutus laitei stolla vie tilaa lastulla ja ehkä hidastaa suoritusta tarkistusohjelman suoritus vie suoriti naikaa ja siis hidastaa suoritusta Osa tarkistuksista tapahtuu niin matalalla tasolla, että ne on pakko suorittaa laitteistotasolla. Tämä tarkoittaa sitä, että esimerkiksi konekäskyn suorituspiireissä on virheitä tarkistavia ja korjaavia osia. Laitteistotason virheentarkistukset suoritetaan aina eikä niitä voi myöhemmin muuttaa. Ohjelmistotasolla taas voi tarkistaa ihan mitä vain, mutta tähän tietenkin voi kulua merkittäväkin määrä suoritusaikaa.

Tiedon muuttumattomuuden valvonta Perusidea: otetaan tietoon mukaan ylimääräisiä bittejä, joiden avulla virheitä voidaan havaita ja ehkä myös korjata enemmän bittejä, enemmän tietoa, havaitaan useampi virhe, korjataan useampi virhe Järjestelmä suorittaa tarkistukset automaattisesti joko laitteistotasolla tai ohjelmistotasolla laitteistotasolla nopea, kiinteä tarkistus esim. rekisterissä olevan tiedon kaikkien yhden bitin virheiden korjaus ohjelmistotasolla hitaampi, joustava, muokattavissa oleva tarkistus ti Ii numeron kaikki en yhden biti n virheiden havaitseminen tarkistusnumeron avulla Valvonnan kustannukset sekä tilassa että ajassa ylimääräiset bitit vievät muistitilaa, vaativat lisää johtimia ja vievät tilaa lastulla tarki stuksen toteutus laitei stolla vie tilaa lastulla ja ehkä hidastaa suoritusta tarkistusohjelman suoritus vie suoriti naikaa ja siis hidastaa suoritusta Tiedon muuttumattomuuden valvonta maksaa sekä tilassa että ajassa. Ylimääräiset tarkistusbitit pitää tallettaa muistiin ja rekistereihin, ja niitä varten tulee olla ylimääräisiä johtimia väylissä. Laitteistototeutuksena olevat tarkistusohjelmat vievät lastulla tilaa, jota voisi muuten käyttää vaikkapa suurempaan välimuistiin. Ohjelmakoodina toteutetut tarkistusohjelmat pitää tallettaa muistiin ja niille tulee antaa suoritinaikaa. On tärkeätä, että nämä kaikki kustannukset tasapainotetaan tarkistuksilla saataviin hyötyihin ja mahdollisiin häiriöiden aiheuttamiin riskeihin. Tiedon muuttumattomuuden valvonta ei siis mitenkään ole yksinkertaista toteuttaa.

Esimerkki ohjelmistotason tarkistusmerkki henkilötunnuksessa Henkilötunnus: tarkistusmerkki: jakojäännös: 120464-1 21 c 7!' 120464121 % 31 = 12 / 0123456789ABCDEFGH~MN,~TUVWXY 0 1 10111213 14 30 "1 Tarkistusmerkin avulla voidaan tarkistaa, että mikään yksi merkki ei ole väärin havaitsee kaikki yhden merkin virheet.. hava1ttua Vlrhetta e1 vo1 automaatti sest1 koqata ei havaitse kaikkia kahden tai useamman merkin virheitä väli merkkiä ei tarki steia lainkaan '+' tarkoittaa 1800-lukua '-' tarkoittaa 1900-lukua 'A' tarkoittaa 2000-lukua b 'a, Ja puuttuvat sekaannuksi en valttami seksi Hyvä esimerkki ylimääräisestä tarkistustiedosta on henkilötunnuksen tarf:istusmerkki. Henkilötunnuksessa on neljä osaa. [ nsimmäiset kuusi numeroa ovat syntymäaika, jossa vuosilu\'usta on vain kaksi viimeistä numeroa mukana. Sitten on vuosisadan ilmc.isema välimerkki ja kolminumeroinen j3rjesty snumero, joka on pojilla pariton ja tytöillä parillinen. Viimeinen merkki on tarkistusmerkki, joka saadaan jakamalla syntymäajan ja järjesty snumeron ilmaisema 9-nurreroinen luku 31'11a ja koodaamalla jakcjäännös tarkistusmerkiksi. Henkilötunnus otettiin Suomessa käyttöön vuonna 1964 ja alkuaan sen nimenä oli sosiaalituivatunnus.

Esimerkki ohjelmistotason tarkistusmerkki henkilötunnuksessa Henkilötunnus: 120464-1 21 c (oikein) / -4, 1 120464121 % 31 = 12 / tarkistusmerkki: jakojäännös: 0123456789ABCDEFGHJKLMNPRSTUVWXY 11 13 0 1 10 12 14 Tarkistusmerkin avulla voidaan tarkistaa, että mikään yksi merkki ei ole väärin havaitsee kaikki yhden merkin virheet havaittua virhettä ei voi automaattisesti kor ata ei havaitse kaikkia kahden tai useamman merkin virheitä väli merkkiä ei tarki steta lainkaan '+' tarkoittaa 1800-lukua '-' tarkoittaa 1900-lukua 'A' tarkoittaa 2000-lukua 30 virheellinen: 120464-1 23C Error t 120464123 % 31 = 14 = 'E' Error VAI? virheellinen: 120464-1 23C oikein: 120464-1 23E V oidaan matemaattisesti todistaa, että mikä tahansa yhden merkin virhe synty mäajassa, järjesty snumerossa tai tarkistusnumerossa havaitaan. Esimerkissä viimeinen numero '1' on joko näppäilyvirheen tai muistivian takia vaihtunut numeroksi '3', jolloin henkilötunnusta seuraavan kerran käytettäessä tarkistuskoodi laskee jakojäännöksen olevan 14 eli tarkistusmerkin pitäisi olla kirjain 'E'. Koska näin ei ole, henkilötunnus havaitaan virheelliseksi. Virhettä ei voi korjata, koska sama virheilmoitus olisi voinut yhtä hyvin aiheutua tilanteesta, jossa henkilötunnuksen tarkistusmerkki olisi vaihtunut E'stä C'ksi.

Esimerkki ohjelmistotason tarkistusmerkki henkilötunnuksessa Henkilötunnus: tarkistusmerkki: jakojäännös: ( 120464-121 c,z f 120464121 % 31 = 12 / (oikein) ) 0123456789ABCDEFGHJKLMNPRSTUVWXY 0 1 101113 12 14 30 ( Tarkistusmerkin avulla voidaan tarkistaa, että mikään yksi merkki ei ole väärin havaitsee kaikki yhden merkin virheet havaittua virhettä ei voi automaattisesti korjata ei havaitse kaikkia kahden tai useamman merkin virheitä väli merkkiä ei tarki steta lainkaan '+' tarkoittaa 1800-lukua '-' tarkoittaa 1900-lukua 'A' tarkoittaa 2000-lukua virheellinen: 120464-123E OKt 120464123 % 31 = 14 = 'E' on alkuaan syötässä näppäilyvirheitä vastaan ja se toimii oikein hyvin yhden virheen paljastamiseksi. Jos virheitä on 2 tai useampi, niin on varsin mahdollista, että virhettä ei havaita. Esimerkissä viimeinen 1-merkki on vaihtunut 3:ksi, mutta tätä virhettä kompensoi täsmälleen tarkistusmerkin vaihtuminen C-kirjaimesta E-kirjaimeksi. Useamman virheen sattuessa on kuitenkin vain noin 3\'o (eli 1/31) todennäköisyys, että virhe1tä ei havaita.

Esimerkki ohjelmistotason tarkistusmerkki henkilötunnuksessa Henkilötunnus: 120464-1 21 c (oikein) / "4, ' 120464121 % 31 = 12 / tarkistusmerkki: jakojäännös: 0123456789ABCDEFGHJKLMNPRSTUVWXY.1.1.13 0 1 10 12 14 30 Tarkistusmerkin avulla voidaan tarkistaa, että mikään yksi merkki ei ole väärin havaitsee kaikki yhden merkin virheet havaittua virhettä ei vei automaattisesti korjata väli merkkiä ei tarki steta lainkaan '+' tarkoittaa 1800-lukua '-' tarkoittaa 1900-lukua 'A' tarkoittaa 2000-lukua olemassa: 030405-0SOC < ei oteta käyttöön: 030405A060C virheellinen: 1-::uqoqfi OK+ 120464121 % 31 = 12 = 'C' Henkilötunnuksen kehity shistorian vuoksi tarkistusmerkki ei ota huomioo1 välimerkkiä lainkaan. Tämän vuoksi mitään välimerkissä olevia virheitä ~ i havaita lainkaan, mikä aiheuttaa huomattavia rajoituksia välimerkin käyttämiseen ohjelmistoissa. Sitä ei itse asiassa saisi lainkaan hyödyntää, mistä myös seuraa, että hetussa olevaa 6-numeroista syntymäaikaakaan ei oikeastaan saisi käyttää syntymäaikatietona, koska sen vuosiluku on puutteellinen. Väestörekisterikeskuksessa välimerkkiä ei huomioida ja kaikki käytössä olevat henkilötunnukset eroavat toisistaan myös jonkun mlun merkin kuin välimerkin osalta. Asia1 olisi voinut suunnitella paremminkin.

Bittitason tarkistukset esim. hetu: 120464-121 C Muistipiirit, väylät, tiedonsiirrot. levyt Monenko bitin muuttumisvirheet havaitaan? Monenko bitin muuttumisvirheet voidaan automaattisesti korjata? Montako ylimääräistä bittiä tarvitaan virheiden havaitsemiseen tai korjaamiseen? lisämuistitilan tai lisälevytilan tarve? lisäjohtimien tarve väylällä? Tehdäänkö tarkistukset laitteisto vai ohjelmistotasolla? paljonko aikaa tarkistuksiin kuluu? Bittitason tarkistuksia tehdään koko ajan tietoa käsiteltäessä laitteistossa. Kaikki suorittimen ulkoiset ja sisäiset rekisteri! ja suorittimen sisäiset väylät on laitteistotasolla suojattu virheitä vastaan. Tavallisten pöytäkoneiden muistikin voi olla virheitä korjaavaa lajia, jolloin myös muistipiireihin sisältyy yhden virheen havaitsemi>- ja korjauspiirit. Laitteiston väylät on yleensä suojattu, ainakin jollakin tavalla. Levytiedostotkin voi olla suojattu, mutta niitä varten on kehitetty ihan omat vähän monimutkaisemmat standardit, joista puhumme myöt emmin kurssilla.

Bittitason tarkistukset esim. hetu: 120464-121 C Muistipiirit, väylät, tiedonsiirrot, levyt Monenko bitin muuttumisvirheet havaitaan? Monenko bitin muuttumisvirheet voidaan automaattisesti korjata? Montako ylimääräistä bittiä tarvitaan virhe havaitsemiseen tai korjaamiseen? lisämuistitilan tai lisälevytilan tarve? lisäjohtimien tarve väylällä? Tehdäänkö tarkistukset laitteisto vai ohjelmistotasolla? paljonko aikaa tarkistuksiin kuluu? jos yhden virheen hetu: 1 bitti (2 tai useampi, jos samassa merkissä) todennäköisyys: 1/1 000 000 eli 1 o-6 niin kahden samanaikaisen virheen todennäköisyys: (1/1 000 000)2 eli 1 o- 1 2 ja kolmen samanaikaisen virheen todennäköisyys: (1/1 000 000)3 eli 1 o- 1 8 muutaman perusteella. Ehkä tärkein piirre on se, kuinka monen bitin muuttuminen vielä varmasti havaitaan. Mitä useamman bitin muuttuminen varmasti havaita3n, sitä parempi. Usein virheet ovat satunnaisia ja useamman virheen samanaikainen tapahtuminen on huomattavasti epätodennäköisempää kuin yhden virheen tapahtuminen. Tällä tavoin periaatteessa voidaan laskea riski sille, että virhe jää havaitsemat!< ja mahdollisesti aiheuttaa häiriön. Havaitsematloman virheen todennäköisyys on siis hyväksytty ja harkittu riski.

Bittitason tarkistukset esim. hetu: 120464-121 C Muistipiirit, väylät, tiedonsiirrot, levyt Monenko bitin muuttumisvirheet havaitaan? Monenko bitin muuttumisvirheet voidaan automaattisesti korjata? hetu: 0 bittiä (virheitä ei voi koskaan korjata) Montako ylimääräistä bittiä tarvitaan virheiden havaitsemiseen tai korjaamiseen? lisämuistitilan tai lisälevytilan tarve? lisäjohtimien tarve väylällä? Tehdäänkö tarkistukset laitteisto vai ohjelmistotasolla? paljonko aikaa tarkistuksiin kuluu? on, että monen automaattisesti havaita ja korjata. voi olla, että 1 bitin virheet voidaan kaikki havaita ja korjata, kahden bitin virheet kaikki havaitaan mutta niitä ei voi korjata, mutta osa kolmen bitin virheistä jää jo havaitsematta. Riskianalyysissä sitten pätellään, kuinka todennäköinen kolmen bitin virhe on ja kuinka pahan häiriön se voisi mahdollisesti aiheuttaa.

Bittitason tarkistukset esim. hetu: 120464-121 C Muistipiirit, väylät, tiedonsiirrot, levyt Monenko bitin muuttumisvirheet havaitaan? Monenko bitin muuttumisvirheet voidaan automaattisesti korjata? Montako ylimääräistä bittiä tarvitaan virheiden havaitsemiseen tai korjaamiseen? lisämuistitilan tai lisälevytilan tarve? lisäjohtimien tarve väylällä? hetu: 1 merkki eli 10% lisää hetu: 11 merkkiä eli 88 b tark.merkki: 8 b Tehdäänkö tarkistukset laitteisto vai ohjelmistotasolla? paljonko aikaa tarkistuksiin kuluu? Tilakustannus on merkittävä virheen havaitsemis/k01jaus-järjestelmien piirre. Hetussa ylimääräinen tilakustannus on 10%, mikä ei ole ihan pieni määrä. Suorittimen sisäisen väylän suojaamisessa virheitä korjaavilla biteillä tarvitaan usein vielä enemmän ylimääräisiä bittejä. Toisaalta, tätä ei pidä ajatella kovin negatiivisesti. Suorittimen toiminnassa on kaikkialla muuallakin tärkeimpänä tavoitteena, että se ei tee minkäänlaisia virheitä. Virheiden torjunta ei siis ole mitenkään ylimääräistä vaan olennainen osa normaalia toimintaa.

Bittitason tarkistukset esim. hetu: 120464-121 C Muistipiirit, väylät, tiedonsiirrot, levyt Monenko bitin muuttumisvirheet havaitaan? Monenko bitin muuttumisvirheet voidaan automaattisesti korjata? Montako ylimääräistä bittiä tarvitaan virheiden havaitsemiseen tai korjaamiseen? lisämuistitilan tai lisälevytilan tarve? lisäjohtimien tarve väylällä? Tehdäänkö tarkistukset laitteisto vai ohjelmistotasolla? paljonko aikaa tarkistuksiin kuluu? hetu: ohjelmistotasolla Useat virheen havaitsemis- ja korjausalgoritmit voidaan yhtä hyvin toteuttaa laitteistolla tai ohjelmistolla. Kumpaa tapaa käytetään, riippuu muista parametreista kuten algoritmin nopeus- ja muokattavuusvaatimuksista. Esimerkiksi hetun tarkistaminen tehdään kuitenkin aina ohjelmistotasolla, koska (a) se on aika lailla vain suomalainen piirre ja (b) hetua käsiteltäessä sen tarkistukseen kuluu oikeastaan vain hyvin vähän aikaa muuhun käsittelyaikaan verrattuna. Toisaalta, esimerkiksi muistiväylän virheenkorjaus on pakko nopeusvaatimusten vuoksi tehdä laitteistolla.

Pariteettibitti Yksi ylimääräinen bitti per tietoalkio tavu, sana, tietoliikennepaketti? 1001110? 10011101 10001111 00110111 00011100 01010001 11100011 00001111 00101010????????... Parillinen (tai pariton) pariteetti: 1-bittien lukumäärä pariteettibitti mukaanlukien on aina parillinen (tai pariton) Havaitsee 1 bitin muuttumisen Ei voi korjata koskaan Esimerkkejä (parillinen pariteetti) 0010001? 10001101 1111 001? on käyttää varataan ylimääräinen bitti tiedon muuttumattomuustarkistusta varten. Jos tietoal on 7-bittiä, niin pariteettibitin kanssa alkion pituus on sitten 8 bittiä. Toisaalta, jos 8-bittistä merkkiä halutaan suojata pariteettibitillä, niin tietoalkion piiuudeksi tulee inhoiltavai 9 bittiä. Tällöin usein pariteettibitit sijoitetaankin omaan tavuunsa siten, että esimerkiksi joka 9. tavu sisältää pariteettibitin edeltäville 8 tavulle. Tiedon tarkistus on tietenkin tällöin vähän epätriviaalia.

Pariteettibitti Yksi ylimääräinen bitti per tietoalkio tavu, sana, tietoliikennepaketti? Parillinen (tai pariton) pariteetti: 1-bittien lukumäärä pariteettibitti mukaanlukien on aina parillinen (tai pariton) 11011101 1101 1000 Havaitsee 1 bitin muuttumisen Ei voi korjata koskaan Esimerkkejä (parillinen pariteetti) 0010001? 1000 1 1 01 1111 001? Pariteettibitti lasketaan data-biteistä sillä tavoin, että 1-bittien kokonaislukumäärä on parillista pariteettia käytettäessä parillinen. Esimerkiksi lntelin arkkitehtuureissa on tilarekisterissä erityinen pariteettibitti, joka ilmaisee operaation tuloksen pariteetin jokaisen operaation jälkeen. Pariteettibitin aivo lasketaan ja kirjoitetaan joka kerta uuden aivan yh te yd ess~ ja pariteettibitin oikeellisuus lasketaan joka kerta kyseistä tietoa käytettäessä.

Pariteettibitti Yksi ylimääräinen bitti per tietoalkio tavu, sana, ti etoliikennepaketti? Parillinen (tai pariton) pariteetti: 1-bittien lukumäärä pariteettibitti mukaanlukien on aina parillinen (tai pariton) alkuper. oikea data 11011101 Havaitsee 1 bitin muuttumisen Ei voi korjata koskaan 1101 1001 11011100 parillinen pariteetti, 1-bittejä 5 kpl Q VIRHE JOSSAKIN Esimerkkejä (parillinen pariteetti) 0010001? 1000 1101 1111 001? tahansa yhden kahden muutok sia, koska ne kumoavat toisensa. Kuten muissakin tiedon muuttumattomuuden valvontamenetelmissä, pariteetibitti siis talletetaan aivan samalla tavalla kuin varsinaiset databititkin. On myös mahdollista, että pariteettibitti itse on muuttunut ja kaikki databitit ovat ennallaan, jolloin virheellinen pariteettibitti itse asiassa antaa tavallaan väärän hälyytyksen, koska kaikki databitit ovat edelleen oikein. Virheellisen pariteetin tapauk sessa meillä ei ole mitään tietoa virheen sijainnista, joten virheitä ei voi korjata.

Pariteettibitti Yksi ylimääräinen bitti per tietoalkio tavu, sana, tietoliikennepaketti? Parillinen (tai pariton) pariteetti: 1-bittien lukumäärä pariteettibitti mukaanlukien on aina parillinen (tai pariton) Havaitsee 1 bitin muuttumisen Ei voi korjata koskaan Esimerkkejä (parillinen pariteetti) 0010001? 1000 1101 1111 001? Harjoitellaanpa vähän. Mikä pariteettibitin aivo suojaa näitä 7 data-bittiä?

Pariteettibitti Yksi ylimääräinen bitti per tietoalkio tavu, sana, ti etoliikennepaketti? Parillinen (tai pariton) pariteetti: 1-bittien lukumäärä pariteettibitti mukaanlukien on aina parillinen (tai pariton) Havaitsee 1 bitin muuttumisen Ei voi korjata koskaan Esimerkkejä (parillinen pariteetti) 00100010 1000 1101 1111 001? 2 kpl 1-bittejä, siis parit. bitti on 0 Kä ~1 ös,>ä on on kappaletta. olla nolla, jotta kaikkien bittien 1-bittien lukumäärä pysyy parillisena.

Pariteettibitti Yksi ylimääräinen bitti per tietoalkio tavu, sana, ti etoliikennepaketti? Parillinen (tai pariton) pariteetti: 1-bittien lukumäärä pariteettibitti mukaanlukien on aina parillinen (tai pariton) Havaitsee 1 bitin muuttumisen Ei voi korjata koskaan Esimerkkejä (parillinen pariteetti) 0010001? 1000 1101 1111 001?

Pariteettibitti Yksi ylimääräinen bitti per tietoalkio tavu, sana, ti etoliikennepaketti? Parillinen (tai pariton) pariteetti: 1-bittien lukumäärä pariteettibitti mukaanlukien on aina parillinen (tai pariton) Havaitsee 1 bitin muuttumisen Ei voi korjata koskaan Esimerkkejä (parillinen pariteetti) 0010001? 1000 1101 1111 0011 9 kpl 1-bittejä, siis parit. bitti on 1 1-bittejä on databiteissä 9 kappaletta, joten parilliseen pariteettiin päästäksemme pariteettibitin aivon tulee olla 1. r!-

Hamming-etäisyys Miten monta bittiä missä tahansa koodijärjestelmässä (esim. ISO Latin-9) esitetyssä koodissa täytyy muuttua, että se muuttuu johonkin toiseen (mihin tahansa) lailliseen koodiin? ISO Latin-9'n Hamming-etäisyys on 1 Pariteettibitillä vahvistettuna ISO Latin-9'n Hamming-etäisyys on 2 mikä todennäköisyys kahden biti n virheeseen? riittävän pieni?..... Prob {2 biti n virhe} = ( Prob {yhden biti n virhe} ) 2 m1ten panteettlbltll SIJOitetaaan? joka 9. tavu on parit. tavu? Prob {3 bitin virhe} = ( Prob {yhden bitin virhe}) 3 Tiedon muuttumattomuuden käsittelyssä Hamming-etäisyys on tärkeä. Se kertoo, kuinka monta bittiä pitää vähintään muuttua, jotta laillinen tieto voisi muuttua toiseksi lailliseksi tiedoksi. Jos bittejä muuttuu esimerkiksi virheen takia vähemmän kuin Hamming-etäisyyden osoittama määrä, niin tuloksena on aina jokin laiton esity stapa, jolloin virhe varmasti havaitaan. Jos taas virheellisiä muutoksia on Hamming-etäisyyden osoittama määrä, niin on varsin mahdollista, että uusi bittiyhdistelmä on jokin laillinen merkki ja virhe jää havaitsematta.

Hamming-etäisyys Miten monta bittiä missä tahansa koodijärjestelmässä (esim. ISO Latin-9) esitetyssä koodissa täytyy muuttua, että se muuttuu johonkin toiseen (mihin tahansa) lailliseen koodiin? ISO Latin-9'n Hamming-etäisyys on 1 'A' = Ox41 = 0100 0001 'B' = Ox42 = 0100 0010 ~ 'C' = Ox43 = 0100 0011 Pariteettibitillä vahvistettuna ISO Latin-9'n Hamming-etäisyys on 2 mikä todennäköisyys kahden biti n virheeseen? H kahden bitin ero yhden bitin ero riittävän pieni?..... Prob {2 biti n virhe} = ( Prob {yhden biti n virhe} ) 2 m1ten panteett1b1tl1 SIJOitetaaan? joka 9. tavu on parit tavu? Prob {3 bitin virhe} = ( Prob {yhden bitin virhe} ) 3 Esimerkiksi 8-bittisessä ISO Latin-9 koodistossa A- ja 8 -kirjainten esitysmuodoissa on kahden bitin ~ ro, kun t ~~~ R- j ~ r.-k i rj ~ int P. n välillä nn v:=~ in yhrlp.n hitin P.rn PiP.nimmiiiÄÄn ~ ii ~ 1 ~ tin -!=1 k nnrl i ~ t n~ käytt ÄP.n v~ in yhrlp.n bitin muuttuminen voi muuttaa laillisen merkin (esim. '8') toiseksi lailliseksi merkiksi (esim. 'C'). Koodisten Hamming-etäisyys on siten 1.

Hamming-etäisyys Miten monta bittiä missä tahansa koodijärjestelmässä (esim. ISO Latin-9) esitetyssä koodissa täytyy muuttua, että se muuttuu johonkin toiseen (mihin tahansa) lailliseen koodiin? ISO Latin-9'n Hamming-etäisyys on 1 'B' = Ox42 = 0100 0010 0 'C' = Ox43 = 0100 00111 pariteetti bitti / ~ kahden bitin ero Pariteettibitillä vahvistettuna ISO Latin-9'n Hamming-etäisyys on 2 mikä todennäköisyys kahden biti n virheeseen? riittävän pieni?..... Prob {2 biti n virhe} = ( Prob {yhden biti n virhe} ) 2 m1ten panteett1b1tt1 SIJOitetaaan? joka 9. tavu on parit. tavu? Prob {3 bitin virhe} = ( Prob {yhden bitin virhe}) 3 Jos jokaiseen merkkiin lisätään pariteettibitti, niin Hamming-etäisyydeksi tulee 2. Nyt jokainen 1 bitin virhe aiheuttaa virheellisen pariteetin, jolloin kyseinen 9-bitin yhdistelmä ei vastaa mitään laillista Latin-9 merkkiä. Jos yhden bitin muuttumisen todennäköisyys on vaikkapa 1 miljoonasta, niin sen voidaan ajatella olevan liian suuri riski. Hamming-etäisyyden ollessa kaksi havaitsematloman virheen todennäköisyys on vain 1 biljoonasta, joka sitten voikin olla jo tarpeeksi pieni kyseiseen sovellukseen. Jos tämäkään ei riitä, käytetään koodistoa, jossa Hamming-etäisyys on 3, jolloin havaitsematloman virheen todennäköisyys on jo 1 triljoonasta.

Virheen korjaava Hamming-koodin idea Databitit 11 00 A Jokainen databitti kuuluu erilaiseen kokelmaan pariteettijoukkoja ~-/..~ o-;-...;:,~""ir Tämä 0-bitti kuuluu joukkoihin A ja C, eikä mikään muu databitti kuulu täsmälleen joukkoihin A ja C Tämä 1-bitti kuuluu kaikkiin joukkoihin A, B ja C, eikä mikään muu databitti kuulu kaikkiin joukkoihin A, B ja C [Tane99, Fig. 2-14) ole kanssa, idean isä. nyt tilannetta, jossa meillä on vain 4 databittiä. sijoitetaan pariteettiijokkiin A, 8 ja C sillä tavoin, että jokainen databitti kuuluu uniikkiin kokoelmaan pariteettiluokkia.

Virheen korjaava Hamming-koodin idea Pariteetti luokan A pariteetti bitti Databitit 11 00 Pariteetti bitit A=O B=O C=1 A A ' ' Tämä bitti kuuluu Tarvitaan 3 kpl pariteetti bittejä, yksi kullekin pariteetti Iuokaiie (parillinen pariteetti) pariteettijoukkoon A, mutta ei joukkoon B tai C Pariteetti luokan C -+--pariteettibitti Tämä bitti kuuluu pariteettijoukkoihin B ja C, mutta ei joukkoon A Jokainen data- ja pariteettibitti kuuluu uniikki in kokoelmaan pariteettijoukkoja [Tane99, Fig. 2-14) Jalkaiseen pariteettiluokkaan sisältyy yksi pariteettibitti, joka asetetaan parilliseen pariteettiin. Bittejä on nyt yhteensä 7 kpl, jotka voidaan kukin identifioida noilla kolmella pariteettibitillä. Kolmella bitillähän voidaan esittää 8 eri tilaa, joten systeemissä olisi vielä tilaa yhdelle databitille lisää. Toisaalta, kaksi pariteettiluokkaa ei riittäisi, koska kahdella pariteettibitillä ei pysty identifiomaan kuutta eri bittiä. Tyydytään nyt kuitenkin näihin neljään databittiin. Olennaista on siis kuitenkin se, että jokainen Tstä bitistä kuuluu erilaiseen kokoelmaan pariteettiluokkia.

Virheen korjaava Hamming-koodin idea Databitit 11 00 Pariteetti bitit A=O B=O C=1 ' ' A A virheellinen bitti [Tane99, Fig. 2-14) Tarkastellaan nyt tilannetta, jossa tapahtunut virhe korjataan. Oletetaan, että tietty 0-bitti on syystä tai toisesta muuttunut ykköseksi. Tässä esimerkissä se sattuu olemaan databitti, mutta virheen korjaava algoritmi toimii ihan yhtä hyvin myös pariteettibitin kohdalla.

Virheen korjaava Hamming-koodin idea Databitit 11 00 Pariteetti bitit A=O B=O C=1 ' ' A virheellinen pariteetti bitti Pariteettiluokkien A ja C pariteettibitit havaitsevat virheen. Vain yksi bitti (data-biteistä ja pariteettibiteistä) on sellainen, että se kuuluu täsmälleen pariteettiluokkiin A ja C. Virheellinen bitti identifioidaan. [Tane99, Fig. 2-14) Dat;3a seuraavan ovat nostavat asiaankuuluvan 'metakan'. Virheenkorjausalgoritmi tutkii tilannetta ja havaitsee, että ainoastaan yksi bitti seitsemästä on sellainen, joka kuuluu pariteettiluokkiin A ja C, mutta ei B'hen, joten siis tuon bitin täytyy oli< virheellinen.