Docsity
Docsity

Prepara i tuoi esami
Prepara i tuoi esami

Studia grazie alle numerose risorse presenti su Docsity


Ottieni i punti per scaricare
Ottieni i punti per scaricare

Guadagna punti aiutando altri studenti oppure acquistali con un piano Premium


Guide e consigli
Guide e consigli


05 - Codici di Controllo e Hamming, Sbobinature di Calcolatori Elettronici

05 - Codici di Controllo e Hamming 2020/21

Tipologia: Sbobinature

2020/2021

Caricato il 24/03/2026

flipflopbanana
flipflopbanana 🇮🇹

21 documenti

1 / 9

Toggle sidebar

Questa pagina non è visibile nell’anteprima

Non perderti parti importanti!

bg1
Codici di Controllo e Hamming
INTRODUZIONE
All’interno del calcolatore i segnali viaggiano attraverso dei fili quindi di
conseguenza il trasporto di un messaggio che avviene utilizzando uno strumento
di tipo elettrico può essere soggetto ad errori. Normalmente non è detto che
all’interno del calcolatore i messaggi siano consegnati nello stesso stato in cui
sono stati inviati. Ci sono poi alcune componenti del calcolatore come, ad esempio,
le memorie di massa, i dischi etc. che sono soggetti ad usura e rottura. All’interno
del protocollo di scrittura di un calcolatore esistono dei meccanismi che
consentono di recuperare le informazioni anche quando ci sono alcuni errori.
Questi meccanismi prendono il nome di codici di controllo di errori e
normalmente all’interno del calcolatore per assicurare la correttezza di un
messaggio esistono delle reti logiche che si occupano di verificare che il messaggio
inviato o ricevuto sia effettivamente corretto, oppure se deteriorato richiedere il
rinvio o recuperare il messaggio originale.
Un codice che consente di determinare che il messaggio è stato deteriorato si
chiama codice di controllo di errore o codice di rilevazione di errore.
FUNZIONAMENTO CODICE CONTROLLO DI ERRORE
Il codice di controllo di errore funziona aggiungendo dei bit in più al messaggio
ovvero si usa la codifica della parola con bit di ridondanza n= m+r, dove m è il
numero di bit originale e r sta per ridondanza. Alla fine, il messaggio che andremo
ad inviare sarà quindi lungo n bit.
Chiaramente quando il messaggio sarà ricevuto un’altra rete logica si occuperà di
decodificarlo andando a recuperare la lunghezza m del messaggio originale.
Una rete capace di rilevare la presenza degli errori nel codice usa una CODIFICA A
RILEVAZIONE DI ERRORI.
GESTIONE DEGLI ERRORI
Bit di ridondanza
la parola che viene memorizzata sul registro o sulla memoria inizialmente a
m
bit
diventa una parola di codice (codeword) di
n
bit con
n
=
m
+
r
essendo r i bit di
ridondanza.
Più bit di ridondanza aggiungo più aumenta l’insieme delle parole che posso
ottenere che sono più vicine alla parola vera che volevo trasmettere.
pf3
pf4
pf5
pf8
pf9

Anteprima parziale del testo

Scarica 05 - Codici di Controllo e Hamming e più Sbobinature in PDF di Calcolatori Elettronici solo su Docsity!

Codici di Controllo e Hamming

INTRODUZIONE

All’interno del calcolatore i segnali viaggiano attraverso dei fili quindi di conseguenza il trasporto di un messaggio che avviene utilizzando uno strumento di tipo elettrico può essere soggetto ad errori. Normalmente non è detto che all’interno del calcolatore i messaggi siano consegnati nello stesso stato in cui sono stati inviati. Ci sono poi alcune componenti del calcolatore come, ad esempio, le memorie di massa, i dischi etc. che sono soggetti ad usura e rottura. All’interno del protocollo di scrittura di un calcolatore esistono dei meccanismi che consentono di recuperare le informazioni anche quando ci sono alcuni errori. Questi meccanismi prendono il nome di codici di controllo di errori e normalmente all’interno del calcolatore per assicurare la correttezza di un messaggio esistono delle reti logiche che si occupano di verificare che il messaggio inviato o ricevuto sia effettivamente corretto, oppure se deteriorato richiedere il rinvio o recuperare il messaggio originale. Un codice che consente di determinare che il messaggio è stato deteriorato si chiama codice di controllo di errore o codice di rilevazione di errore. FUNZIONAMENTO CODICE CONTROLLO DI ERRORE Il codice di controllo di errore funziona aggiungendo dei bit in più al messaggio ovvero si usa la codifica della parola con bit di ridondanza n= m+r, dove m è il numero di bit originale e r sta per ridondanza. Alla fine, il messaggio che andremo ad inviare sarà quindi lungo n bit. Chiaramente quando il messaggio sarà ricevuto un’altra rete logica si occuperà di decodificarlo andando a recuperare la lunghezza m del messaggio originale. Una rete capace di rilevare la presenza degli errori nel codice usa una CODIFICA A RILEVAZIONE DI ERRORI. GESTIONE DEGLI ERRORI Bit di ridondanza

