24 de novembro de 2012

Porque os discos aparecem menores do que deveriam no meu computador?

Uma dúvida comum que a maioria dos usuários de computadores tem e, vira e mexe, alguém vem me perguntar porque.

De tempos em tempos o assunto retorna, como uma assombração digna do título mais comum que o intelecto humano conseguiu atribuir: igual ex-mulher.

Impressionante como essa dúvida, muito comum, dá trabalho para ser dirimida. O dilema é um conjunto de causas que vão desde o surgimento da necessidade humana de contar até a aplicação de eletrônica digital. Aviso que será um post longo, detalhado, cheio de números, mas recomendo a leitura porque será de grande valia para todos os que ainda possuem essa questão não respondida.

Para iniciar, pretendo contar uma história. Todos sabem que costumamos contar com os dedos. Fato. Até hoje faço isso quando quero ter certeza absoluta que não irei errar uma conta básica. Todos fazem isso, só que a maioria tem vergonha de admitir.

O único problema de contar com os dedos (e os mais jovens sabem muito bem disso) é que só temos 10 dedos nas mãos. Geralmente vamos à escola calçados, portanto, trapacear usando os dedos dos pés não é uma opção viável. Para contornar essa situação, a tia nos ensinou que, depois de contar 10 dedos, podemos marcar um “tracinho” no papel e continuar contando. Usei muito isso no passado…

Cada tracinho representava 10. E a tia ensinou outra coisa: depois de terminar de contar, era só ver quantos dedos usados na conta tinha nas mãos e adicionar a quantidade de zeros igual à quantidade de tracinhos. Isso mudou a minha vida.

Com total certeza, os poucos que continuaram lendo não perceberam que acabei de descrever o sistema de numeração mais natural para os humanos. O sistema de base decimal, onde temos 10 símbolos para representar os números e depois desses 10 números, temos os seus múltiplos, também em base decimal.

A raça humana evoluiu (?) e teve a necessidade de quantificar as cosias. Peso, distância, volume… Para quantificar as coisas foram adotados valores de referência, onde algo foi usado como referência de peso, outro algo como referência de distância, outro algo como referência de volume, e assim por diante. Depois de referenciar, surgiu a necessidade de “batizar” aquela coisa, para facilitar a comunicação. Daí nasceu o grama, o metro, o litro. Então passamos a ter coisas que pesavam 1 grama, mediam 1 metro e acondicionavam 1 litro.

Qual a forma natural de contar essas novas grandezas? Logicamente com a nossa linguagem matemática universal: a base decimal. Todos os múltiplos dessas grandezas eram múltiplos de 10, uma vez que já era fácil para o ser humano contar até 10.

Amigos, assim nasceu a única coisa verdadeiramente universal que nossa civilização já produziu: o Sistema Internacional de Medidas, vulgarmente conhecido como SI.

E o resto é história.

Quando começou a computação, obviamente surgiu a necessidade de armazenar dados. Até porque, se não pudéssemos armazenar dados, qual seria a utilidade dessas máquinas? Elas ainda não fazem café.

Computadores trabalham com bits. Bits são pulsos digitais de 0 e 1, em conjuntos capazes de virar informação. Para termos uma informação válida, precisamos de 8 bits, formando 1 Byte. Para vocês entenderem melhor, 1 Byte corresponde a um caractere sem formatação. Só o caractere mesmo.

Por trabalhar com bits, podemos dizer que um sistema computacional só sabe fazer contas com dois símbolos possíveis: 0 e 1. Portanto, um computador é uma criança que tem duas mãos com um dedo cada ou só uma mão com dois dedos. Escolham aqui qual exemplo fica melhor de entender.

Para fazer as contas que uma criança faz, o computador marcaria um traço no papel logo depois de contar dois símbolos. E acabo de descrever para vocês o sistema de base binária.

Se 1 Byte corresponde a 1 caractere sem formatação, até aqui (incluindo o aqui) temos 3733 Bytes só de texto contando os espaços. Obviamente seria necessário usar múltiplos para contabilizar esse armazenamento. Olha só, já temos um SI que define múltiplos padrão para várias grandezas! Vamos adotar o SI!.

Legal, bonito, mas temos dois probleminhas básicos: 1- O SI é baseado em decimal, enquanto Bytes são conjuntos binários. 2- O Byte não é algo tangível e o SI baseou-se totalmente em referências tangíveis. Ah, OK, afinal, as pessoas lidam bem com números decimais – fazem isso a vida toda – e não seria um grande problema trabalhar com base decimal ao invés de binária. Vamos contar a quantidade de Bytes, não de bits.

Só esqueceram de dizer isso para os fabricantes de sistemas operacionais.

Quando os primeiros discos rígidos surgiram, o espaço de armazenamento deles foi medido usando o SI e é assim até hoje. Para facilitar as contas e usar algo um pouco mais atual, vamos adotar um disco rígido de 100 GB. Os fabricantes, usando o SI, vendem essa maravilha tecnológica (só que não) como possuindo 100 bilhões de bytes de capacidade de armazenamento.

Explicação necessária 1: no SI, os múltiplos mais comuns são os de 10 elevado a 3. Demonstrando: 1 KG equivale a 1 grama multiplicado por 10 elevado a 3, ou para entender melhor, 1 x 1.000, ou seja, 1.000 gramas. O mesmo vale para todas as outras grandezas.

Partindo desse princípio, os Bytes, no SI – lembrem-se ele tem que ser universal, ou seja, válido em qualquer lugar do mundo e principalmente, válido como regra para qualquer grandeza que seja regido por ela – o múltiplo mais comum tem de ser o KB, ou seja 1 Byte multiplicado por 10 elevado a 3.

