A resposta vai depender se você quer dizer literalmente sem um sistema de arquivos ou se a pergunta deve ser interpretada um pouco diferente da forma como ela é realmente declarada. As respostas para pequenas variações na maneira como a pergunta é interpretada são:
- A execução do Linux sem nenhum dispositivo de bloco é totalmente viável e útil para alguns casos de uso especializados.
- A execução do Linux sem nenhum sistema de arquivos exigirá reescrever algumas partes do código do kernel e é improvável que seja um esforço útil.
- Executar o Linux sem usar nenhum descritor de arquivo exigirá muito esforço. Tenho certeza de que não valerá a pena o esforço.
Os motivos pelos quais você teria que reescrever partes do código do kernel para criar um sistema funcional sem um sistema de arquivos são:
- Cada encadeamento possui um diretório raiz e um diretório ativo atual que deve apontar para algum sistema de arquivos.
- Os programas são iniciados pela
execve
chamada do sistema que precisa de um executável a partir de um sistema de arquivos.
- O kernel cria um sistema de arquivos baseado em memória durante o processo de inicialização.
Depois que um programa é iniciado execve
, é possível remover o mapeamento do executável a partir do qual foi iniciado, embora, para fazer isso, sem travar imediatamente, primeiro seja necessário criar um mapeamento de memória executável sem o backup de um arquivo, e ele precisa inicializar isso com algum código útil antes de pular para ele e remover o mapeamento do executável.
Portanto, um programa em modo de usuário em execução pode existir em um estado em que não possui mapeamentos de memória suportados por arquivos e pode fechar todos os descritores de arquivos suportados por arquivos. Ele não pode deixar de ter um diretório raiz e um diretório de trabalho atual, mas pode abster-se deles.
Portanto, embora nesse estado você possa implementar o código do kernel para remover o sistema de arquivos do programa e mantê-lo em execução, não parece útil. E entrar nesse estado final sem passar por um estado intermediário de usar um sistema de arquivos será ainda mais trabalhoso, sem nenhum benefício útil.
Uma configuração útil para alguns casos de uso especializados
Evitar o uso de dispositivos de bloco pode ser útil. Durante a inicialização, o kernel cria um sistema de arquivos de memória e também pode preencher esse sistema de arquivos com o conteúdo de um cpio
arquivo morto antes de executar init
. Dessa forma, você pode executar um sistema inteiramente a partir de um sistema de arquivos baseado em memória, sem nenhum dispositivo de bloco para fazer backup.
Isso pode ser útil para sistemas em que você não deseja preservar nenhum estado e deseja que o sistema inicie de uma forma limpa após a reinicialização.
Obviamente, o kernel e o arquivo cpio precisam existir de alguma forma na memória antes que o kernel tenha controle. Como eles chegaram lá é um trabalho para o carregador de inicialização. O carregador de inicialização pode ter carregado os de um dispositivo de bloco, mesmo que o sistema em execução final não use dispositivos de bloco. Mas também é possível que o carregador de inicialização adquira o kernel e o arquivo cpio sem usar um dispositivo de bloco, por exemplo, inicializando pela rede.
useful exposure to the outside world