< Fragmentos >
Antes de prosseguir, uma ressalva. Pois acontece que, mesmo restringindo-nos apenas ao universo da linha PC, as coisas hoje em dia estão complicadas. Antigamente tudo era muito simples: arquivos eram arquivos e todo mundo sabia como se dispunham no disco. Mas agora há os modernos "sistemas de arquivos" do OS/2 e Windows NT - HPFS e NTFS respectivamente - com suas novas regras para nomes de arquivos e maneiras novas de organizar os discos. Pois bem: visando simplificar as coisas, vamos discutir apenas o sistema de arquivos usado pelo DOS, conhecido por "FAT" (adiante veremos o porquê desse nome). Mais tarde, onde couber, mencionaremos as diferenças mais importantes em relação aos novos sistemas de arquivos. Isto posto, ao trabalho.
Como vimos semana passada, todo arquivo é um conjunto de bytes gravados em um ou mais setores do disco. Como cada setor tem exatos 512 bytes, todo arquivo maior que isso necessariamente se espalhará por mais de um setor. E a questão era, justamente, como encontrar esses setores no disco para recuperar as informações.
Vocês já devem ter notado que, em informática, tudo é muito organizadinho. O que torna fácil encontrar as coisas. Tomemos como exemplo nosso disquete de 1,44Mb. Ele tem dois lados (ou faces) que nunca são confundidos porque são numerados: lado 1 e lado 2. Em cada um deles há oitenta trilhas, também numeradas de zero a 79. Em cada trilha há 18 setores, numerados de 1 a 18. Não me perguntem por que cargas d'água a numeração das faces e setores começa em "um" e a das trilhas em "zero", que não faço a menor idéia (na verdade, ninguém faz, já que não há nenhuma lógica nisso; assim é porque foi convencionado que assim fosse e temos conversado; e, pensando bem, é bom que assim seja, senão não haveria Trilha Zero...)
Achar o primeiro lado e a primeira trilha é fácil, porque sempre há uma referência evidente: o lado um é o da etiqueta e a trilha zero a mais externa. Mas que ponto de referência deve-se tomar para encontrar o setor um, se os setores se sucedem em uma mesma circunferência? Simples: no disco metálico situado no lado oposto à etiqueta de um disquete de 3,5" há um pequeno retângulo excêntrico, próximo ao orifício circular central. Sua posição permite encontrar o primeiro setor (nos discos de 5"1/4 o referencial é um pequeno orifício na superfície do próprio disco, detectado por uma célula fotoelétrica no interior do drive; é por isso que a capa plástica dos disquetes de 5"1/4 tem aquele pequeno orifício circular próximo ao grande orifício central). Pronto: agora fica fácil encontrar um setor por seu número e pelos números da trilha e face onde ele se localiza - da mesma forma que e fácil encontrar um apartamento por seu número e pelos números do andar e prédio onde ele está situado.
Semana passada usávamos como exemplo um arquivo que ocupava onze setores. Manda a lógica que um arquivo assim se espalhe por onze setores sucessivos. Supondo que o primeiro seja, digamos, o setor 12 da trilha 20 do lado 1, o último seria o setor 4 da trilha 21 do mesmo lado 1 (se não entendeu porque, pense como as trilhas de dezoito setores se dispõem sobre a face do disco). Se fosse assim, tudo o que se precisaria saber para encontrar todo um arquivo seria seu primeiro setor e o número de setores que ocupa. Mas infelizmente não é. E a razão é simples: discos magnéticos são reutilizáveis e neles pode-se gravar, remover e regravar arquivos.
Não percebeu o que uma coisa tem a ver com a outra? Então veja lá: imagine que você gravou no disco, um após o outro, três arquivos: o arquivo Alfa ocupando vinte setores, o Beta ocupando cinco e o Gama ocupando dez setores. Imagine ainda que esses tenham sido os primeiros arquivos gravados no disco. Nesse caso, como todos os setores estão disponíveis, a lógica é obedecida e os arquivos são gravados em setores sucessivos: o Alfa ocupa os vinte primeiros setores disponíveis, o Beta os cinco setores seguintes e o Gama os dez setores imediatamente depois destes.
Agora, suponha que o arquivo Beta tenha perdido o interesse e seja removido do disco. Com isso, entre os arquivos Alfa e Gama "esvaziaram-se" cinco setores, que tornam-se disponíveis para receber novos dados. Pronto: está armada a arapuca. Pois se agora for gravado um novo arquivo, o Delta, com, por exemplo, oito setores, eles já não mais serão sucessivos: os cinco setores iniciais serão gravados nos cinco primeiros setores vagos do disco (aqueles situados entre os arquivos Alfa e Gama) e os três últimos serão gravados nos próximos setores disponíveis (que se situam logo após o arquivo Gama). O arquivo Delta ficará, então, "fragmentado" no disco: parte antes, parte depois dos setores ocupados pelo arquivo Gama. E quanto mais você grava, remove e regrava arquivos, espalhando setores livres entre setores ocupados do disco, maior é a tendência de fragmentar arquivos. Em discos rígidos, então, onde o entra-e- sai de arquivos é enorme, a fragmentação é inevitável (e prejudicial: quanto mais fragmentados estiverem os arquivos, maior o tempo gasto para acessá-los, já que a cabeça de leitura/gravação tem que "saltar" de trilha em trilha pelos setores nelas espalhados; por isso existem programas cuja única finalidade é "desfragmentar" discos, lendo os arquivos fragmentados e regravando-os em setores sucessivos).
Devido à fragmentação, para recuperar os dados não basta saber onde o arquivo começa e por quantos setores ele se estende: há que saber onde encontrar cada setor. Semana que vem veremos como é engenhosa a maneira com que isso é feito.