VFAT E HPFS

Drive em FAT: o Sistema fica no início e o resto é uma bagunça


Drive em HPFS: o Sistema fica no centro e controla tudo

um estudo comparativo

por Daniel Jorge Caetano, Team OS/2


> Bom, essas vantagens eu disse em outra mensagem, o VFAT é o padrão
> do Win95, o HD ta em FAT e ele "associa" atributos estendidos aos nomes
> de arquivos e diretórios para deixa-los longos. Como todo o resto do
> Windows isso é uma gambiarra sem fim que confunde tudo!!! E essa
> gambiarra de anexar atributos aos arquivos é chamada de VFAT (Vitual
> File Alocation Table). Por isso que dizem que não é bom passar Scandisk
> de DOS em Win95, porque ele considera isso como alocação cruzada!!! É uma
> zona!!! A FAT32 já é "igual" ao HPFS, ou seja, os nomes longos são
> nativos, mas o DOS não reconhece partições FAT32 e nem HPFS!!! O
> FAT32.SYS existe sim e permite que o OS/2 leia partições Fat32
> formatadas para o Win95 OSR2 e Win98. Se não me engano ele pode ser pego
> no site do Macarlo http://macarlo.com acho que é esse o endereço...



Olha, o sistema VFAT é um lixo. Isso que você falou, é o que o OS/2 faz com a FAT quando você tenta gravar coisas nos atributos estendidos dos
arquivos, o que é ruim, mas o VFAT é ainda *PIOR*. Vejamos os
problemas do VFAT:

1- Gambiarra

O VFAT usa *entradas de diretórios* para completar o nome do arquivo.
Como cada nome de diretório tem 11 posições (8+3), para um nome com 253 caracteres (que é o máximo aceito, e não 255) ele ocupara uma entrada de arquivo (normal) e mais 22 entradas de diretório (não estou brincando!).
Quer fazer um teste? Pegue um disco bom, de 1.44, formatado. Crie um
arquivo de 1 (UM) byte (com apenas uma letra) no seu editor de textos
preferido no Win95 e salve-o com um nome de 253 caracteres. Em seguida,
copie este arquivo diversas vezes, mudando ligeiramente o nome, mas
mantendo 253 caracteres. Você vera que não poderá mais gravar no disco
quando ainda estiverem disponíveis mais de 1.3Mb... Isso porque as entradas de diretório são finitas, e no disquete, a quantidade delas é muito
pequena. Não estudei isso ainda no FAT 32 e não posso dizer.


2- Desperdício de espaço

Além disso, se você tem uma partição VFAT com 1Gb, o menor arquivo
ocupa 16Kb (mesmo que tenha 1 byte), se for maior que 1Gb, o menor
arquivo ocupara 32Kb (mesmo que o arquivo tenha um byte) e assim vai...
Isso foi amenizado no FAT32 (divida estes valores por 4), mas o problema
continua. Você literalmente joga seu disco no lixo! Já no HPFS, o menor
arquivo ocupa 512 bytes (mesmo que tenha 1 byte), não importa o tamanho
do disco (o que já é uma GRANDE coisa), mas ele *não* joga este espaço
fora. Para quem não sabe, é neste final de cluster que o OS/2 grava os
atributos estendidos, tornando o sistema de arquivos HPFS muito mais
consistente, econômico e ideal para HDs.


3- Velocidade

A) Organizacão do diretório

O VFAT e FAT32 gravam os arquivos sequencialemte. Ou seja, se você
gravar os arquivos EU.BAT, GATO.EXE e CAMILA.COM, JOAO.DLL e KILL.EXE
eles vão ficar assim na FAT:

EU.BAT
GATO.EXE
CAMILA.COM
JOAO.DLL
KILL.EXE


E isso é muito ruim, pois cada vez que o sistema vai procurar alguma
coisa tem de verificar sequencialmente TODO o diretório, desde o
primeiro até o último nome de arquivo. Por exemplo, se você mandar
procurar o arquvo JOAO.DLL (quarta posição), os sistema fará o seguinte:

