Sunteți pe pagina 1din 8

ARHITECTURA CALCULATOARELOR 2006/2007 CURSUL 4

1.7 Erori de comunicaie


La transferarea informaiilor ntre diverse componente ale calculatorului sau la transmiterea de la pmnt la lun i napoi sau, de ce nu, n cazul simplei stocri a datelor, exist posibilitatea ca irul de bii primii, napoi s nu fie identic cu cel original. Particulele de praf sau grsime de pe suprafaa magnetic a unui dispozitiv de stocare sau un circuit defect pot duce la nregistrarea sau citirea incorect a datelor. Mai mult, n cazul anumitor tehnologii chiar i radiaia de fond poate altera datele stocate n memoria principal a unui calculator. Pentru a rezolva asemene probleme au fost dezvoltate diferite tehnici de codificare care permit detectare i chiar corectare erorilor. n prezent datorit faptului c sunt implementate pe scar larg n componentele interne ale sistemelor de calcul, ele sunt invizibile pentru cei care utilizeaz calculatoarele. Cu toate acestea, prezena lor este important i reprezint un aport semnificativ la cercetarea tiinific. De fapt, multe dintre aceste metode reprezint metode importante ale contribuiilor aduse de matematica teoretic. Acesta este motivul pentru care vom studia unele dintre aceste tehnici, pe care se bazeaz fiabilitatea sistemelor actuale.

1.7.1 Bii de paritate


O metod simpl pentru detectarea erorilor se bazeaz pe regula c dac fiecare cuvnt binar manipulat are un numr impar de bii 1, atunci apariia unui cuvnt cu un numr par de bii de 1 semnalizeaz o eroare. Pentru a folosi aceast regul, avem nevoie de un sistem n care fiecare cuvnt binar s conin un numr impar de bii 1, cea ce se obine uor prin adugarea unui bit suplimentar, bitul de paritate (parity bit), la fiecare cuvnt binar dintr-un sistem deja existent (care de obicei se plaseaz pe poziia bitului cel mai semnificativ). (Procednd astfel codul ASCII de opt bii devine un cod de nou bii, iar o valoare reprezentat n complement fa de doi pe aisprezece bii devine un cuvnt binar pe aisprezece bii). n fiecare caz vom atribui noului bit valoarea 1 sau 0, astfel nct cuvntul rezultat s aib un numr impar de1. Dup cum se poate observa n figura 1.27, codul ASCII pentru caracterul A se transform n 101000001 (bitul de paritate are valoarea 1), iar codul ASCII pentru caracterul I devine 001001001 (bitul de paritate are valoarea 0). Dei cuvntul de opt bii asociat lui A are un numr par de bii 1, iar cuvntul de opt bii asociat lui I are un numr par de bii 1, ambele cuvinte de nou bii conin un numr par de bii 1. Dup aceast modificare a sistemului de codificare un cuvnt binar cu nu numr par de bii 1 semnalizeaz faptul c s-a produs o eroare i deci cuvntul respectiv este incorect. Sistemul particular de paritate descris pn acum poart numele de paritate impar (odd parity), deoarece a fost astfel proiectat nct fiecare cuvnt s conin un numr impar de bii 1. O alt tehnic utilizat paritatea par (even parity). ntr-o astfel de situaie fiecare cuvnt trebuie s conin un numr par de bii 1,iar prezena unei erori este semnalat de apariia unui cuvnt cu un numr impar de bii 1.

CURS 4 AC 2006/2007

1/8

Figura 1.27 Modificarea codurilor ASCII pentru caracterele A i I astfel nct s aib paritate impar Codul ASCII pentru A conine un numr par de bii 1 Bit de paritate 1 0 1 0 0 0 0 0 1 Cuvntul complet are un numr impar de bii 1 Codul ASCII pentru I conine un numr par de bii 1 Bit de paritate 0 0 1 0 0 1 0 0 1

Cuvntul complet are un numr impar de bii 1


