Compartilhar via


A evolução dos sistemas de arquivos

Antes de os computadores serem desenvolvidos para funcionar em sistemas operacionais de disco, cada computador foi criado para executar um único aplicativo proprietário, que tinha controle completo e exclusivo de todo o computador. O aplicativo gravaria seus dados persistentes diretamente em um disco, ou tambor, enviando comandos diretamente para o controlador de disco. O aplicativo foi responsável por gerenciar os locais absolutos de dados no disco, certificando-se de que ele não estava substituindo dados já existentes. Como apenas um aplicativo estava em execução no computador a qualquer momento, essa tarefa não era muito difícil.

O advento de sistemas de computador que poderiam executar mais de um aplicativo exigia um mecanismo para garantir que os aplicativos não gravassem os dados uns dos outros. Os desenvolvedores de aplicativos resolveram esse problema adotando um único padrão para distinguir setores de disco em uso daqueles que eram livres marcando-os adequadamente. Com o tempo, esses padrões se uniram para se tornarem um sistema operacional de disco, que forneceu vários serviços aos aplicativos, incluindo um sistema de arquivos para gerenciar o armazenamento persistente. Com o advento de um sistema de arquivos, os aplicativos não tinham mais que lidar diretamente com o meio de armazenamento físico. Em vez disso, eles simplesmente disseram ao sistema de arquivos para gravar blocos de dados no disco e deixar o sistema de arquivos se preocupar com como fazê-lo. Além disso, o sistema de arquivos permitiu que os aplicativos criassem hierarquias de dados por meio de uma abstração conhecida como diretório. Um diretório pode conter não apenas arquivos, mas outros diretórios, que, por sua vez, podem conter seus próprios arquivos e diretórios e assim por diante.

O sistema de arquivos forneceu um único nível de indireção entre aplicativos e o disco, e o resultado foi que cada aplicativo viu um arquivo como um único fluxo contíguo de bytes no disco, embora o sistema de arquivos estivesse realmente armazenando o arquivo em setores descoloridos. A indireção liberou os aplicativos de terem que acompanhar a posição absoluta dos dados em um dispositivo de armazenamento.

Hoje, praticamente todas as APIs do sistema para entrada e saída de arquivo fornecem aplicativos para gravar informações em um arquivo simples. Os aplicativos veem esse arquivo como um único fluxo de bytes que pode crescer tanto quanto necessário até que o disco esteja cheio. Por muito tempo, essas APIs têm sido suficientes para que os aplicativos armazenem suas informações persistentes. Os aplicativos fizeram inovações significativas na forma como lidam com um único fluxo de informações para fornecer recursos como salvamentos incrementais "rápidos".

No entanto, em um mundo de objetos de componente, o armazenamento de dados em um único arquivo simples não é mais eficiente. Assim como os sistemas de arquivos surgiram da necessidade de vários aplicativos compartilharem a mesma mídia de armazenamento, então, agora, os objetos de componente exigem um sistema que lhes permita compartilhar o armazenamento dentro da estrutura conceitual de um único arquivo. Embora seja possível armazenar os objetos separados usando o armazenamento de arquivo simples convencional, se um dos objetos aumentar de tamanho ou se você simplesmente adicionar outro objeto, será necessário carregar todo o arquivo na memória, inserir o novo objeto e salvar o arquivo inteiro. Esse processo pode ser extremamente demorado.

A solução fornecida pelo COM é implementar um segundo nível de indireção: um sistema de arquivos dentro de um arquivo. O armazenamento de arquivos simples requer que uma grande sequência contígua de bytes no disco seja manipulada por meio de um único identificador de arquivo com um único ponteiro de busca. Por outro lado, o armazenamento estruturado COM define como tratar uma única entidade do sistema de arquivos como uma coleção estruturada de dois tipos de objetos — armazenamentos e fluxos — que atuam como diretórios e arquivos.