la parola che viene memorizzata sul registro o sulla memoria inizialmente a m bit

diventa una parola di codice ( codeword ) di n bit con n = m + r essendo r i bit di

ridondanza. Più bit di ridondanza aggiungo più aumenta l’insieme delle parole che posso ottenere che sono più vicine alla parola vera che volevo trasmettere.

In particolare, se ho n bit il numero possibile di parole che posso ottenere è 2 n^ , se invece il messaggio è composto da m bit il numero delle parole considerate legali , cioè le parole effettivamente di messaggio vero è 2 m. Tutte le volte che ricevo una parola che è contenuta nelle 2 n^ parole che non comprendono le 2 m^ legali, allora la parola è non legale ovvero si è verificato un errore. Sia C = {ci , i = 1, … , 2 n } l’insieme delle parole di codice, sia CL = {ck, k = 1, … , 2 m } l’insieme delle parole legali. Se si verifica una parola c’ ∈ (C -CL), allora c’ non è legale e si capisce che si è verificato un errore. CODICE A RILEVAZIONE DI ERRORE Posso costruire dei codici a rilevazione di errore che consentano di accorgermi se c’è stato qualche deterioramento: Ad esempio, nel caso di “Aallbbaa” so che non si è verificato alcun errore in quanto le lettere sono state raddoppiate correttamente, mentre in “Aalnbbaa” sono sicuro che si è presentato un problema. In binario le cose sono molto più complesse. ESEMPIO DI RETI LOGICHE NEL CALCOLATORE Gestione della ridondanza oppure ECC (Error Correcting Code), normalmente viene realizzata da reti logiche dedicate. La CPU quando deve spedire un dato, prima di farlo, calcola i bit di ridondanza e poi spedisce sia il dato che i bit di ridondanza e anche in fase di ricezione ci sarà una rete che si occuperà di verificare l’integrità del dato.

Più le parole lecite sono distanti tra di loro, più lì in mezzo posso avere dei messaggi marcati come non leciti che però mi permettono di sapere che ho trasferito degli errori. Circa il 10/15% dei dischi viene occupato da dei codici di errore (quando si compra un HD da 1Tb, ad esempio, lo spazio disponibile è sempre minore di 1Tb). Il caso più semplice è la rilevazione di errori singoli (che sono anche di gran lunga i più frequenti). Alcuni codici sono in grado di rilevare gli errori (ossia di capire che errore c’è stato senza sapere in che bit), e altri in grado di correggere gli errori (codici di rilevazione o codici di correzione). CODICI DI RILEVAZIONE O CODICI DI CORREZIONE Se si vogliono rilevare k errori singoli è necessaria una parola con distanza d=k+1 , perché con un codice di distanza k+1 non esiste modo che k errori singoli trasformino una parola valida in un’altra parola valida. Quindi se ho una parola lecita e posso accettare di sbagliare k bit, io voglio che la prossima parola lecita sia a distanza di Hamming k +1 , cioè se cambio k bit, comunque, la prossima parola lecita non coincide con la parola corrente in cui ho cambiato k bit. Se si vogliono correggere k errori singoli è necessaria una parola con distanza d=2k+1 , perché in questo modo pur cambiando k bit la parola in codice (m+r) sarà comunque più vicina alla parola originaria che a tutte le altre e quindi si può risalire alla parola originaria. → se si vuole rilevare errori di d=1 bit basta avere codici con distanza di almeno 2 mentre per correggerli si necessitano codici con distanza almeno 3. CODICE DI PARITÀ Il codice più semplice è il bit di parità (pari) che aggiunge 1 bit per fare in modo che il numero degli 1 nella parola sia un numero pari. Ha una distanza d=2 e quindi rileva solo 1 solo errore. a= 10001010 con m=8 la codeword corrispondente di 9 bit (r=1) valida è (a+P)= 100010101 mentre la parola di 100010100 non è una parola valida (parità sbagliata), quindi due qualsiasi parole valide hanno distanza 2. Attenzione che la parità rileva errori singoli o un numero dispari di errori ma se si verificassero un numero pari di errori non sarebbero rilevati! ESEMPIO Progettare una rete che indichi se due ingressi binari sono entrambi uguali a zero, se il segnale di parità pari è corretto, altrimenti indichi errore:

Di solito c’è un bit di parità per ogni byte di memoria. Nel Pentium, ad esempio, una memoria con parallelismo 64bit ha in realtà parallelismo di 72 bit comprendendo la parità. Gli errori non li correggo li rilevo solo. USI BIT DI PARITÀ Per la sua semplicità, la parità è usata in molti dispositivi dove le operazioni possono essere ripetute in caso di difficoltà, o se è solo utile sapere che è avvenuto un errore. Per esempio, i bus SCSI e PCI usano la parità per trovare errori di trasmissione, inoltre molte cache di microprocessori includono tale sistema di protezione. Dato che le cache dati sono solo una copia della RAM, se vi si trova un errore, può essere cancellata e ricaricata. Si usa nei dischi RAID 3. Nelle trasmissioni seriali dei dati, viene usato comunemente un formato di 7 bit, con un bit di parità pari e uno o due bit di stop. Questo formato può essere utilizzato per i 7 bit del codice ASCII. CODICI A CORREZIONE Per correggere devo poter recuperare la parola corretta, di conseguenza l’operazione si complica. Se voglio correggere k errori, la distanza tra le parole ammissibili deve essere d = 2k + 1. I codici a correzione rispetto ai codici a rilevazione usano un numero maggiore di bit in quanto devo costruire un codice a parole lecite che sono ad una distanza maggiore tra di loro, però a fronte del fatto che posso correggere eventuali errori che si presentano.

Nelle caselle in cui non è presente il bit di ridondanza ci vanno i bit del messaggio. Ulteriore esempio a 8 bit Con m = 8 si devono avere r = 4 bit di ridondanza. Si dispongono gli m bit della parola e gli r bit di ridondanza (o di controllo) in modo che i bit di controllo corrispondano alle potenze del 2. Le altre cifre del codice sono gli m bit di dati. ALGORITMO Si dispongono gli m bit della parola e gli r bit di ridondanza (o di controllo) in modo che i bit di controllo corrispondano alle potenze del 2 gli altri sono gli m bit di dati. Ad esempio, a 16 bit i bit di ridondanza occupano le posizioni 1,2,4,8,16. Ad ogni bit di controllo viene assegnato un valore di parità sulle sequenze di bit individuate come dalla seguente tabella ( per m=4 ) : bit 1 controlla la parità sui bit 1, 3, 5 e 7. bit 2 controlla la parità sui bit 2, 3, 6 e 7. bit 3 controlla la parità sui bit 4, 5, 6 e 7. Se non è ancora chiaro il concetto seguire da 1.10 a 1.22.43 (video). La rilevazione e correzione di un eventuale bit errato avviene controllando il valore di parità dei bit di controllo. Se il valore di parità del bit di controllo è corretto si pone a zero il valore nella tabella precedente; se non è corretto si pone a 1 il valore. Esempio : Se si riscontra errata la parità nei bit r1 e r3, il bit errato è b=5. Infatti:

Infatti, quando abbiamo ricevuto un messaggio che presenta un errore, dobbiamo rimettere a posto i bit di ridondanza, eseguendo il solito calcolo relativo alla parità. Alla fine, otterremo un numero in binario, in questo caso 101 = 5, contando da sinistra verso destra il quinto bit sarà quello che presenta l’errore, di conseguenza va invertito (se è 0 va a 1 e viceversa). Per capire se un messaggio ci è stato inviato con errore, basta contare le parità di questo e verificare che in base ai bit di ridondanza gli 1 siano in numero pari. Esempio : Si determini il codice di Hamming per la parola su m = 4 bit: 1 0 1 1. Si mettono i bit assegnati nelle posizioni corrette: Si pone: r 1 = 0 perché sia pari la sequenza 1, 3, 5, 7. r 2 = 1 perché sia pari la sequenza 2, 3, 6, 7. r 3 = 0 perché sia pari la sequenza 4, 5, 6, 7. VERSIONE A MATRICE Matrici:

  • Encoding G → matrice di codifica
  • Decoding H → matrice di decodifica Codice 7 4: Codeword n=7 r=3 m= H è una matrice r x n dove r è il numero di bit di ridondanza e n è il numero di bit complessivi del messaggio che verrà trasmesso e ha per colonna i numeri da 1 a n. Servirà a decodificare il messaggio in ricezione. G viene costruita prendendo H e andandone a cancellare tutte le colonne in cui ho messo i bit di ridondanza (potenze del 2). Per ogni colonna cancellata si inserisce per righe quello che resta in H. Per ogni colonna non cancellata si inserisce una riga con un 1 nella posizione del bit di m da rappresentare ovvero m=1 m=2 m=3 m=