n prezent, utilizarea biilor de paritate la memoria principal a unui calculator nu este ceva neobinuit. Dei ne nchipuim aceste sisteme ca avnd celule de memorie de opt bii, n realitate ele pot utiliza celule de nou bii, dintre care unul este folosit ca bit de paritate. Ori de cte ori se furnizeaz circuitelor de memorie un cuvnt de opt bii pentru a fi stocat acestea i adaug un bit de paritate i memoreaz apoi cuvntul de nou bii rezultat. Mai trziu, cnd se solicit acel cuvnt, circuitele de memorie verific paritatea cuvntului de nou bii. n cazul n care controlul de paritate nu indic nici o eroare, memoria elimin bitul de paritate i furnizeaz n deplin siguran cuvntul de opt bii rmas. Astfel, memoria retruneaz cei opt bii de date mpreun cu nu semnal de avertizare care precizeaz c ablonul binar rezultat s-ar putea s nu coincid cu cuvntul stocat la nceput n memorie. irurile lungi de bii sunt adesea nsoite de un grup de bii de paritate dispui ntr-un octet de control (checkbyte ). Fiecare bit din acest grup este un bit de paritate asociat unui grup de bii mprtiai de-a lungul irului de bii. De exemplu, un bit de paritate poate fi asociat cu fiecare al optulea bit din ir ncepnd cu primul bit din ir, n timp ce un alt bit de paritate poate fi asociat cu fiecare al optulea bit ncepnd de la al doilea bit din ir. Procednd astfel se detecteaz mai uor pachete de erori ce pot aprea n irul de bii iniial, deoarece ele survin n domeniile de verificare ale mai multor bii de paritate. Printre variantele principiului de verificare cu octet de control se numr schemele de detecie a erorilor cunoscute sub numele de sume de control (checkbyte sums) i controlul cu coduri ciclice (cyclic redundancy check CRC).

1.7.2 Coduri corectoare de erori


Cu toate c utilizarea bitului de paritate permite detecia unei erori singulare, el nu furnizeaz informaia necesar pentru corectarea erori. Muli oameni sunt surprini de faptul c pot fi concepute coduri corectoare de erori (error-corecting codes), astfel nct erorile opt s fie nu doar detectate ci i corectate. n definitiv, intuiia ne spune c nu putem corecta erorile
CURS 4 AC 2006/2007 2/8

Figura 1.28 Exemplu de cod corector de erori Simbol A B C D E F G H Cod 000000 001111 010011 011100 100110 101001 110101 111010

dintr-un mesaj recepionat dac nu cunoatem deja informaia coninut de mesaj. Totui, n figura 1.28 este prezentat un cod simplu care deine aceast proprietate de corecie a erorilor. Pentru a nelege modul n care funcioneaz acest cod, vom defini distana Hamming dintre dou cuvinte binare (denumit astfel n onoarea lui R.W. Hamming, care a nceput cercetarea codurilor corectoare de erori n urma dezamgirii fa de lipsa de fiabilitate a primelor maini de calcul bazate pe relee din anii 1940) ca fiind numrul de bii prin care difer cele dou cuvinte. De exemplu, distana Hamming dintre simbolurile A i B din codul prezentat n figura 1.28 este patru, iar distana dintre B i C este trei. Caracteristica important a codului prezentat este aceea c oricare dou cuvinte sunt separate de o distan Hamming de cel puin trei. Dac n urma defectrii unui dispozitiv este modificat un singur bit, eroare poate fi detectat prin faptul c rezultatul nu va fi un cuvnt de cod valid. (Trebuie s modificm cel puin trei bii din oricare cuvnt de cod nainte ca acesta s apar ca alt cuvnt de cod valid). Dac apare o singur eroare ntr-unul dintre cuvintele codului prezentat n figura 1.28, putem descoperi care era cuvntul de cod iniial. ntr-adevr, cuvntul modificat va fi o distan Hamming de numai un bit fa de cuvntul de cod iniial, dar la o distan de cel puin doi bii de orice alt cuvnt de cod valid. Pentru a decodifica un mesaj, comparm pur i simplu fiecare Figura 1.29 Decodificarea cuvntului 010100 utilizndu-se codul din figura 1.28 Caracter A B C D E F G H 2 4 3 1 (Distana cea mai mic) 3 5 2 4

