Qual é a diferença entre procfs e sysfs?

71

Qual é a diferença entre procfs e sysfs? Por que eles são feitos como sistemas de arquivos? Pelo que entendi, proc é apenas algo para armazenar as informações imediatas sobre os processos em execução no sistema.

Sen
fonte

Respostas:

61

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 procera um pouco caótico e era necessário um novo caminho.

Em seguida, sysfsfoi criado, e o novo material adicionado foi colocado sysfscomo 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.

Johan
fonte
2
Obrigado pela resposta .. Mas por que cpuinfo e meminfo são como as coisas ainda mantidas no procfs? Por que eles não podem ser movidos para o sysfs?
Sen
5
Eu acho que eles colocam coisas novas no sysfs e deixam o antigo como é para manter algum nível de compatibilidade com versões anteriores. Há um monte de coisas que depende essas coisas em proc ...
Johan
75

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.

Tim Bird
fonte
8
Um motivo pelo qual é "má forma" de usar /dev/meme /dev/kmemé que eles exigem acesso root, portanto, os aplicativos que os usam precisam ser configurados.
Barmar 08/08/14
2
Em muitos sistemas Unix e no Linux, esses arquivos de dispositivos pertencem ao grupo kmeme ferramentas como psSGID kmem.
countermode
2
De fato, o antigo método de acessar diretamente /dev/memou /dev/kmemera mais rápido para o kernel porque o processo no modo de usuário podia apenas mmapo arquivo e buscar todas as informações simplesmente lendo a RAM. Para obter qualquer informação do /procsistema de arquivos, é necessário um syscall opene outro, por readisso é muito mais lento. No entanto, /procnã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.
Mikko Rantalainen
10

procfs permite arbitrário file_operations, sysfs é mais restrito

Ciro Santilli adicionou uma nova foto
fonte
3

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.

kemra102
fonte
A memória etc não foi portada para o sysfs O que você quer dizer com portar? E por que não pretendia mostrar esse tipo de informação? Você poderia me explicar isso?
Sen
Por portado, quis dizer movido, que foi uma resposta para sua pergunta sobre se a Memória etc será movida para o sysfs. E ele só pretendia mostrar informações do dispositivo, pois o procfs não se saiu bem; o procfs ainda é excelente para outros tipos de informações.
kemra102
1

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 ..

gagan bajaj
fonte