O Linux herdou do UNIX a metodologia para permitir que programas se informassem sobre os processos em andamento no sistema diretamente das estruturas armazenadas na memória do kernel —— ou seja, lendo diretamente o /dev/mem e interpretando os dados “nus e crus” contidos ali.
Era assim que o comando ps funcionava inicialmente.
Com o tempo, parte da informação passou a ser disponibilizada através de system calls.
Expor dados do sistema diretamente ao espaço do usuário, via /dev/mem se provou uma metodologia ineficiente e insegura, com o tempo.
Um novo método foi introduzido para facilitar o acesso a aos dados estruturados do sistema para os aplicativos do user-space — que foi a criação do sistema de arquivos /proc.
Com o /proc, as interfaces e as estruturas (diretórios e arquivos) poderiam se manter, mesmo havendo mudanças nas camadas internas do kernel.
Este método é menos frágil que o anterior e aguenta melhor o aumento na escala de trabalho do sistema.
O /proc filesystem foi projetado originalmente para publicar informações de processos e alguns atributos chave de sistema, requisitados por comandos como o ‘ps’, o ‘top’ e o ‘free’, por exemplo.
Sendo mais fácil de usar e obter informações a partir deste meio – tanto pelo lado do kernel quanto do lado do user-space – ele se tornou um verdadeiro depósito de informações de todo o tipo, vindas do sistema.
Além disto, ganhou arquivos com permissão de gravação, a serem usados para ajustar configurações e controlar a operação do kernel ou algum de seus vários subsistemas.
Em resumo, o aumento no uso do /proc para implementar controle de interfaces contribuiu para reduzir sua eficiência.
Isto levou os desenvolvedores a implementar, no kernel 2.6, uma nova metodologia, através do sysfs.
O sysfs ou /sys filesystem já foi projetado para adicionar suporte à estrutura do /proc e prover uma maneira uniforme de expor as informações do sistema e pontos de controle (sistema ajustável e atributos de drivers) para o user-space a partir do kernel.
Agora o framework de drivers, dentro do kernel, cria automaticamente os diretórios sob /sys a cada vez que um driver é registrado, baseado em seu tipo e nos valores contidos nas suas estruturas de dados.
Isto significa que os drivers de um tipo particular terão todos os mesmos elementos exibidos via sysfs.
O Linux vive uma fase de transição. Hoje, muitas informações “legadas” do sistema ainda são acessíveis no /proc. Contudo, todos os novos bus e drivers precisam expor suas informações e pontos de controle via sysfs — é para lá que estamos caminhando.
Referências
http://unix.stackexchange.com/questions/4884/what-is-the-difference-between-procfs-and-sysfs.