Memória Detecção e correcção de erros
Códigos de correcção de erros As memórias podem cometer erros. Por exemplo devido a quedas de tensão nas linhas Grande parte das memória têm códigos de detecção e correcção de erros. Cada word em memória tem uns bits extra que têm como utilidade a detecção de erros. Suponhamos que uma word tem m bits de dados aos quais se acrescenta r bits de check bits., seja n = m+r. Esta nova word denomina-se uma n-bit codeword. Dadas duas codewords é possível determinar quantos bits diferem. Basta fazer um OU- EXCLUSIVO. Arquitectura de Computadores (2008/2009): Memória 592
Distância de Hamming O número de posições onde as words diferem denomina-se distancia de Hamming Se duas words tiverem um distancia d são necessários d erros de um bit para as converter uma na outra Apenas 2 m das 2 n words possíveis são codewords válidas A leitura de codeword inválida é detectada pelo computador, através dos check bits Pode-se, através de um algoritmo sobre esses mesmos bits, determinar as possíveis codewords válidas Arquitectura de Computadores (2008/2009): Memória 593
Propriedades de um código Da lista de codewords válidas determina-se as duas com distância de Hamming mínima A distancia é medida sobre toda a palavra, 2 n Exemplo: 10001100 11001111 10011001 a distância é 3 Hamming(10001100, 11001111) = 3 Hamming(10001100, 11011001) = 4 Hamming(11001111, 11011001) = 3 As propriedades de um código depende da sua distância de Hamming Para detectar d erros de um bit é necessário uma distância de d+1 Para corrigir é necessário um código com distância 2d+1 Arquitectura de Computadores (2008/2009): Memória 594
Exemplo de um código para 2 bits Bit de paridade. Escolhido de forma a que seja 0 se o número de 1s na word for par e 1 caso contrário. A distancia é 2, pode detectar erros de 1 bit. Sempre que ocorre um erro de 1 bit este é detectado e a execução não prossegue Exemplo a codeword 111 não é válida. Corrijo para qual? Data Word Parity Bit Code Word 00 0 000 01 1 011 10 1 101 11 0 110 Arquitectura de Computadores (2008/2009): Memória 595
Um outro exemplo Consideremos o seguinte conjunto de codewords válidas: 0000000000, 0000011111, 1111100000, 1111111111 A distância é 5 corrige erros de 2 bits. Suponhamos que lemos um posição de memória onde está escrito 0000011111 O valor que lemos é 0000000111 0000011111 não é uma codeword válida, logo detectamos um erro Corrigimos para 0000011111, pois é a que está à menor distância (2) No entanto se lermos 0000000011, ou seja, ocorre um erro de 3 bits, corrigimos 00000000 O erro é mal corrigido O código não corrige correctamente erros de 3 bits Arquitectura de Computadores (2008/2009): Memória 596
Um código para m bits Desenvolver um código com m bits de dados, r check bits que corrija todos os erros de um bit. Seja n=m+r Cada 2 m words válidas têm n codewords ilegais à distância 1. Cada word das 2 m necessita de padrões de n+1 bits. Como o número total de padrões é 2 n temos que ter (n+1) 2 m 2 n. Com n=m+r, temos que (m+r+1) 2 r Arquitectura de Computadores (2008/2009): Memória 597
Um código para m bits Dado m temos os dados da tabela do lado Este limite teórico pode de facto ser atingido através de um método: O método de Hamming. Tamanho da word Check bits Tamanho total 8 4 12 50 16 5 21 31 32 6 38 19 64 7 71 11 128 8 136 6 Overhead (%) 256 9 265 4 512 10 522 2 Arquitectura de Computadores (2008/2009): Memória 598
Código de Hamming para m bits No algoritmo de Hamming r bits de paridade são acrescentados a uma word de m bits, formando uma codeword de m+r bits. Os bits são numerados a partir de 1, sendo, neste caso, o bit 1 o mais à direita. Todos os bits que são potências de 2 são de paridade, sendo os outros de dados. Para words de 8-bits, os bits de paridade são 1,2,4 e 8. Portanto cada word tem 12 bits (8+4). Arquitectura de Computadores (2008/2009): Memória 599
Código de Hamming: construção Todos os números podem ser escritos como uma soma de potencias de 2 (neste caso os bits de paridade): 1=1, 2=2, 3=2+1, 4=4, 5=4+1, 6=4+2, 7=4+2+1, 8=8, 9=8+1, 10=8+2, 11=8+2+1 e 12=8+4 Cada bit é controlado pelos bits que compõem a sua soma. Por exemplo 5=4+1, logo é controlado pelos bits 1 e 4 Bit 1 controla 3, 5, 7, 9, 11 Bit 2 controla 3, 6, 7, 10, 11 Bit 4 controla 5, 6, 7, 12 Bit 8 controla 9, 10, 11, 12 Arquitectura de Computadores (2008/2009): Memória 600
Código de Hamming: exemplo Exemplo: 11010110 Preenchemos as posições deixando os bits de paridade livres Vamos calcular o valor do bit 2 Temos de ver os valores dos bits 3, 6, 7, 10, 11 0, 1, 0, 0, 1 paridade é 0 Os bits 1, 2, 4 e 8 terão os valores 1, 0, 1 e 1 Arquitectura de Computadores (2008/2009): Memória 601
Código de Hamming: detecção Supondo que introduzimos um erro no bit 5: passa a 0 Como é que o detectamos? Vamos calcular os bits de paridade e ver se estão certos Os bis que o bit 1 controla têm dois 1s, logo o seu valor devia ser 0 incorrecto, o valor que lá está é 1 Os bis que o bit 2 controla têm dois 1s, logo o seu valor devia ser 0 correcto Os bis que o bit 4 controla têm dois 1s, logo o seu valor devia ser 0 incorrecto, o valor que lá está é 1 Os bis que o bit 8 controla têm três 1s, logo o seu valor devia ser 1 correcto Arquitectura de Computadores (2008/2009): Memória 602
Código de Hamming: correcção Seguindo a teoria matemática de diagramas de Vern, que serve de base para este código, temos que: O bit errado só pode ser um de 5 e 7 pois são os únicos controlados pelo bit 1 e pelo 4. No entanto, o bit 2 está correcto, logo 7 também. Portanto o bit errado é o 5. Temos, no entanto, uma forma mais rápida de obter este resultado: Computar todos os bits de paridade, se tudo estiver bem, não ocorreu nenhum erro, ou mais do que um. Se ocorreu um erro somar os bits de paridade de deram erro. Neste exemplo (1+4) = 5. Basta mudar o seu valor. Arquitectura de Computadores (2008/2009): Memória 603