Escritos
B. Piropo
Anteriores:
< Trilha Zero >
Volte de onde veio
23/11/1992


< Comprimindo Arquivos>


Tome um texto como exemplo. Procure com atenção e veja como é possível identificar padrões que se repetem: palavras inteiras ou conjuntos de letras no interior de palavras. Depois, crie uma tabela relacionando cada padrão a um byte. Tome novamente o texto e substitua cada ocorrência de um destes padrões por dois bytes apenas: o primeiro é um código para avisar que o que vem adiante é um padrão, e não um caractere do texto. O segundo, o byte que o representa. Pronto: com este expediente simples você pode reduzir um texto de mais de mil páginas a menos de quinhentas. Só que ninguém vai conseguir ler aquele amontoado de códigos seguidos de bytes sem sentido. Mas isso não é problema: siga o texto em busca dos códigos. Encontrou um? Veja qual é o byte seguinte, pegue a tabela, procure o conjunto de caracteres correspondente e substitua. Dá um trabalho desgraçado, mas resolve.

A mágica é um tanto besta e acha que não vale a pena ter tanto trabalho para economizar quinhentas e poucas páginas? De acordo. Mas o que interessa, na verdade, é a idéia por trás da coisa toda. Pois este método simples nada mais é que uma forma possível de reduzir o tamanho de qualquer coisa que possa ser representada por um grupo de símbolos com padrões repetidos. No texto, os símbolos são as letras, ou caracteres. Mas isto não é obrigatório: já pensou nas centenas (ou milhares) de arquivos que ocupam espaço em seu disco rígido? Textos, programas, planilhas, seja de que tipo for, cada arquivo consiste em uma sucessão de bytes. E nada impede que um algoritmo deste tipo seja aplicado para reduzir o espaço ocupado por eles. E como todo aquele trabalho desagradável e repetitivo de "espremer" o arquivo e convertê-lo de volta a seu formato original vai ser feito pelo computador - que nada mais é que uma máquina extremamente eficiente justamente para fazer rápida e confiavelmente trabalhos desagradáveis e repetitivos - você não vai ter com que se preocupar e só terá lucro.

Esta técnica denomina-se "compressão de arquivos". Sua implementação inicial visava diminuir o tempo de transmissão de arquivos via modem para reduzir contas telefônicas, já que a parte mais sensível do corpo humano ainda é o bolso. Todo usuário de BBS conhece muito bem os programas utilizados para este fim e o assunto já foi devidamente destrinchado pelo grande CAT aí na página ao lado, de modo que não vale a pena repetir. Mas, recentemente, a coisa evoluiu. Pois se é possível comprimir arquivos e descomprimi-los mais tarde, na hora de usar, porque não comprimir enquanto se grava e descomprimir enquanto se lê? Isto chama-se compressão/descompressão em tempo real e pode economizar um formidável espaço em disco rígido, uma façanha nada desprezível. Pois se você ainda não a conhecia, anote a lei de Piropo da expansibilidade dos arquivos: "Arquivos tendem a se expandir até ocupar todo o espaço disponível do disco rígido, de forma semelhante aos gases em seus vasilhames, só que um pouco mais devagar". E seu primeiro corolário: "Não há disco rígido grande demais: cedo ou tarde - em geral mais cedo do que tarde - você vai precisar de um maior".

Pois é. E discos rígidos, embora sejam atualmente a forma mais econômica de armazenar informações (divida o custo de um HD por sua capacidade e veja se há uma forma mais barata de armazenar um Megabyte), ainda representam um investimento e tanto. Portanto, não é de admirar o sucesso que estão alcançando os programas de compressão/descompressão em tempo real, capazes de reduzir pelo menos à metade o espaço ocupado pelos arquivos. Há diversos, mas os mais conhecidos entre nós são o Stacker, da Stac Eletronics, e o SuperStore, da AddStor. Ambos excelentes. O problema é que há sempre o outro lado da medalha, e de vez em quando pinta no pedaço uma carta de leitor aflito, desesperado em busca de seus dados perdidos. E pondo a culpa nos programas.

Acontece que ambos são muito bons, mas como qualquer ferramenta, há que aprender como funcionam para saber usá-los ou de fato corre-se o risco de perder dados. Mas se forem tomadas algumas precauções elementares, consegue-se facilmente dobrar a capacidade efetiva de um HD a um custo baixíssimo e com total segurança. E para facilitar nossa vida, vamos começar a discutir estes programas para entender seu funcionamento.

Antes, porém duas observações. Primeiro: é obvio que aquela história da tabela lá de cima foi somente uma forma de ilustrar um método exeqüível de compressão de dados. Os modernos algoritmos de compressão são altamente sofisticados e muito mais inteligentes que aquele exemplo bobo. E, sobretudo, extremamente rápidos.

O que nos leva ao segundo ponto: a velocidade. Pois alguns usuários se abstêm de usar estes programas com receio de tornar mais lenta a leitura/gravação de arquivos em virtude do tempo gasto para comprimir/descomprimir dados em tempo real. Pois eles ficariam surpresos ao descobrir que, em alguns casos, ocorre exatamente o oposto: o acesso a disco fica mais rápido. Duvida?

Então pense: as máquinas modernas trabalham em uma freqüência de operação de dezenas de MHz, enquanto acessos a disco são feitos em dezenas de milissegundos. Do ponto de vista da CPU, o processo de leitura/gravação de dados parece decorrer em câmara lenta: em um milissegundo um AT de 33Mhz opera 33 mil ciclos, nos quais poderia executar alguns milhares de instruções (em média, cada instrução usa mais de um ciclo de CPU). Mas enquanto os dados são lidos a CPU nada faz além "gastar" ciclos de espera. Espera que não se resume à leitura/gravação, mas se estende ainda ao tempo que os dados levam para chegar à CPU, pois mesmo em um 486 de 50MHz os dados fluem entre disco e CPU em uma freqüência de cerca de 8MHz. Parece bobagem, mas tem que ser assim: se não se padronizasse a freqüência de operação do barramento de dados, que liga a CPU às placas controladoras, sempre que se desenvolvesse uma CPU mais rápida as controladoras teriam que ser substituidas.

Pois os programas de compressão/descompressão em tempo real usam estes ciclos de espera para executar parte de sua tarefa, portanto quase não retardam o funcionamento global do sistema. E, como dados comprimidos ocupam menos espaço, gasta-se menos tempo na fase mais lenta do processo, a leitura/gravação. Por isto, dependendo da freqüência de operação da CPU e do tipo de disco, pode ser que o tempo gasto para ler uma quantidade menor de bytes e descomprimir os dados correspondentes seja menor que o tempo de leitura dos dados integrais. Portanto, velocidade de acesso a disco não é razão para deixar de usar um destes programas.

O resto começaremos a ver na próxima semana.

B. Piropo