Escritos
B. Piropo
Anteriores:
< Trilha Zero >
Volte de onde veio
06/01/1997

< Memórias XIX: Era Uma Vez... >


Um rei bondoso, um príncipe ingênuo e um vizir safado. Um belo dia o príncipe decidiu passar uma temporada incógnito no reino vizinho, fazendo um curso de pós-graduação nas artes de reinar. Durante todo o tempo em que lá viveu, a única ligação com seu reino era o vizir, portador das notícias e da mesada real. E era esta a questão: como o valor da mesada correspondia a uma porcentagem da arrecadação de impostos do reino, variava a cada mês. E, não sendo o vizir safado digno de confiança, como ter certeza que não surrupiara uma parte da mesada?

Bem, sendo o montante da mesada razoável, um dinar a mais ou a menos não faria diferença. Então rei e príncipe combinaram o seguinte: o total da mesada sempre seria um número par. Se, porventura, o cálculo da porcentagem resultasse em um valor ímpar, o rei acrescentaria ou subtrairia um dinar. Assim, se algum dia o príncipe conferisse a mesada e descobrisse que o total deu ímpar, o vizir perderia a cabeça - tanto no sentido lato quanto no estrito - pra deixar de ser safado. O método, evidentemente, não era infalível. Pois se o vizir decidisse se apropriar indevidamente de um número par de dinares, o remanescente continuaria par e o príncipe não se aperceberia do furto. Mas, afinal, era um controle. E sempre é melhor um controle sujeito a falhas que nenhum controle.

Pois bem: considerando-se a natureza essencialmente volátil da forma pela qual os bits são armazenados nos chips de memória dinâmica usados em nossas máquinas, foi nelas desenvolvido um sistema semelhante para detectar erros eventuais. Um engenhoso sistema denominado "controle de paridade".

Como vimos ao longo desta série, os dados são sempre armazenados na memória sob a forma de bytes, ou conjuntos de oito bits. Cada bit se aboleta em um capacitor elementar que carregado representa o valor "um" e descarregado representa "zero". Portanto, quando a CPU manda escrever um certo valor em uma determinada posição de memória, o circuito controlador da memória deveria utilizar oito capacitores, um para cada bit. No entanto utiliza nove. O capacitor adicional armazena o chamado "bit de paridade", cujo valor é calculado pelo próprio circuito de controle de tal forma que a soma de todos os bits, incluindo o de paridade, seja sempre par. Por exemplo: suponhamos que a CPU tenha mandado armazenar o byte 01101011 (que corresponde ao valor 107 em decimal). Um byte composto por cinco bits "um" e três bits "zero". Logo, a soma de seus bits é cinco. Como o total, incluindo o bit de paridade, deve ser par, o controlador da memória atribui o valor "um" ao bit de paridade, e armazena os valores 011010111 nos nove capacitores que usa para este fim. Evidentemente, caso a soma dos oitos bits do byte fosse par, o circuito de controle da memória atribuiria o valor zero ao bit de paridade, mantendo o total sempre par.

Agora vamos supor que, mais adiante, a CPU mande ler o valor armazenado naquela mesma posição de memória. O circuito controlador de memória lê o dado e, antes de enviá-lo à CPU, soma os valores armazenados nos nove capacitores. Se a soma for par, tudo em ordem: o bit de paridade é descartado e os oito bits que formam o byte solicitado são encaminhados à CPU. Já uma soma impar é o prenúncio da catástrofe: o valor lido não corresponde ao valor armazenado. E a atitude do circuito controlador é absolutamente radical: pára completamente o funcionamento da máquina e emite uma mensagem informando que ocorreu um erro de paridade no endereço tal. E não há como fazer a máquina prosseguir sem desligá-la e executar novo boot.

Este radicalismo se justifica. A única coisa que o circuito controlador sabe é que há um byte errado. Mas não tem a menor idéia de sua importância para o funcionamento da máquina. Se ele corresponder a uma instrução em execução, qualquer coisa pode acontecer - como por exemplo a formatação do disco rígido. Portanto, a segurança obriga que, em um caso destes, a máquina seja imediatamente bloqueada.

Evidentemente, como no caso da mesada real, o controle de paridade pode falhar: basta que se corrompam simultaneamente dois bits. O valor resultante, embora errado, continuaria sendo par e o erro passaria despercebido. Porém a probabilidade de que dois bits do mesmo byte sejam alterados é tão pequena que é considerada desprezível.

Se você prestou atenção na descrição do controle de paridade, observou que ele é feito exclusivamente pelo circuito controlador da memória, sem a menor interferência da CPU - que apenas solicita a gravação ou a leitura do dado sem nem ao menos se dar conta da existência do bit de paridade. Fato que permitiu que, por economia, alguns fabricantes de placas-mãe, alegando que os novos chips de memória são muito mais confiáveis que os fabricados no tempo em que o controle de paridade foi instituído, simplesmente eliminassem o controle de paridade em suas máquinas. Semana que vem discutiremos as vantagens e desvantagens desta prática.

B. Piropo