Quelle est la différence entre procfs et sysfs?
proc
est l'ancien, il est plus ou moins sans règles et structure. Et à un moment donné, il a été décidé que proc
c'é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 sysfs
mêmes informations de périphérique.
Donc, dans un certain sens, ils font la même chose, mais ils sysfs
sont 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.
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.
la source
/dev/mem
et/dev/kmem
est qu'ils ont besoin d'un accès root, de sorte que les applications qui les utilisent doivent être setuid.kmem
, et des outils tels queps
SGIDkmem
./dev/mem
ou/dev/kmem
était plus rapide pour le noyau, car le processus en mode utilisateur pouvait uniquementmmap
extraire le fichier et extraire toutes les informations simplement en lisant la RAM. Obtenir n'importe quelle information du/proc
système de fichiers nécessite un appel systèmeopen
et un autre,read
donc c'est beaucoup plus lent. Cependant,/proc
ne 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.procfs permet l'arbitraire
file_operations
, sysfs est plus restreintentrées procfs reçoivent une
file_operations
struct qui contient des pointeurs de fonction qui déterminent ce qui se passe à chaque appel système basé sur des fichiers, par exempleopen
,read
,mmap
, etc., et vous pouvez prendre des mesures arbitraires de ceux -ci .Exemples minimaux:
/proc/*
marche? | Super utilisateurproc_create()
exemple pour le module de noyau | Débordement de pilesysfs est plus restreint dans les sens suivants:
show
etstore
qui Linux utilise pour mettre en œuvreopen
,close
,read
,write
etlseek
pour vous. Voir aussi: Comment attacher des opérations de fichier à l'attribut sysfs dans le pilote de plate-forme? | Débordement de pilekobject
Exemple minimal: Comment créer un attribut de classe sysfs simple dans le noyau Linux v3.2 | Débordement de pile
la source
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.
la source
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 ..
la source