Bit di parità

Da Wikipedia, l'enciclopedia libera.
7 bit di dati Byte con bit di parità
Bit di parità pari Bit di parità dispari
1101001 01101001 11101001
1111111 11111111 01111111

Il bit di parità è un codice di controllo utilizzato nei calcolatori per prevenire errori nella trasmissione o nella memorizzazione dei dati. Tale sistema prevede l'aggiunta di un bit ridondante ai dati, calcolato in modo tale che il numero di bit che valgono 1 sia sempre pari o dispari. I bit di parità sono uno dei codici di rilevazione e correzione d'errore più semplici.

Ci sono due varianti del bit di parità: bit di parità pari e bit di parità dispari. Quando si usa un bit di parità pari, si pone tale bit uguale a 1 se il numero di "1" in un certo insieme di bit è dispari (facendo diventare il numero totale di "1", incluso il bit di parità, pari). Quando invece si usa un bit di parità dispari, si pone tale bit uguale a 0 se il numero di "1" in un certo insieme di bit è pari (facendo diventare il numero totale di uno, incluso il bit di parità, dispari). Il bit di parità è un caso particolare di cyclic redundancy check (CRC), quando il 1-bit CRC è generato dal polinomio x+1.

Rilevazione degli errori[modifica | modifica wikitesto]

Se un numero dispari di bit (incluso il bit di parità) è cambiato durante la trasmissione di un insieme di bit allora il bit di parità non sarà corretto e indicherà che è avvenuto un errore durante la trasmissione. Quindi, il bit di parità è un codice di controllo, ma non è un codice di correzione d'errore poiché non c'è modo di determinare quale particolare bit è sbagliato. Usando un canale molto disturbato può essere necessario un lungo tempo per effettuare una trasmissione corretta, o può non accadere mai. D'altronde, il metodo del bit di parità, ha il vantaggio di essere un codice che usa un solo bit di spazio e che richiede solo un certo numero di porte XOR per esser generato. Vedi il codice di Hamming per un esempio di codice a correzione di errori.

Il bit di parità può essere calcolato come segue assumendo di trasmettere il valore a 4 bit 1001, con il bit di parità posizionato a destra, e denotando lo XOR con ^ :

Trasmissione usando la parità pari:

A vuole trasmettere:                     1001
A calcola il bit di parità:              1^0^0^1 = 0
A aggiunge il bit di parità e spedisce:  10010
B riceve:                                10010
B calcola la parità totale:              1^0^0^1^0 = 0
B può dire che la trasmissione è avvenuta correttamente.

Trasmissione usando la parità dispari:

A vuole trasmettere:                     1001
A calcola il bit di parità:              ~(1^0^0^1) = 1
A aggiunge il bit di parità e spedisce:  10011
B riceve:                                10011
B calcola la parità totale:              1^0^0^1^1 = 1
B può dire che la trasmissione è avvenuta correttamente.

Questo meccanismo consente la rilevazione di un singolo errore, poiché se un bit è sbagliato a causa del rumore, ci sarà un numero sbagliato di uno nei dati ricevuti. Negli esempi sopra, il valore della parità calcolato da B corrisponde con il valore del bit di parità aspettato. Si consideri il seguente esempio in cui avviene un errore sul secondo bit:

Trasmissione usando la parità pari:

A vuole trasmettere:                     1001
A calcola il bit di parità:              1^0^0^1 = 0
A aggiunge il bit di parità e spedisce:  10010
*** ERRORE DI TRASMISSIONE ***
B riceve:                                11010
B calcola la parità totale:              1^1^0^1^0 = 1
B può dire che è avvenuto un errore durante la trasmissione.

Il valore della parità calcolato da B (1) non è in accordo con il bit (0) che ha ricevuto. L'esempio seguente è simile, ma è sbagliato il bit di parità:

B riceve:                                10011
B calcola la parità totale:              1^0^0^1^1 = 1
B può dire che è avvenuto un errore durante la trasmissione.

Non c'è un limite a questo schema. Il bit di parità garantisce di rilevare solo un numero dispari di errori. Se avviene un numero pari di errori, non funziona. Si consideri il seguente esempio con un numero di errori pari:

A vuole trasmettere:                     1001
A calcola il bit di parità: 1^0^0^1 =    0
A aggiunge il bit di parità e spedisce:  10010
*** ERRORE DI TRASMISSIONE ***
B riceve:                                11011
B calcola la parità totale:              1^1^0^1^1 = 0
B dice che la trasmissione è avvenuta correttamente anche se ci sono stati errori.

B osserva una parità pari, come aspettato, e quindi fallisce nel cercare due errori.

Uso[modifica | modifica wikitesto]

Per la sua semplicità, la parità è usata in molti dispositivi hardware 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,

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.

Collegamenti esterni[modifica | modifica wikitesto]