ablon de bii recepionat cu cuvintele de cod, pn gsim unul care este situat la o distan de cel mult un bit fa de cuvntul verificat. Vom considera c acesta este simbolul corect pe care trebuie s-l decodificm. S presupunem de exemplu c recepionm 010100. Dac vom
CURS 4 AC 2006/2007 3/8

compara acest cuvnt binar cu cuvintele de cod, vom obine tabelul din figura 1.29. n consecin, vom putea s tragem concluzia c a fost transmis caracterul D, acesta fiind cel mai apropiat. Aa cum se poate observa, aplicnd aceast tehnic asupra codului din figura 1.28 putem de fapt s detectm apariia a pn la dou erori ntr-un cuvnt i s corectm una dintre ele. Dac am fi proiectat codul astfel nct fiecare cuvnt de cod s se afle la o distan Hamming de cel puin cinci bii fa de celelalte cuvinte de cod, am fi putut s detectm pn la patru erori pe cuvnt i s corectm pn la dou erori. Desigur, realizarea de coduri eficiente care s aib distane Hamming mari u este o tehnic simpl. De fapt, aceast activitate intr n preocuprile unei ramurii a matematici denumit teoria decodificrii algebrice.

1.7.3 Aspecte ale aplicrii n practic


Dup cum am menionat mai devreme, n prezent utilizarea biilor de paritate sau a codurilor corectoare de erori este aproape ntotdeauna legat de nsi construcia echipamentului i poate fi arareori perceput de cel care lucreaz la calculator. Utilizatorul obinuit al calculatorului poate fi eventual interesat de aceste concepte atunci cnd trebuie s conecteze dou echipamente, cum ar fi o imprimant i un calculator. n asemenea cazuri, majoritatea dispozitivelor posed comutatoare care permit alegerea tehnicii de comunicaie care s fie utilizat. n aceste situaii, este responsabilitatea utilizatorului s ajusteze comutatoarele astfel nct ambele dispozitive s foloseasc aceiai tehnic de comunicare. De exemplu, v putei da seama i singur c un calculator care emite caractere cu o paritate impar i o imprimant care se ateapt s recepioneze caractere cu paritate par nu se vor nelege deloc. Decizia ntre a se utiliza verificarea de paritate, un cod corector de erori sau un alt sistem de tratare a erorilor depinde att de aplicaia corect, ct i de costurile acceptate pentru creterea fiabilitii. Dup cum am menionat deja, verificarea paritii este utilizat n multe sisteme de memorie ale calculatoarelor. Codurile corectoare de erori sunt folosite adesea de unitile de discuri de mare capacitate, unde nevoia de corectitudine este mai mare dect costurile suplimentare aprute datorit creterii complexitii. Desigur, nici un sistem de tratare a erorilor nu este complet sigur. Sistemele cu paritate nu pot detecta apariia unui numr par de erori, iar apariia prea multor erori ntr-un singur cuvnt al unui cod corector de erori poate avea ca rezultat decodificarea unui alt cuvntde cod, valid dar totui incorect. Memoriile calculatoarelor pot ocazional s provoace erori, datorit variaiilor tensiunii de alimentare, sau altor cauze. Pentru protecia la aceste erori, unele memorii folosesc coduri detectoare sau corectoare de erori. Cand se folosesc aceste coduri, sunt adaugai bii suplimentari fiecrui cuvnt de memorie, ntr-un mod special. Cnd un cuvnt este citit din memorie, biii suplimentari sunt verificai pentru a sesiza prezena unei erori. Pentru a ntelege cum sunt tratate erorile, este necesar s privim cu atentie la ce este ntradevar o eroare. Presupunei c un cuvnt de memorie este compus din m bii de date, la care vom aduga r bii redundani, sau de control. S presupunem c lungimea total este n=m+r. Un ir de n bii coninnd m bii de date i r bii de control se numete cuvnt de cod pe n bii.

