Como interagir com o sistema de arquivos concreto?

0

Um programa de espaço de usuário pode interagir com o sistema de arquivos concreto (não VFS). O que eu tenho é que o VFS permite que o linux trate todos os sistemas de arquivos e forneça uma API abstrata ao espaço do usuário.

Eu quero alcançar uma condição em que um sistema de arquivos personalizado seja capaz de fornecer uma API para leitura, gravação e exclusão em disco (SSD) no nível da página utilizável no userspace.

Para o qual eu precisarei ter um método para conseguir interação com o sistema de arquivos concreto ignorando o VFS.

    
por user1065734 03.06.2014 / 11:15

3 respostas

4

O único ponto de entrada para interações do sistema de arquivos é o mecanismo de chamadas do sistema, que, por sua vez, depende muito (se não exclusivamente) do VFS.

Se alguém quisesse criar um sistema de arquivos que não dependesse do VFS, essa pessoa seria forçada a implementar um novo conjunto de chamadas de sistema de E / S que interagiria diretamente com o nível de bloco do Linux.

Isto não é elegante nem portátil. Além de ser um pesadelo para implementar, depurar e manter, esse sistema de arquivos personalizado seria acessível apenas por aplicativos que usem esse conjunto de chamadas de sistema personalizadas. Tal abordagem lança qualquer noção de portabilidade fora da janela.

Portanto, para responder à sua pergunta: Sim, é possível implementar um novo conjunto de chamadas do sistema, mas os únicos clientes do espaço de usuários desse sistema de arquivos seriam seus próprios aplicativos. Para algo mais portável do que isso, você precisa trabalhar com o VFS.

Editar:

Eu vi sua pergunta anterior sobre a implementação de um alto desempenho sistema de armazenamento de valor-chave para SSDs que, acredito, o levou a considerar essa abordagem. Eu gostaria de acrescentar duas coisas:

  • O VFS não é um um gargalo. Ele encaminha as operações de E / S para o nível de bloco do Linux de maneira muito eficiente.
  • A usabilidade de um aplicativo que requer correção de kernel (com código de qualidade questionável) é extremamente baixa. A menos que você esteja escrevendo este sistema explicitamente para seu próprio uso pessoal, sugiro explorar outras possibilidades antes de tentar otimizar as coisas dentro do kernel.
por 03.06.2014 / 13:03
0

Diferente do "apagar no disco", que seria um ioctl (), que se parece muito com o seguinte:

  • Ler / escrever as páginas no dispositivo de bloco
  • Ler / escrever as páginas em um determinado arquivo

que você faria usando lseek + leitura / gravação no tamanho de página adequado.

(você poderia fazer pread / pwrite se você preferir fornecer tudo em um syscall, mas é equivalente)

    
por 03.06.2014 / 12:07
0

Seguindo Disco de baixo nível i / o no linux , você pode implementar seu próprio código para acessar um sistema de arquivos com um programa que acessa o dispositivo de bloco diretamente. É muito provável que seja mais lento que o driver do sistema de arquivos no kernel (que é acessado através da camada VFS - é sobre isso que a camada VFS é). É possível, e é útil para alguns casos de uso (por exemplo, forense, ou acessar tipos de sistema de arquivos que não são suportados no kernel), mas é a abordagem errada para o seu caso de uso.

    
por 04.06.2014 / 03:32