Am Anfang (vor langer Zeit in Unix) erfuhren Programme von den laufenden Prozessen auf dem System, indem sie Prozessstrukturen direkt aus dem Kernelspeicher lasen (Öffnen von /dev/mem und direktes Interpretieren der Rohdaten). So funktionierten die allerersten 'ps'-Befehle. Im Laufe der Zeit wurden einige Informationen über Systemaufrufe verfügbar gemacht.
Es ist jedoch eine schlechte Form, Systemdaten direkt über /dev/mem dem Benutzerbereich zugänglich zu machen, und unausstehlich, jedes Mal, wenn Sie ein neues Stück Prozessdaten exportieren wollten, ständig neue Systemaufrufe zu erstellen, und so wurde eine neuere Methode erstellt um auf strukturierte Daten für User-Space-Anwendungen zuzugreifen, um Prozessattribute herauszufinden. Dies war das /proc-Dateisystem. Mit /proc konnten die Schnittstellen und Strukturen (Verzeichnisse und Dateien) beibehalten werden, auch wenn sich die zugrunde liegenden Datenstrukturen im Kernel geändert haben. Dies war viel weniger anfällig als das frühere System und besser skalierbar.
Das Dateisystem /proc wurde ursprünglich entwickelt, um Prozessinformationen und einige wichtige Systemattribute zu veröffentlichen, die von 'ps', 'top', 'free' und einigen anderen Systemdienstprogrammen benötigt werden. Da es jedoch einfach zu verwenden war (sowohl von der Kernel-Seite als auch von der User-Space-Seite), wurde es zu einem Abladeplatz für eine ganze Reihe von Systeminformationen. Außerdem fing es an, Lese-/Schreibdateien zu gewinnen, um Einstellungen anzupassen und den Betrieb des Kernels oder seiner verschiedenen Subsysteme zu steuern. Die Methodik zur Implementierung von Kontrollschnittstellen war jedoch ad-hoc, und /proc entwickelte sich bald zu einem Wirrwarr.
Das sysfs- (oder /sys-Dateisystem) wurde entwickelt, um diesem Durcheinander Struktur zu verleihen und einen einheitlichen Weg zu bieten, Systeminformationen und Kontrollpunkte (einstellbare System- und Treiberattribute) vom Kernel aus dem Benutzerbereich zugänglich zu machen. Jetzt erstellt das Treiber-Framework im Kernel automatisch Verzeichnisse unter /sys, wenn Treiber registriert werden, basierend auf dem Treibertyp und den Werten in ihren Datenstrukturen. Das bedeutet, dass Treiber eines bestimmten Typs alle die gleichen Elemente haben, die über sysfs verfügbar gemacht werden.
Viele der veralteten Systeminformationen und Kontrollpunkte sind immer noch in /proc zugänglich, aber alle neuen Busse und Treiber sollten ihre Informationen und Kontrollpunkte über sysfs offenlegen.
Was ist der Unterschied zwischen procfsund sysfs?
proc
ist das alte, es ist mehr oder weniger ohne Regeln und Struktur. Und irgendwann wurde entschieden, dass proc
war ein wenig zu chaotisch und ein neuer Weg musste her.
Dann sysfs
wurde erstellt, und die neu hinzugefügten Sachen wurden in sysfs
eingefügt wie Geräteinformationen.
In gewisser Weise tun sie dasselbe, aber sysfs
ist etwas strukturierter.
Warum werden sie als Dateisysteme erstellt?
Die UNIX-Philosophie sagt uns, dass alles eine "Datei" ist, daher wurde es so erstellt, dass es sich wie eine Datei verhält.
So wie ich es verstehe, ist proc nur etwas, um die unmittelbaren Informationen über die im System laufenden Prozesse zu speichern.
Diese Teile waren schon immer da und werden wahrscheinlich nie in sysfs
einziehen .
Aber es gibt noch mehr alte Sachen, die Sie in proc
finden können , das nicht verschoben wurde.
procfs erlaubt beliebiges file_operations
, sysfs ist eingeschränkter
-
procfs-Einträge erhalten einen
file_operations
struct, die Funktionszeiger enthält, die bestimmen, was mit jedem dateibasierten Systemaufruf passiert, z.open
,read
,mmap
, etc., und Sie können daraus beliebige Aktionen ausführen.Minimalbeispiele:
- Wie funktioniert
/proc/*
Arbeit? | Superuser proc_create()
Beispiel für Kernelmodul | Stapelüberlauf
- Wie funktioniert
-
sysfs ist in folgendem Sinne eingeschränkter:
- Sie implementieren nur zwei Methoden
show
undstore
, die Linux verwendet, umopen
zu implementieren ,close
,read
,write
undlseek
für dich. Siehe auch:Wie fügt man Dateioperationen an das Attribut sysfs im Plattformtreiber an? | Stapelüberlauf - eng gekoppelt mit
kobject
Minimales Beispiel:So erstellen Sie ein einfaches sysfs-Klassenattribut im Linux-Kernel v3.2 | Stapelüberlauf
- Sie implementieren nur zwei Methoden