CURS 4 AC 2006/2007

4/8

Fiind date oricare dou cuvinte de cod, s zicem 10001001 i 10110001, se poate determina ci bii corespondeni difer. n acest caz, difer 3 bii. Pentru a determina ci bii difer, se aplic la nivel de bit operaia boolean XOR pentru cele dou cuvinte de cod, i se numar biii 1 rezultai. Numul de poziii n care bii a dou cuvinte difer se numeste distana Hamming. Semnificaia sa este c dac doua coduri sunt la o distan d unul de altul, vor trebui considerate d erori singulare pentru a converti un cod n altul. De exemplu, codurile 11110001 i 00110000 sunt la distanta Hamming 3, deoarece trebuie considerate trei erori singulare pentru a converti un cod n altul. ntr-un cuvant de memorie pe n bii, toate cele 2n combinaii sunt permise, dar datorit modului n care se calculeaz biii de control, numai 2m din cele 2n cuvinte de cod sunt valide. Dac o citire a memoriei intoarce un cuvant de cod invalid, calculatorul tie c a avut loc o eroare de memorie. Dndu-se algoritmul pentru calcularea biilor de control, se poate construi o list cu toate cuvintele de cod permise, i din aceast list s gsim acele dou cuvinte de cod pentru care distana Hamming este minim. Aceast distan este distana Hamming a codului complet. Proprietile de detecie sau corecie de erori ale unui cod depind de distana Hamming. Pentru a detecta d erori singulare, trebuie o distan de d+1, deoarece cu un asemenea cod nu exist posibilitatea ca d erori singulare sa poat schimba un cuvnt de cod valid n alt cuvant de cod valid. n mod asemntor, pentru a corecta d erori singulare, tebuie un cod de distan 2d+1, deoarece astfel codurile permise sunt suficient de departe, nct i cu d modificri codul original este mai aproape dect cellalt cod, deci poate fi unic determinat. Ca un exemplu simplu de cod detector de eroare, considerai un cod cu un singur bit de paritate adugat la biii de date. Bitul de paritate este astfel ales nct numrul de bii 1 n cuvntul de cod s fie par (sau impar). Un asemenea cod are distana 1, deoarece orice eroare singular produce un cuvnt de cod cu paritate greit. Cu alte cuvinte, trebuiesc dou erori singulare pentru a trece de la un cuvnt de cod valid la alt cuvnt de cod valid. Se poate folosi pentru detectarea erorilor singulare. Oricnd un cuvnt coninnd paritate greit este citit din memorie, se semnaleaz o eroare. Programul nu poate continua, dar cel puin nu vor fi prelucrate rezultate incorecte. Ca un exemplu simplu de cod corector de eroare, fie codul cu numai 4 cuvinte de cod valide: 0000000000, 0000011111, 1111100000 i 1111111111. Acest cod are o distan de 5=2x2+1, ceea ce nseamn c poate corecta erori duble. Dac soeste cuvntul de cod 0000000111, receptorul tie c originalul trebuie s fi fost 0000011111 (dac nu este mai mult de o eroare dubla). Dac se ntmpl ca o eroare tripl s modifice 0000000000 n 0000000111, eroarea nu poate fi corectat. Imaginai-v c trebuie s proiectm un cod cu m bii i r bii de control, care va permite corectarea tuturor erorilor singulare. Fiecare din cele 2m cuvinte de memorie permise are n cuvinte de cod nepermise la distana 1. Acestea sunt generate prin inversarea sistematic a fiecaruia din cei n bii din cuvnt. Astfel, fiecare dintre cele 2m cuvinte de memorie permise are nevoie de modele de n+1 bii dedicate (pentru cele n erori posibile i modelul corect). Cum numrul total de modele de bii este 2n, trebuie ca: (n+1)2m 2n.
CURS 4 AC 2006/2007 5/8