Vamos agora para o momento Excel, visão SI – sistema decimal:
Unidade Fórmula Resultado
1 Byte 1 Byte x 10 elevado a 0 1 Byte
1 KB 1 Byte x 10 elevado a 3 1.000 Bytes
1 MB 1 Byte x 10 elevado a 6 1.000.000 Bytes
1 GB 1 Byte x 10 elevado a 9 1.000.000.000 Bytes

Portanto, de acordo com o SI, esse disco rígido de 100 GB tem 100 bilhões de Bytes, o que matematicamente está correto.

Lembram que os fabricantes de sistemas operacionais não foram avisados? Aqui eles são os “culpados” pela confusão.

O computador trabalha com base binária, correto? Então nada melhor do que contar o espaço de acordo com o sistema binário, assim o tamanho total do disco reflete o valor binário total de armazenamento dele.

Usando o sistema binário, os múltiplos do Byte tem um método de contagem diferente. Com a base é binária, então o primeiro múltiplo comum do Byte, o KB, seria 2 elevado a 10.

Outro momento Excel, agora no sistema binário:
Unidade Fórmula Resultado Simplificando
1 Byte 1 Byte x 2 elevado a 0 1 Byte -
1 KB 1 Byte x 2 elevado a 10 1.024 Bytes -
1 MB 1 Byte x 2 elevado a 20 1.048.576 Bytes 1.024 KB
1 GB 1 Byte x 2 elevado a 30 1.073.741.824 Bytes 1.024 MB

Os números não batem, correto? Não há a possibilidade de 1 KB representar dois valores diferentes, uma vez que ele deveria ser universal, mas, em conceito, ambos os números estão corretos. Sob óticas diferentes. Na primeira tabela, seguinte a premissa do SI, na segunda, seguindo a visão de número binário.

Agora vamos fazer contas. Os fabricantes, vendendo discos baseados no SI, entregavam discos com 100 GB, ou seja, 100 bilhões de bytes. Os fabricantes de sistemas operacionais contavam o espaço em binário, onde 100 GB seriam o equivalente a 107,37 bilhões de bytes aproximadamente. Resultado: Você via seu HD de 100 GB com, aproximadamente, 93 GB de espaço total. E achava que o fabricante do disco estava roubando você!

Com o intuito de acabar com a confusão, afinal ficou uma confusão, o IEC (International Electrotechnical Commission) decidiu normatizar a contagem de dados em binário, para diferir do SI, que está correto.

A conta em binário permaneceu a mesma, obviamente, porque não dá pra mudar as regras da matemática. O que mudou foram os nomes dos múltiplos.

Mais um momento Excel, nomes das grandezas segundo o IEC:
Unidade Fórmula Resultado Simplificando
1 Byte 1 Byte x 2 elevado a 0 1 Byte -
1 KiB 1 Byte x 2 elevado a 10 1.024 Bytes -
1 MiB 1 Byte x 2 elevado a 20 1.048.576 Bytes 1.024 KiB
1 GiB 1 Byte x 2 elevado a 30 1.073.741.824 Bytes 1.024 MiB

Onde os KB viraram KiB, os MB mudaram para MiB e os GB foram renomeados para GiB. Os nomes oficiais são, respectivamente, KibiByte, MebiByte e GibiByte.

Explicação necessária 2: Quando a conta é feita em binário, basicamente estamos medindo a quantidade de bits totais, enquanto o SI mede a quantidade de Bytes, usando o Byte como unidade de referência.

Os fabricantes de discos rígidos, SSDs, CDs, DVDs, Pendrives, etc… já fabricavam há anos e usavam o SI para informar a capacidade durante todo esse tempo. Eles não estavam errados, uma vez que adotavam o padrão universal. Os desenvolvedores de sistema operacional também estavam certos, porque as contas eram feitas em binário. O problema era os símbolos que eles usavam, que pertenciam ao SI. Até a normatização da IEC, não existiam símbolos para representar o espaço em medidas binárias.

Depois da normatização, com unidades específicas para o SI e para o sistema binário, houve a diferenciação entre medições. Quem informa a unidade como KB, MB ou GB está denotando que adotou o SI para fazer as contas e quem informa KiB, MiB ou GiB, mostra que usou o padrão do IEC.

Porém existia uma coisa que o IEC não tinha previsto: as pessoas já estavam acostumadas a ver símbolos do SI e as pessoas detestam (leia-se tem muito medo de) mudanças. Mudar os símbolos poderia ser complicado. Então, cada desenvolvedor de sistema operacional tratou a questão da sua forma. A Apple passou a contar o espaço da mesma forma que os fabricantes de dispositivos de armazenamento, ou seja, usa o SI para contar espaço e exibe os símbolos do SI, que já eram usados há décadas. Note que em qualquer computador com o OS X 10.5 ou superior, o tamanho do disco é exatamente o informado na embalagem do computador, qualquer pendrive tem o tamanho correto informado. Já a Microsoft continuou contando o espaço em binário, mas não mudou o símbolo, ou seja, exibe um número baseado numa contagem binária e o símbolo decimal do SI, portanto, no Windows o problema persiste.

Uma vez explicado o problema, vem a pergunta: porque a Microsoft não se adequou, seja mudando a forma de contar o espaço, usando o SI ou exibindo o símbolo do IEC? Só o Ballmer sabe. O que quer dizer que ninguém sabe.

Nenhum comentário:

Postar um comentário