Mostrando postagens com marcador bug do milênio versão 2038. Mostrar todas as postagens
Mostrando postagens com marcador bug do milênio versão 2038. Mostrar todas as postagens

quinta-feira, 5 de dezembro de 2019

BUG DO MILÊNIO — A HISTÓRIA SE REPETE (CONTINUAÇÃO)


UM EVENTO INIMAGINÁVEL EM UMA CENTENA DE ANOS TALVEZ SEJA INEVITÁVEL EM UM MILHÃO DE ANOS.

Anos-luz de evolução separam os chips Intel® Core™ atuais dos 286, 386 e 486 das décadas de 80/90. Raras vezes paramos para pensar nisso, mas, quando o fazemos, custa-nos acreditar que os monstruosos mainframes dos anos 1950 — que ocupavam prédios inteiros e tinham menos poder de processamento que uma calculadora de bolso teria dali a 30 anos — diminuíram de tamanho a ponto de ser levados no bolso, ao mesmo tempo em que seus recursos cresceram em progressão geométrica. 

O pool de sistemas usado pela NASA na missão Apollo 11 dispunha de 64 KB de RAM e processador com frequência de operação de 0,043 MHz. Isso corresponde a uma ínfima fração da capacidade de executar cálculos de qualquer smartphone xing-ling, e o que hoje é considerado "top de linha", "última geração", "estado da arte" e que tais não demora a se tornar "coisa do passado". E assim sucessivamente.

Existem processadores de diferentes tamanhos, capacidades e funcionalidades desenvolvidos, mas a maioria deles opera de forma parecida. Os primeiros modelos, de 16-bit, eram capazes de armazenar e acessar valores até 216 (equivalente a 65.539 números diferentes). As versões de 32-bit operam com 232 (= 4.294.967.295), mas é preciso tem em mente que essa capacidade é dividida de forma equânime para calcular o tempo e armazenar informações dos aplicativos do computador. Em outras palavras, cada uma das funções ocupa metade da capacidade do processador, razão pela qual um modelo baseado na arquitetura de 32-bit não é capaz de continuar contando o tempo depois que a contagem atinge 2.147.483.647 segundos . Já os processadores modernos, que equipam a maioria dos computadores atuais, são baseados no sistema de 64-bit, cujo limite é bem maior: 264 (18.446.744.073.709.551.616).

O bit (forma reduzida binary digit) é a menor unidade de informação que o processador é capaz de manipular, e pode representar apenas dois estados opostos — fechado/aberto, desligado/ligado, falso/verdadeiro, etc. , que, por convenção, são expressos pelos algarismos 0 e 1. Para economizar tempo e espaço, não vou descer a detalhes sobre esse assunto; quem quiser saber mais a respeito pode clicar aqui para acessar uma abordagem detalhada, mas em linguagem palatável.

Computadores fazem cálculos monstruosos usando o código binário, o que nos causa certa estranheza porque estamos habituados a usar a base decimal. Mas é possível escrever qualquer número inteiro usando a base binária, considerando que cada 1 ou 0 se refere a uma potência de 2 — o primeiro, a 20; o segundo, a 21, e assim por diante. O computador "vê" uma sequência de dígitos, multiplica cada potência de 2 (da esquerda para direita) por 0 ou 1 e chega a um número. A sequência 10, por exemplo, tem dois bits e equivale a 0x20 + 1x21. A sequência 111 tem três bits e equivale a 1x20 + 1x21 + 1x22. A sequência de 4 bits 1001 equivale ao número 9 (1x20 + 0x21 + 0x22 + 1x23), e assim por diante.

No que tange aos microchips (ou microprocessadores), os termos 32-bit e 64-bit se referem ao tamanho do registro — ou seja, do "mapa" onde o processador distribui os "endereços" dos dados de que precisa para operar. Como todos esses endereços apontam para a RAM — memória física do computador, onde tudo, do sistema operacional a um simples arquivo de texto, é carregado e processado —, CPUs de 32-bit, que só conseguem operar com 232 (ou 4.294.967.295 endereços diferentes), são incapazes de "enxergar" mais que 4 GB de RAM, independentemente da quantidade de memória fisicamente instalada na máquina

Chips de 64-bit operam com 264, sendo capazes de mapear mais de 17 bilhões de endereços na RAM e acessá-los de maneira mais rápida e eficiente. Vale lembrar, porém, que é o sistema operacional quem "diz ao computador como utilizar seus componentes", e um chip de 64-bit só exibirá todo seu poder de fogo se o sistema também for de 64-bit. Mas tenha em emente que um chip 64-bit suporta sistemas operacionais de 32-bit (embora não funcione em plena capacidade), mas chips 32-bit não suportam sistemas operacionais 64-bit; que apps de 64-bit só funcionarão se tanto o processador quanto o sistema forem de 64-bit, embora não haja problema algum em instalar aplicativos de 32-bit em máquinas com sistema operacional e processador 64-bit.

Observação: A Microsoft oferece versões de 64-bit do Windows desde a edição XP. Para saber se o seu sistema é de 32 ou 64-bits, dê um clique direito no botão Iniciar, clique em Sistema e, em Especificações do dispositivo, veja a resposta em Tipo de Sistema. Para obter informações adicionais sobre o processador e a configuração de hardware, baixe e instale o freeware CpuZ.