Folosind n=m+r, aceast cerina devine: (m + r + 1) 2r. Fiind dat m, se stabilete o limit inferioar pentru numrul biilor de control necesari pentru corectarea erorilor singulare. n figura 1.30 se indic numrul bitilor de control necesari pentru diferite dimensiuni ale cuvntului de memorie. Figura 1.30 Numrul biilor de control care pot corecta o eroare singular. Dimensiunea cuvntului 8 16 32 64 128 256 512 Bii de control 4 5 6 7 8 9 10 Dimensiunea total 12 21 38 71 136 265 522 Procentul depirii 50 31 19 11 6 4 2

Aceast limit inferioar teoretic se poate obine printr-o metod datorat lui Richard Hamming. nainte de a analiza algoritmul lui Hamming, s privim o reprezentare grafic simpl, care ilustreaz clar ideea unui cod corector de eroare pentru un cuvnt pe 4 bii. Diagrama Venn din figura 1.31a conine 3 cercuri, A, B i C, care impreun formeaz 7 regiuni. de exemplu, s codificm cuvantul de memorie pe 4 bii 1100 n regiunile AB, ABC, AC i BC, cte un bit pentru fiecare regiune (n ordine alfabetic). Aceast codificare este prezentat n figura 1.31.
Eroare A 0 1 1 B 0 B C A 0 1 0 0 1 0 B 1 C A 0 1 0 1 1 0 1 C

Bii de paritate Figura 1.31 (a) Codificarea lui 1100. (b) Paritate par adugat. (c) Eroare n AC.

n continuare vom adauga cte un bit de paritate fiecrei regiuni goale, pentru a obine paritate par, ca n figura 1.31b. Prin definiie, suma biilor din fiecare cerc, A, B i C, este
CURS 4 AC 2006/2007 6/8

acum un numr par. n cercul A avem cele patru numere 0, 0, 1 i 1, a cror sum este 2, un numr par. n cercul B avem numerele 1, 1, 0 i 0, a cror sum este deasemenea 2. n sfrit, n C avem acelai lucru. n acest exemplu, cercurile se ntmpl s fie la fel, dar sunt posibile i sume de 0 sau 4. Acest exemplu corespunde unui cuvnt de cod cu 4 bii de date i 3 bii de paritate. S presupunem acum c bitul din regiunea AC se altereaz, schimbandu-se din 0 n 1, ca n figura 1.31c. Calculatorul poate s observe acum c cercurile A i C au paritate greit (impar). Unica modificare a unui singur bit care corecteaz aceasta este s l refac pe AC 0. Astfel calculatorul poate corecta erorile singulare ale memoriei. Acum s vedem cum se poate folosi algoritmul lui Hamming pentru a construi coduri corectoare de eroare pentru cuvinte de memorie de orice dimensiune. ntr-un cod Hamming, r bii de paritate sunt adugai unui cuvnt de m bii, formnd un nou cuvnt de m+r bii. Numerotarea biilor ncepe de la 1, nu de la 0, bitul 1 fiind bitul din stnga (cel mai semnificativ). Toi biii al cror numr este putere a lui 2 sunt bii de paritate, restul sunt folosii pentru date. De exemplu, la un cuvant de date de 16 bii, se adaug 5 bii de paritate. Biii 1, 2, 4, 8 i 16 sunt bii de paritate, iar restul sunt bii de date. n total, cuvntul de memorie are 21 bii. n acest exemplu vom folosi (arbitrar) paritatea par. Fiecare bit de paritate verific anumite poziii din cuvnt: bitul de paritate este ales astfel nct suma biilor 1 din zona verificat s fie un numr par. Poziiile biilor verificate de ctre biii de paritate sunt: Bitul 1 verific biii: 1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21. Bitul 2 verific biii: 2, 3, 6, 7, 10, 11, 14, 15, 18, 19. Bitul 4 verific biii: 4, 5, 6, 7, 12, 13, 14, 15, 20, 21 Bitul 8 verific biii: 8, 9, 10, 11, 12, 13, 14, 15. Bitul 16 verific biii: 16, 17, 18, 19, 20, 21. n general, bitul b este verificat de biii b1, b2, ... bj, astfel nct b1+b2+...+bj=b. De exemplu, bitul 5 este verificat de biii 1 i 4, deoarece 1+4=5. Bitul 6 este verificat de biii 2 i 4, deoarece 2+4=6, i tot aa. n figura 1.32 se arat construcia unui cod Hamming pentru cuvntul de memorie pe 16 bii 1111000010101110. Cuvntul de cod pe 21 bii este 001011100000101101110. Pentru a vedea cum funcioneaz corectarea erorilor, s vedem ce s-ar ntmpla dac bitul 5 ar fi inversat printr-o variaie a tensiunii de alimentare. Noul cuvnt de cod va fi 001001100000101101110, n loc de 001011100000101101110.

