Alocação Indexada: Este método é capaz de resolver o problema do crescimento dos arquivos ao mesmo tempo que permite o acesso relativo. Na alocação indexada, cada arquivo possui uma tabela de índices. Cada entrada dessa tabela contém o endereço de um dos blocos físicos que formam o arquivo. No exemplo da Figura 8.2, cada descritor de arquivo contém uma tabela com 10 entradas, numeradas de 0 a 9. A entrada 0 da tabela contém o número do bloco físico que contém o bloco lógico 0 do arquivo, a entrada 1 faz o mesmo para o bloco lógico 1, e assim por diante.
Um acesso relativo pode ser facilmente realizado através de uma consulta à tabela de índices. O endereço no disco de qualquer bloco lógico é obtido através de um único acesso a essa tabela. Para que esse acesso seja rápido, a tabela de índices é normalmente mantida na memória principal enquanto o arquivo está aberto. Uma forma conveniente é manter a tabela de índices dentro do próprio descritor do arquivo.
Uma questão importante é o tamanho da tabela de índices. Ele define o tamanho máximo de um arquivo no sistema. Por exemplo, suponha que cada bloco físico corresponda a 4 K.bytes. Para que o tamanho máximo de um arquivo no sistema seja de 4 G.bytes, será necessário uma tabela de índices contendo “4 G.bytes 4 K.bytes” entradas, ou seja, 1.048.576 entradas (1 M na informática, ou seja, 1024 1024). Manter uma tabela de índices desse tamanho para cada arquivo é um absurdo. O tamanho médio dos arquivos em sistemas de propósito geral fica entre 10 K.bytes e 20 K.bytes. Mantendo a suposição de que cada bloco físico corresponde a 4 K.bytes, uma tabela de índices com apenas 5 entradas seria suficiente para um arquivo de 20 K.bytes.
A solução típica para compatibilizar uma maioria de arquivos pequenos com um tamanho máximo de arquivo satisfatório é empregar níveis de indireção na indexação. Por exemplo, suponha que o descritor de arquivos contém uma tabela de índices com 13 entradas. As primeiras 10 entradas (numeradas de 0 a 9) apontam para blocos de dados do arquivo, permitindo o acesso aos primeiros 40 K.bytes de cada arquivo (supondo sempre blocos de 4 K.bytes). Eles são