Respostas:
Qual é a diferença entre procfs e sysfs?
proc
é o antigo, é mais ou menos sem regras e estrutura. E em algum momento foi decidido que proc
era um pouco caótico e era necessário um novo caminho.
Em seguida, sysfs
foi criado, e o novo material adicionado foi colocado sysfs
como informações do dispositivo.
Então, em certo sentido, eles fazem o mesmo, mas sysfs
é um pouco mais estruturado.
Por que eles são feitos como sistemas de arquivos?
A filosofia do UNIX nos diz que tudo é um "arquivo", portanto foi criado para que se comporte como arquivos.
Pelo que entendi, proc é apenas algo para armazenar as informações imediatas sobre os processos em execução no sistema.
Essas partes sempre estiveram lá e provavelmente nunca se mudarão sysfs
.
Mas há mais coisas antigas que você pode encontrar proc
, que não foram movidas.
No começo (no Unix), a maneira como os programas descobriam os processos em execução no sistema era através da leitura direta das estruturas de processo da memória do kernel (abrindo / dev / mem e interpretando os dados brutos diretamente). Foi assim que os primeiros comandos 'ps' funcionaram. Com o tempo, algumas informações foram disponibilizadas por meio de chamadas do sistema.
No entanto, é uma má forma expor os dados do sistema diretamente ao espaço do usuário via / dev / mem, e desagradável criar constantemente novas chamadas de sistema toda vez que você deseja exportar alguns novos dados do processo e, portanto, um método mais novo foi criado acessar dados estruturados para aplicativos de espaço do usuário para descobrir sobre os atributos do processo. Este era o sistema de arquivos / proc. Com / proc, as interfaces e estruturas (diretórios e arquivos) podem ser mantidas iguais, mesmo que as estruturas de dados subjacentes no kernel sejam alteradas. Isso era muito menos frágil do que o sistema anterior e era melhor dimensionado.
O sistema de arquivos / proc foi originalmente projetado para publicar informações do processo e alguns atributos-chave do sistema, exigidos por 'ps', 'top', 'free' e alguns outros utilitários do sistema. No entanto, por ser fácil de usar (do lado do kernel e do espaço do usuário), tornou-se um depósito de lixo para toda uma gama de informações do sistema. Além disso, começou a obter arquivos de leitura / gravação, para ser usado para ajustar configurações e controlar a operação do kernel ou de seus vários subsistemas. No entanto, a metodologia de implementação de interfaces de controle era ad-hoc, e / proc logo se transformou em uma confusão.
O sysfs (ou sistema de arquivos / sys) foi projetado para adicionar estrutura a essa bagunça e fornecer uma maneira uniforme de expor informações do sistema e pontos de controle (atributos configuráveis do sistema e do driver) ao espaço do usuário a partir do kernel. Agora, a estrutura do driver no kernel cria diretórios automaticamente em / sys quando os drivers são registrados, com base no tipo de driver e nos valores em suas estruturas de dados. Isso significa que os drivers de um tipo específico terão todos os mesmos elementos expostos via sysfs.
Muitas informações e pontos de controle herdados do sistema ainda estão acessíveis em / proc, mas todos os novos barramentos e drivers devem expor suas informações e pontos de controle via sysfs.
/dev/mem
e /dev/kmem
é que eles exigem acesso root, portanto, os aplicativos que os usam precisam ser configurados.
kmem
e ferramentas como ps
SGID kmem
.
/dev/mem
ou /dev/kmem
era mais rápido para o kernel porque o processo no modo de usuário podia apenas mmap
o arquivo e buscar todas as informações simplesmente lendo a RAM. Para obter qualquer informação do /proc
sistema de arquivos, é necessário um syscall open
e outro, por read
isso é muito mais lento. No entanto, /proc
não requer hacks específicos do kernel para ler a memória e expõe dados muito menos sensíveis aos processos no modo de usuário.
procfs permite arbitrário file_operations
, sysfs é mais restrito
procfs entradas receber uma file_operations
struct, que contém ponteiros de função que determinam o que acontece a cada chamada de sistema baseado em arquivo, por exemplo open
, read
, mmap
, etc., e você pode tomar ações arbitrárias daqueles.
Exemplos mínimos:
O sysfs é mais restrito nos seguintes sentidos:
show
e store
que Linux utiliza para implementar open
, close
, read
, write
e lseek
para você. Consulte também: Como anexar operações de arquivo ao atributo sysfs no driver da plataforma? | Estouro de pilhakobject
Exemplo mínimo: como criar um atributo de classe sysfs simples no kernel Linux v3.2 | Estouro de pilha
O sysfs é o sistema de arquivos virtual criado durante o ciclo de lançamento do Kernel 2.6 para mostrar informações do dispositivo, já que o procfs não fez esse tipo de informação tão bem.
A memória etc não foi portada para o sysfs, pois nunca foi destinado a mostrar esse tipo de informação, portanto é improvável que ela seja portada.
Como eu também quero adicionar aqui ... Como / proc é a versão mais antiga, ela contém as informações do dispositivo do kernel daquele período de tempo .. como o sysfs veio com a versão 2.6 do kernel, para que as informações do driver do dispositivo criem seu próprio diretório pelo qual estão. um pouco estruturado e de fácil acesso ..