Giz Explica: Por que as coisas dão pau (e por que acontece com menos frequência agora)
Você está trabalhando no documento mais importante que você já digitou na vida e, de repente – cabum: tela Azul. “A PROBLEM HAS BEEN DETECTED”. E você: “PQP, que p@**a é essa?”
Tem todo tipo de coisa quente nova no Snow Leopard e no Windows 7, mas o que é mais velho e zoado é quando as coisas dão pau, mesmo nos SOs mais novos. Eis como estas coisas acontecem e o porquê de, felizmente, elas estarem acontecendo cada vez com menor frequência.
Existe basicamente um quinquilhão de maneiras de um computador dar pau, de hardware a software, então vamos começar com os probleminhas pequenos e escalaremos até as panes de kernel e as famosas Telas Azuis da Morte.
Panes de aplicativo
Em linhas gerais, as duas causas mais comuns de panes, de acordo com Chris Flores, diretor da equipe do Microsoft Windows, são programas que não estão seguindo as regras e programadores que não prevêem certas condições (fazendo com que o programa dê a louca). O exemplo mais óbvio do primeiro caso é erro de memória. Basicamente, um sistema operacional aloca a um programa uma determinada quantidade de memória para usar e fica a cargo do programa manter-se dentro daquele limite concedido. Se o programa quiser arrebanhar memória que não lhe pertence, ele está corrompendo outros a memória de outro programa – ou mesmo do próprio SO. Assim, o SO faz o programa entrar em pane, protegendo todo o resto.
No outro caso, condições inesperadas podem fazer com que um programa dê pau se ele não foi programado com um bom tratamento de exceção. O exemplo “supersimplificado” do Flores é este: suponha que você possui um campo de dados, como o número de um cartão de crédito. Um bom programador se certificaria de que você digitará apenas números, ou fornecerá uma maneira para o programa lidar com a sua incessante tentativa mal-intencionada de digitar símbolos ou letras. Mas se o programa espera um tipo de dado e recebe outro e ele não tiver sido projetado para lidar com algo que ele não espera, ele pode dar pau.
Um aplicativo completamente travado (“congelado”) é um aplicativo que tenha dado pau, mesmo mantendo-se perfeitamente na sua tela, olhando pra sua cara. Cabe a você se ligar disso e desligá-lo forçosamente para dar cabo de sua miséria. Às vezes, obviamente, o próprio computador mata o programa por você.
Panes, como você provavelmente experimenta quase que diariamente, são limitadas a programas. O Firefox provavelmente lhe prega essa peça o tempo todo. Ou o iTunes (ó céus, iTunes…). Mas com os sistemas operacionais de hoje, se você chegar naquele ponto de ultimato, aquela pane que derruba todo o seu sistema, então provavelmente deu algo muito errado no kernel.
Panes de sistema
O kernel (a página original é bem mais completa) é o núcleo viscoso do sistema operacional. Se você pensar em um sistema operacional como um minúsculo chiclete bem no meio de um pirulito, ele está lá no nível mais baixo gerenciando as coisas básicas que o SO precisa trabalhar e você vai precisar mais do que algumas lambidas para chegar a ele.
Muito provavelmente, o seu computador atualmente dá uma pane completa com muito menos frequência do que antes – ou, pelo menos, com frequência bem menor que no Windows 95. Existem alguns motivos para isso. Um grande motivo, diz Maximus Will Smith, editor do Maximum PC, é que a Apple e a Microsoft passaram bastante tempo subindo coisas que costumavam rodar em níveis bem baixos, bem nas entranhas do SO, para algumas camadas acima e dentro do espaço do usuário, assim o erro de um aplicativo que travaria todo o sistema ao bagunçar algo no nível do kernel acaba resultando apenas em uma irritante porém ligeira demora de um programa. Simplificando, os SOs têm ficado cada vez melhores no isolamento e contenção de problemas, assim um aplicativo ruim comete suicídio em vez de dar uma de kamikaze sobre todo o seu computador.
Isso é parte do motivo pelo qual os drivers – o software que permite que um hardware, como uma placa de vídeo, converse com o seu SO e outros programas – são atualmente maiores fontes de panes completas do que aplicativos comuns quando falamos de sistemas operacionais modernos. Pela sua própria natureza, os drivers possuem acessos bastante profundos e o kernel fica bem no meio disto tudo, diz Flores. Assim, se algo dá errado com um driver, isto pode resultar num pau danado. Teoricamente, drivers assinados ajudam a evitar alguns dos problemas, mas pegue os drivers gráficos, que eram um enorme problema com as panes do Vista em seu início: Flores diz que “alguns dos códigos de programação mais complexos do mundo são realizados por escritores de drivers de dispositivos gráficos”, e que quando a Microsoft cambiou para um novo modelo gráfico com o Vista, precisaram lidar com um conjunto inteiramente novo de regras (obviamente, as coisas deram errado).
Outro motivo pelo qual as coisas dão menos pau atualmente é que a Apple e a Microsoft possuem toneladas de dados sobre o que provoca panes com uma telemetria muito mais avançada – informações que o SO envia para a base, como configurações de sistema, o que um programa estava fazendo, o estado da memória e outros detalhes aprofundados sobre uma pane. Com estas informações, eles conseguem fazer mais para evitar panes, obviamente, então não tenha (muito) medo de clicar em “enviar” naquela caixa de mensagem de erro.
No Windows 7, por exemplo, existe um novo heap de tolerância a falhas – basicamente, um heap é uma área especial da memória cujo nível é relativamente baixo – que poderia ser facilmente corrompido nas versões passados do Windows. No Windows 7, ele é capaz de dizer quando uma pane no heap está prestes a acontecer e toma medidas para isolar um aplicativo de todo o resto.
Panes futuras
Logicamente, existem outros motivos pelos quais as coisas entram em pane: problemas de fato no hardware, como uma falha na memória, ou falhas de componentes da placa mãe. Problemas com o disco rígido. Caramba, Will Smith nos diz até que um novo problema com grupos de supercomputadores de alto desempenho são panes provocadas por raios cósmicos! Algumas partículas alfa passam por uma máquina e pronto, deu pau. Isto não era um problema há 30 anos.
Ou seja, você não precisa se preocupar tanto assim com este tipo de problema. No futuro, algo com o qual você poderá se preocupar, diz Smith, considerando a explosão de núcleos de processadores e programas em threading múltiplo tentando utilizá-los, são os clássicos problemas do processamento paralelo, como as condições de corrida, na qual dois processos tentam fazer algo com o mesmo pacote de dados, bagunçando a ordem dos eventos e resultando em uma pane. Obviamente, os desenvolvedores definitivamente prefeririam que os próximos 5 anos de computação não acabassem nos dias do Windows 95 e as técnicas de programação estão sempre ficando cada vez mais sofisticadas, então provavelmente não existe este enorme risco. Mas enquanto forem os humanos – que se equivocam e fazem besteiras – a escreverem programas, panes ocorrerão, então tampouco estaremos imunes àqueles dias.
Um agradecimento especial ao Will Smith do Maximum PC! Foto da Tela Azul da Morte por Sean Galbraith originalmente publicada no Gizmodo aqui.