Voltando ao bug de 2038, desta vez o xis da questão é a capacidade limitada dos processadores de 32-bit de contar o tempo em segundos — um problema bem mais fácil de resolver que o do bug do milênio, como vermos mais adiante.

Considerando que computadores medem o tempo desde 1º de janeiro de 1970, às 3 horas, 14 minutos e 7 segundos de 19 de janeiro de 2038 eles chegarão ao limite de 2.147.483.647 segundos, e deverão parar de computar os segundos seguintes. Para continuar a contagem, os valores começarão a ser armazenados em uma contagem negativa, de -2.147.483.647 até zero, mas a maioria dos sistemas não conseguirá fazer isso e então simplesmente vai parar de funcionar ou, no melhor dos cenários, continuar funcionando, só que com a data incorreta.

Pare evitar que isso aconteça, a adequação dos dispositivos deverá ser feita até 2038. A maioria dos processadores comercializados atualmente é de 64-bit e o Windows dispõe de versões de 64-bit desde o início deste século. Muitos sistemas usados na operação de servidores (como o Unix) ainda são baseados na arquitetura de 32-bit, mas a lógica é que eles sejam substituídos nos próximos 19 anos. As máquinas que podem causar mais problemas são os chamados “sistemas embarcados”, que são usados em sistemas de transporte e outros aparelhos que devem ter longa durabilidade, como estabilizador de controle em carros, por exemplo. A principal preocupação deve ser com sistemas vitais para a infraestrutura, mas espera-se que os 19 anos que faltam sejam tempo suficiente para administradores e governantes se planejarem.

quarta-feira, 4 de dezembro de 2019

BUG DO MILÊNIO — A HISTÓRIA SE REPETE


NINGUÉM É VELHO DEMAIS PARA APRENDER NEM NOVO DEMAIS PARA ENSINAR.

Há exatos 20 anos, o mundo roía as unhas na expectativa da "virada do milênio", que supostamente enlouqueceria todos os computadores quando os relógios saltassem as 23h59 para 00h00 e os calendários, de 31/12/99 para 01/01/00, data que as máquinas interpretariam como 1º de janeiro de 1900.

Todo computador dispõe de um relógio interno e depende dele executar corretamente um sem-número de tarefas — como verificar se sua conta de telefone venceu, por exemplo, ou se está na hora de ligar a iluminação pública. Devido ao assim chamado "bug do milênio", os servidores das empresas de telefonia poderiam entender que os clientes estariam devendo 100 anos de serviço, o que provavelmente resultaria na suspensão da linha e na cobrança de multas e juros que eles não conseguiriam pagar nem que vivessem outros 100 anos. No caso das luzes, a cidade poderia ficar às escuras se o programa interpretasse que o dia seguinte ainda não havia chegado — e jamais chegaria, a menos que alguém lhe explicasse que 00 é maior que 99.

Lá pelos idos de 1950, quando os primeiros computadores foram criados, a quantidade de dados que os monstruosos mainframes eram capazes de adicionar caberia num prosaico disquete de 1,44 MB (tipo de mídia que só seria criada décadas depois), e escrever o ano com dois dígitos em vez de quatro representava uma economia colossal. Além disso, achava-se que até o ano 2000 os programas de então teriam sido aposentados, o que, de fato, aconteceu, mas pouca gente se deu conta de que os novos continuaram a registrar o ano com dois dígitos para manter compatibilidade com os antigos.

Noves fora algumas intercorrências pontuais, o bug do milênio foi muito peido e pouca bosta. Houve falhas em terminais de ônibus na Austrália, em equipamentos de medição de radiação no Japão e em alguns testes médicos na Inglaterra. Alguns sites da Web mostraram a data 1/1/19100. Mas isso não evitou que o pânico se espalhasse mundo afora nem que fossem gastos cerca de US$ 300 bilhões em medidas preventivas.

Em Brasília, montou-se uma “sala de situação” do setor elétrico para eventuais distúrbios no fornecimento de energia; o governo paulista criou um site para acompanhar os efeitos da “catástrofe” (havia preocupação em áreas-chave, como saúde, segurança pública, transportes, recursos hídricos e administração penitenciária) e a prefeitura da capital colocou 2700 funcionários da CET em standby no Réveillon, diante da possibilidade de panes em semáforos ou congestionamentos anormais. Quando os relógios deram meia-noite e nada de incomum aconteceu, os servidores foram desmobilizados e puderam curtir a virada do século, ainda que com algum atraso.

Como não há mal que sempre dure nem bem que nunca termine, em 2038 os processadores de 32-bit perderão a capacidade de contar o tempo. O busílis da questão (como eu havia adiantado nesta postagem de 2017) é a limitação da arquitetura de 32-bit, que atingirá seu ápice às 3h14min7 de 19 de janeiro de 2038. Mais ou menos da mesma forma que se previa que acontecesse na virada do século, as máquinas não conseguirão diferenciar 2038 e 1970, o primeiro ano no qual todos os sistemas atuais passaram a medir o tempo.

Continua na postagem de amanhã.