Um Virtual File System (ou Sistema de Arquivos Virtual, em português) é um sistema criado de modo a formar um sequenciamento, uma espécie de camada de abstração em cima de um sistema de arquivos, formando um mapeamento dos seus diretórios. Esta guia, portanto, exibe todo o sistema de arquivos virtuais de um pacote de aplicativos sequenciais, o que permite tanto a exclusão quanto a adição destas associações, tudo relacionado a um sistema de arquivos Unix; sua principal vantagem consiste em retornar uma interface genérica para estes.

A camada abstrata, criada pelo VFS, contém todos os tipos de informações arquivadas (arquivos ZIP, servidores FTP, pacotes TAR, sistemas de arquivos BFS, compartilhamentos SAMBA, imagens ISO de CD/DVD, catálogos de RPM, etc), possibilitando ao usuário o acesso a toda esta informação de maneira transparente e contínua, como se estivesse acessando uma pasta normal do computador. Para isso, são usados avançados gestores de ficheiros (gerenciadores de arquivos) com duplos painéis (estilo commander), escolha destes irá depender, é claro, do sistema operacional do usuário. Como exemplo temos o Krusader, suportado por POSIX (Linux/BSD/UNIX-like OSes) e Solaris, o qual suporta um gerenciamento extensivo de arquivamento na montagem de sistemas de ficheiros, FTP, dispondo um módulo de procura avançado, sincronização de diretórios e comparação de conteúdos de ficheiros. Todas as ações que efetuares sobre os arquivos no VFS são aplicadas nos arquivos originais, isto é, caso você apague os arquivos no VFS, estes irão ser apagados também do seu disco rígido.

No que se refere aos tipos de arquivos, os mesmos variam, pois os sistemas operacionais podem suportar diversos tipos. O Unix e o Windows, por exemplo, suportam diretórios e arquivos organizados em sequência de bytes, sequência de registros e árvores, conhecidos como arquivos regulares.

Nomenclaturas das rotas