Lê nome EU.BAT.
Compara EU.BAT com JOAO.DLL
Se é igual, retorna 1, se é diferente retorna 0. Retorna 0.
Se 1, imprime "ACHEI", Se 0 continua. É zero.
Le nome GATO.EXE.
Compara GATO.EXE com JOAO.DLL
Se é igual, retorna 1, se é diferente retorna 0. Retorna 0
.
Se 1, imprime "ACHEI", Se 0 continua. É zero.
Lê nome CAMILA.COM.
Compara CAMILA.COM com JOAO.DLL
Se é igual, retorna 1, se é diferente retorna 0. Retorna 0.
Se 1, imprime "ACHEI", Se 0 continua. É zero.
Lê nome JOAO.DLL.
Compara JOAO.DLL com JOAO.DLL
Se é igual, retorna 1, se é diferente retorna 0. Retorna 1.
Se 1, imprime "ACHEI", Se 0 continua. É 1.


Como você pode notar, foram executadas, a grosso modo, 16 operações.
Vamos comparar isso com o HPFS.

No HPFS a coisa é um pouco (bem diferente). Se você gravar estes mesmos
cinco arquivos, eles vao ficar assim no HPFS:

CAMILA.COM
EU.BAT
GATO.EXE
JOAO.DLL
KILL.EXE


E no que isso ajuda? Isso ajuda no fato do modo da busca. O OS/2 faz a
busca diferente, uma coisa chamada BUSCA BINÁRIA, e para isso acontecer, os nomes precisam estar na ordem. Acompanhe o "raciocinio" do
computador:

São 5 nomes. Pega o nome do meio (final(5)-inicial(1)/2+inicial(1), =
3).
Lê nome GATO.BAT (o 3o.)
Compara GATO.BAT com JOAO.DLL
Se é igual, retorna 0, se menor -1 se é maior retorna 1. Retorna -1
.
(G<J)
Se 0, imprime "ACHEI", Se -1, muda inical para 3 se 1 muda final para
3.
São 3 nomes (do 3 ao 5). Pega nome do meio (final
(5)-inicial(3)/2+inicial(3)=4)
Lê nome JOAO.DLL (4o.)
Compara JOAO.DLL com JOAO.DLL
Se é igual, retorna 0, se menor -1 se é maior retorna 1. Retorna 0.
Se 0, imprime "ACHEI", Se -1, muda inical para 4 se 1 muda final para
4. É 0.


Pronto, o arquivo foi achado com 11 operações. Isso para um número
irrisóorio de arquivos. Para uma grande quantidade de arquivos você
consegue um acesso ate 2.5 x mais rápido, em média!

B) Fragmentação.

A FAT fragmenta muito, prejudicando ainda mais a velocidade. Vejamos
por que:
Quando você grava os arquivos:


EU.BAT 5Kb
GATO.EXE 67Kb
CAMILA.COM 30Kb
JOAO.DLL 1076Kb
KILL.EXE 95Kb


A FAT vai dividí-los em "clusters", que nada mais são que aquelas
"unidades menores" que citei na primeira parte da mensagem, indicando
que um arquivo de 1 byte ocupa 16Kb num HD de 1Mb. Bem, o primeiro
arquivo ocupara um cluster, o segundo 5 clusters, o terceiro 2 clusters,
o quarto 68 clusters e o quinto 6 clusters. No HD ficarão assim:


EU.BAT 1o. cluster.
GATO.EXE 2o. ao 6o. cluster
CAMILA.COM 7o. ao 8o. cluster
JOAO.DLL 9o. ao 76o. cluster
KILL.EXE 77o. ao 82o. cluster.

