Quelle est la différence entre procfs et sysfs?

71

Quelle est la différence entre procfs et sysfs? Pourquoi sont-ils fabriqués en tant que systèmes de fichiers? Si je comprends bien, proc est juste quelque chose pour stocker les informations immédiates concernant les processus en cours d'exécution dans le système.

Sen
la source

Réponses:

61

Quelle est la différence entre procfs et sysfs?

procest l'ancien, il est plus ou moins sans règles et structure. Et à un moment donné, il a été décidé que procc'était un peu trop chaotique et qu'une nouvelle façon était nécessaire.

Ensuite, a sysfsété créé, et le nouveau contenu qui a été ajouté a été mis dans les sysfsmêmes informations de périphérique.

Donc, dans un certain sens, ils font la même chose, mais ils sysfssont un peu plus structurés.

Pourquoi sont-ils fabriqués en tant que systèmes de fichiers?

La philosophie UNIX nous dit que tout est un "fichier", il a donc été créé pour se comporter comme un fichier.

Si je comprends bien, proc est juste quelque chose pour stocker les informations immédiates concernant les processus en cours d'exécution dans le système.

Ces parties ont toujours été présentes et ne seront probablement jamais déplacées sysfs.

Mais il y a plus d'anciennes choses que vous pouvez trouver proc, qui n'ont pas été déplacées.

Johan
la source
2
Merci pour la réponse .. Mais pourquoi cpuinfo et meminfo sont-ils comme maintenus dans procfs? Pourquoi ne peuvent-ils pas être déplacés vers sysfs?
Sen
5
Je suppose qu'ils ont mis de nouveaux éléments dans sysfs et ont laissé l’ancien pour conserver un niveau de compatibilité vers l’arrière. Il y a beaucoup de choses qui dépendent de ces choses dans la proc ...
Johan
75

Au début (retour sous Unix), les programmes ont découvert les processus en cours sur le système en lisant directement les structures de processus dans la mémoire du noyau (en ouvrant / dev / mem et en interprétant directement les données brutes). Voici comment les toutes premières commandes "ps" ont fonctionné. Au fil du temps, certaines informations ont été mises à disposition via des appels système.

Cependant, il est mauvais d’exposer directement les données système à l’espace utilisateur via / dev / mem et de créer constamment de nouveaux appels système chaque fois que vous souhaitez exporter de nouvelles données de processus. Une nouvelle méthode a donc été créée. accéder à des données structurées pour les applications d’espace utilisateur pour en savoir plus sur les attributs de processus. C'était le système de fichiers / proc. Avec / proc, les interfaces et les structures (répertoires et fichiers) peuvent rester identiques, même si les structures de données sous-jacentes du noyau changent. C’était beaucoup moins fragile que le système précédent, et sa taille était meilleure.

Le système de fichiers / proc a été conçu à l'origine pour publier des informations sur les processus et quelques attributs système essentiels, requis par 'ps', 'top', 'free' et quelques autres utilitaires système. Cependant, parce qu’il était facile à utiliser (du côté du noyau et du côté de l’espace utilisateur), il est devenu un dépotoir pour toute une gamme d’informations système. En outre, il commençait à acquérir des fichiers en lecture / écriture, permettant d’ajuster les paramètres et de contrôler le fonctionnement du noyau ou de ses divers sous-systèmes. Cependant, la méthodologie de mise en œuvre des interfaces de contrôle était ad-hoc et / proc est rapidement devenu un fouillis.

Le système sysfs (ou / sys filesystem) a été conçu pour ajouter une structure à ce désordre et fournir un moyen uniforme d’exposer les informations système et les points de contrôle (attributs système et pilote réglables) à l’espace utilisateur à partir du noyau. Désormais, la structure de pilotes du noyau crée automatiquement des répertoires sous / sys lors de l’enregistrement des pilotes, en fonction du type de pilote et des valeurs de leurs structures de données. Cela signifie que les pilotes d'un type particulier auront tous les mêmes éléments exposés via sysfs.

La plupart des informations et des points de contrôle du système hérités sont toujours accessibles dans / proc, mais tous les nouveaux bus et pilotes doivent exposer leurs points d’information et de contrôle via sysfs.

Tim Bird
la source
8
Une raison pour laquelle il est « mauvaise forme » à utiliser /dev/memet /dev/kmemest qu'ils ont besoin d'un accès root, de sorte que les applications qui les utilisent doivent être setuid.
Barmar
2
Sur de nombreux systèmes Unix et Linux, ces fichiers de périphériques appartiennent au groupe kmem, et des outils tels que psSGID kmem.
countermode
2
En fait, l'ancienne méthode consistant à accéder directement au noyau /dev/memou /dev/kmemétait plus rapide pour le noyau, car le processus en mode utilisateur pouvait uniquement mmapextraire le fichier et extraire toutes les informations simplement en lisant la RAM. Obtenir n'importe quelle information du /procsystème de fichiers nécessite un appel système openet un autre, readdonc c'est beaucoup plus lent. Cependant, /procne nécessite pas de piratage spécifique au noyau pour lire la mémoire et expose des données beaucoup moins sensibles aux processus en mode utilisateur.
Mikko Rantalainen
10

procfs permet l'arbitraire file_operations, sysfs est plus restreint

Ciro Santilli 改造 中心 六四 事件
la source
3

sysfs est le système de fichiers virtuel créé lors du cycle de publication de la version 2.6 du noyau pour afficher les informations sur le périphérique, car procfs n'a pas bien traité ce type d'informations.

La mémoire, etc. n'a pas été transférée à sysfs car elle n'a jamais été conçue pour afficher ce type d'informations. Il est donc peu probable que ce soit le cas.

kemra102
la source
La mémoire, etc. n'a pas été porté sur sysfs. Que voulez-vous dire par portage? Et pourquoi n'était-il pas destiné à montrer ce type d'informations? Pourriez-vous s'il vous plaît m'expliquer cela?
Sen
Par porté, je voulais dire déplacé, ce qui était une réponse à votre question de savoir si la mémoire, etc., serait déplacée vers sysfs. Et il était uniquement destiné à afficher des informations sur les périphériques car c’est ce que procfs n’a pas bien fait, procfs est toujours excellent pour les autres types d’informations.
kemra102
1

Comme je veux aussi ajouter ici ... Comme / proc est l'ancienne version, elle contient les informations sur le périphérique du noyau de cette période .. comme sysfs est venu avec la version 2.6 du noyau, les informations de pilote de périphérique créent leur propre répertoire dans lequel elles se trouvent. un peu structuré et facile d'accès ..

Gagan Bajaj
la source