0 1

0 2

1 3

0 4

1 5

1 6

1 7

0 8

0 9

0 10

0 11

0 12

1 13

0 14

1 15

1 16

0 17

1 18

1 19

1 20

0 21

Bii de paritate Figura 1.32 Constructia codului Hamming pentru cuvntul de memorie 111000010101110 adugnd 5 bii de control celor 16 bii de date
CURS 4 AC 2006/2007 7/8

Cei 5 bii de paritate vor fi verificai, cu urmtoarele rezultate: Bitul de paritate 1 incorect (1, 3, 5, 7, 9, 11, 13, 15, 17, 19, 21 conine 5 bii 1). Bitul de paritate 2 corect (2, 3, 6, 7, 10, 11, 14, 15, 18, 19 conine 6 bii 1). Bitul de paritate 4 incorect (4, 5, 6, 7, 12, 13, 14, 15, 20, 21 conine 5 bii 1). Bitul de paritate 8 corect (8, 9, 10, 11, 12, 13, 14, 15 conine 2 bii 1). Bitul de paritate 16 corect (16, 17, 18, 19, 20, 21 conine 4 bii 1). Numrul de bii 1 din poziiile 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 i 21 ar trebui s fie par, deoarece se folosete paritatea par. Bitul incorect trebuie s fie unul din cei verificai de bitul de paritate 1, adic 1, 3, 5, 7, 9, 11, 13, 15, 17, 19 sau 21. Bitul de paritate 4 este incorect, deci unul din biii 4, 5, 6, 7, 12, 13, 14, 15 sau 21 este incorect. Eroarea trebuie s fie ntr-unul din biii ambelor liste, adic 5, 7, 13, 15 sau 21. Totui bitul 2 este corect, eliminnd 7 i 15. Similar, bitul 8 este corect, eliminnd 13. n cele din urm, bitul 16 este corect, eliminnd 21. Singurul bit rmas este bitul 5, n care este singura eroare. n acest fel, erorile pot fi corectate. O metod simpl de a gsi bitul incorect este de a calcula biii de paritate. Dac toi sunt coreci, atunci nu este nici o eroare (sau sunt cel puin dou). Apoi se adun toi biii de paritate incoreci, numrnd 1 pentru bitul 1, 2 pentru bitul 2, 4 pentru bitul 4, i tot aa. Suma rezultat reprezint poziia bitului incorect. De exemplu, dac biii de paritate 1 i 4 sunt incoreci, dar 2, 8 i16 sunt coreci, atunci bitul 5 (4+1) a fost modificat.

CURS 4 AC 2006/2007

8/8

S-ar putea să vă placă și