Bem, primeiramente tem o problema de espaco, já que os arquivos
ocupariam fisicamente 1.303.552 bytes e a FAT os faz ocupar
1.343.488bytes, o que da aproximadamente 40Kb a mais - isso em 5
arquivos! Em HPFS estes arquivos ocupariam 2546 "clusters" de 512 bytes,
ou seja: 1.303.552 bytes! - coloquei a palavra clusters entre aspas porque o
HPFS nao usa clusters, mas algo parecido (chamadas Unidades de
Alocação).


No HPFS eles teriam:

EU.BAT 10 clusters
GATO.EXE 134 clusters
CAMILA.COM 60 clusters
JOAO.DLL 2152 clusters
KILL.EXE 190 clusters

O HPFS não gravaria assim. O disco de 1Gb em HPFS tem 2.097.152
clusters. (variaveis, de acordo com o número de arquvos). Logo, ele
gravaria da seguinte forma:


EU.BAT 1.048.571o. ao 1.048.580o. cluster
GATO.EXE 524.221o. ao 524354o. cluster
CAMILA.COM 1.572.833o. ao 1.572.892o. cluster
JOAO.DLL 261.068o. ao 263219o. cluster
KILL.EXE 786.337o. ao 786.526o. cluster

Pois o OS/2 sempre grava um arquivo no meio do maior espaço disponível
no disco.


Graficamente ficaria assim (0s são vazios):

FAT:

|-|-----|--|--------|---|00000000000000000000000000000000000000000000000000000
| | | | |
| | | | KILL.EXE
| | | JOAO.DLL
| | CAMILA.COM
| GATO.EXE
EU.BAT



HPFS

000|--------|0000|-----|000000|---|0000000|-|000000000000000000|--|00000000000000
JOAO.DLL GATO.EXE KILL.EXE EU.BAT KILL.EXE



E qual a vantagem disso? Bem, vejamos se apagamos o arquivo EU.BAT no
FAT:


00|-----|--|--------|---|00000000000000000000000000000000000000000000000000000
| | | | |
| | | | KILL.EXE
| | | JOAO.DLL
| | CAMILA.COM
| GATO.EXE
Espaco


E gravamos um arquivo de 30Kb (2 clusters):

|-|-----|--|--------|---|-------|0000000000000000000000000000000000000000000000
| | | | | |
| | | | KILL.EXE |
| | | JOAO.DLL |
| | CAMILA.COM |
| GATO.EXE |

Começo do programa de 30Kb Fim do programa de 30Kb.

Isso se chama fragmentação. E porque isso é ruim? Porque a cada
descotinuidade no arquivo, a cabeça do drive é obrigada a voltar ao
início do drive e reler o boot sector, atrasando muito a operação. Agora,
com o escreve-e-apaga habitual, imagine o estrago que isso não faz no
HD... A bagunça que não fica! Vejamos no HPFS:


000|--------|0000|-----|000000|---|0000000|-|000000000000000000|--|00000000000000
JOAO.DLL GATO.EXE KILL.EXE EU.BAT KILL.EXE


Apaguemos o EU.BAT:

000|--------|0000|-----|000000|---|0000000000000000000000000000|--|00000000000000
JOAO.DLL GATO.EXE KILL.EXE KILL.EXE


E coloquemos o mesmo arquivo de 30Kb no HD:

000|--------|0000|-----|000000|---|000000000|------|00000000000|--|00000000000000
JOAO.DLL GATO.EXE KILL.EXE Arquivo de 30Kb KILL.EXE


Não fragmentou! Isso dá um ganho ABSURDO na velocidade a medida que o HD fica mais e mais cheio...


CONCLUSÃO

Acho que deu para notar a *DROGA* que é o FAT. Estou à disposiçãpo
para maiores esclarecimentos... Se alguem tiver alguma pergunta, basta
mandar e-mail!




dcaetano@sti.com.br
Visite minha HomePage de OS/2:
http://www.geocities.com/SiliconValley/8752/
Visite a pagina de novidades de OS/2:
http://www.os2brasil.com.br/novidades/