Minha opinião é sim, sim, porque toda exposição útil ao mundo externo (modo de processador não privilegiado) exigiria primeiro um processo em execução no mundo externo. Isso exigiria um sistema de arquivos, mesmo um sistema de arquivos temporário na RAM.
Outro engenheiro discorda de mim, mas não consigo provar isso além de todos os casos (desconhecidos para mim).
A resposta a esta pergunta depende da definição de 'corrida'?
filesystems
linux-kernel
Peter L.
fonte
fonte
useful exposure to the outside world
init
(o primeiro processo de espaço do usuário) e isso falhará.Respostas:
Essa é uma pergunta estranha, porque você não executa o kernel como executa um programa. O kernel é uma plataforma para executar programas. É claro que existe um código de configuração e desligamento, mas não é possível executar o kernel por conta própria. Sempre deve haver um processo "init" principal. E o kernel entrará em pânico se não estiver lá. Se o init tentar sair do kernel também entrará em pânico.
Atualmente, o processo init é algo como systemd. Se não especificado de outra forma, o kernel tentará executar um programa a partir de uma lista de locais começando com
/sbin/init
. Veja o parâmetro init aqui http://man7.org/linux/man-pages/man7/bootparam.7.html em uma emergência com a qual você pode inicializar o Linuxinit=/bin/bash
. Mas observe como você sempre especifica um arquivo no sistema de arquivos a ser executado.Portanto, o kernel entrará em pânico se inicializar e não possuir um sistema de arquivos, porque sem ele não há como carregar o init.
Alguma confusão pode surgir devido a uma situação de galinha e ovo em que o kernel deve carregar drivers para acessar seu sistema de arquivos. Para contornar isso, um ramdisk inicial é carregado de uma imagem em disco contendo drivers vitais e scripts de configuração. Eles são executados antes do carregamento do sistema de arquivos. Mas não se engane, o ramdisk inicial é um sistema de arquivos. Com um ramdisk inicial
/init
é chamado (que é armazenado no ramdisk inicial). Em muitas distribuições, é finalmente isso que chama/sbin/init
. Novamente, sem um sistema de arquivos, isso é impossível.fonte
init.$DEV.rc
script.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:
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:
execve
chamada do sistema que precisa de um executável a partir de um sistema de arquivos.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 executarinit
. 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.
fonte
No Linux, quase todo dispositivo é um arquivo , então você precisa ter um sistema de arquivos para executá-lo.
fonte
eth0
,wlan0
etc.) não são, por exemplo.Um kernel é um programa, como qualquer outro. Por padrão, o kernel do Linux tenta acessar o sistema de arquivos, no entanto, esse comportamento pode ser eliminado trivialmente pela modificação do kernel (na verdade, apenas uma adição da função "arch_call_rest_init ()"). Para executar um "trabalho útil", esperamos que o desenvolvedor inclua threads do kernel (kthreads), executados em um driver personalizado, para executar a inicialização desejada e a carga de trabalho do tipo de aplicativo. O kernel do Linux já contém muitos kthreads, mas principalmente para executar trabalhos auxiliares ao kernel ou drivers. As APIs disponíveis no contexto do kernel são bem diferentes daquelas disponíveis no espaço do usuário do Linux. Uma grande fração da funcionalidade de chamada do sistema se tornaria inútil em um cenário sem sistema de arquivos.
Sim, o Linux espera acessar os sistemas de arquivos por padrão. Não, certamente poderia ser feito um kernel modificado para executar um trabalho útil sem qualquer sistema de arquivos. O uso prático do Linux sem sistema de arquivos é IMO bastante limitado, mas não nulo. FWIW, no passado, muitos kernels em tempo real foram incorporados no mesmo espaço de nome e binário que os aplicativos RT.
fonte