Para a montagem das rotas deste sistema de arquivo, é necessário ter alguns conhecimentos em programação, pois estas são montadas através de linhas de comando específicas. Estas linhas e nomenclaturas utilizadas na rota variam ligeiramente de sistema para sistema, mas mantêm, via de regra, uma mesma estrutura. Uma rota é composta por uma sucessão de nomes de diretórios e subdiretórios, ordenados da esquerda para a direita e separados por algum sinal especial, podendo ser uma barra ('/') ou barra invertida ('\'). Além disso, o VFS permite que a mesma interface de chamada de sistemas (a API) seja utilizada para diferentes tipos de sistemas de arquivos.

Eficiência e desempenho

Com a utilização do Virtual File System e suas diversas funcionalidades, poderão ser retornados uma série de benefícios e facilidades, principalmente referentes a eficiência e ao desempenho da máquina. Porém, estes dependem de algumas características que devem ser levadas em conta.

Eficiência depende de:

  • Alocação de disco e algoritmos de diretórios;
  • Tipos de dados mantidos na entrada do arquivo no diretório.

Desempenho:

  • Cache de disco - seção separada de memória principal para blocos frequentemente usados;
  • Liberação antecipada (free-behind) e leitura antecipada (read-ahead) - técnicas para otimizar o acesso sequencial.
  • Aumentar o desempenho do PC dedicando partes da memória como discos virtuais (RAM disks).

Alocação de espaço em disco

Os processos de criação destes arquivos exigem, por sua vez, que o sistema operacional tenha controle de quais áreas ou blocos no disco estão livres, tornando-se, portanto, extremamente importante ter controle e conhecimento desta relação. Este gerenciamento pode ser feito de várias formas, como:

  • Alocação contígua - tange ao armazenamento dos arquivos em blocos sequencialmente dispostos. Nesta forma, o sistema encontra um arquivo através do endereço do primeiro bloco e da sua extensão. Em suas vantagens significativas, apresenta grande simplicidade em programar e realizar o controle sobre onde os blocos estão; e o excelente desempenho de leitura. No entanto, este tipo de implementação apresenta um grande problema: fragmentação do disco. Como os arquivos podem ser criados e eliminados frequentemente, os segmentos livres vão se fragmentando em pequenos pedaços por todo o disco.
  • Alocação por lista encadeada - consiste em manter os arquivos, cada um, como uma lista encadeada de blocos de disco. Dessa forma uma parte de cada bloco é usada como ponteiro para o próximo bloco, sendo o seu restante usado para dados. Uma vantagem observada com o seu uso é que o tamanho do arquivo não precisa ser conhecido antes de sua criação, já que cada bloco terá um ponteiro para o próximo. Assim, no caso de o disco estar fragmentado, não ocasionará problemas para a criação do arquivo. Já, o impasse encontrado neste tipo de alocação é o tempo de leitura extremamente lento, pois, devido ao acesso ser sempre sequencial, quando se deseja um bloco intermediário, será necessário percorrer o arquivo desde o início.
  • Alocação indexada - forma encontrada para resolver o problema de leitura da alocação por lista encadeada. Esta é realizada por meio de uma tabela de endereços dos blocos ocupados pelo arquivo, sendo, para cada novo bloco alocado, incluído um novo item a tabela. Usando alocação indexada, o acesso aleatório fica mais fácil, pois não é necessário percorrer todos os blocos de forma sequencial; o endereço de cada bloco fica armazenado na tabela de alocação. A desvantagem desta abordagem é que a tabela deverá ser mantida na memória principal e dependendo do tamanho dos blocos do disco, ocupará muito espaço de memória.
  • Alocação combinada - envolve o uso de blocos de índices e de encadeamento dos mesmos. Esta maneira combina a baixa ocupação de espaço e o bom desempenho da técnica de tabela de índices. Neste método de alocação é utilizada uma prática chamada de níveis de indireção na indexação, onde parte de um bloco pode ser utilizado para apontar direta ou indiretamente outros blocos de dados. Esta abordagem é tipicamente usada na complementação do sistema de arquivos Unix, chamada de I-nodes. Um I-node (index-node) são os metadados, armazenados em estrutura de dados própria, relacionando os atributos e os endereços dos blocos de um arquivo. (Fonte)

Protegendo o acesso

A proteção de acesso destes sistemas de arquivos é de extrema valia para que pessoas mal intencionadas não modifiquem seus comandos e alocações. Esta, portanto, visa possibilitar o compartilhamento seguro de arquivos entre usuários, quando desejado. Em geral, existe concessão ou não de acessos como leitura, gravação, execução e eliminação. Existem diferentes mecanismos de níveis de proteção. Alguns deles são:

Senha de Acesso:

  • O sistema concede acesso a determinados arquivos/diretórios através de uma senha;
  • Cada arquivo possui apenas uma senha e o acesso pode ter diversos níveis de acesso;
  • Desvantagem de compartilhamento, pois além do dono, todos os demais usuários precisam conhecer a senha de acesso.

Grupos de Usuários:

  • Existente em diversos Sistemas Operacionais;
  • Associa cada usuário a um grupo de usuários que compartilham arquivos e diretórios;
  • Existem três níveis de proteção: owner (dono), group (grupo) all (todos);
  • Necessário associar o tipo do acesso (leitura, escrita, execução e eliminação) aos três níveis de proteção.

Lista de Controle de Acesso (Access Control List - ACL):

  • Consiste em uma lista associada em todos os arquivos, especificando usuários e tipos de acesso permitido;
  • O Sistema Operacional verifica se a lista de controle autoriza a operação desejada pelo usuário;
  • A estrutura pode ter um tamanho bastante extenso considerando que um arquivo pode ter seu acesso compartilhado por diversos usuários;
  • A pesquisa sequencial na lista pode causar overhead.

(Fonte)