Was ist der Unterschied zwischen procfs und sysfs?

71

Was ist der Unterschied zwischen procfs und sysfs? Warum werden sie als Dateisysteme erstellt? Wie ich es verstehe, ist proc nur etwas, um die unmittelbaren Informationen über die im System ausgeführten Prozesse zu speichern.

Sen
quelle

Antworten:

61

Was ist der Unterschied zwischen procfs und sysfs?

procist das alte, es ist mehr oder weniger ohne Regeln und Struktur. Und irgendwann wurde entschieden, dass proces ein bisschen zu chaotisch war und ein neuer Weg nötig war.

Dann sysfswurde erstellt, und das neue Material, das hinzugefügt wurde, wurde in sysfsähnliche Geräteinformationen eingefügt .

In gewissem Sinne tun sie dasselbe, sind aber sysfsetwas strukturierter.

Warum werden sie als Dateisysteme erstellt?

Die UNIX-Philosophie besagt, dass alles eine "Datei" ist und daher so erstellt wurde, dass es sich wie Dateien verhält.

Wie ich es verstehe, ist proc nur etwas, um die unmittelbaren Informationen über die im System ausgeführten Prozesse zu speichern.

Diese Teile waren schon immer da und werden wahrscheinlich niemals in sie einziehen sysfs.

Aber es gibt noch mehr alte Sachen, die man finden prockann, die nicht verschoben wurden.

Johan
quelle
2
Danke für die Antwort. Aber warum werden cpuinfo- und meminfo-ähnliche Dinge immer noch in procfs gepflegt? Warum können sie nicht zu sysfs verschoben werden?
Sen
5
Ich vermute, sie haben neue Dinge in sysfs eingefügt und lassen die alten einfach so, wie sie sind, um ein gewisses Maß an Rückwärtskompatibilität aufrechtzuerhalten. Es gibt eine Menge Dinge, die von diesen Dingen in proc abhängen ...
Johan
75

Zu Beginn (zurück in Unix) erfuhren Programme über das direkte Lesen von Prozessstrukturen aus dem Kernel-Speicher (Öffnen von / dev / mem und direktes Interpretieren der Rohdaten), welche Prozesse auf dem System ablaufen. 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 über / dev / mem direkt im User-Space verfügbar zu machen, und es ist unangenehm, jedes Mal neue Systemaufrufe zu erstellen, wenn Sie neue Prozessdaten exportieren möchten. Daher wurde eine neuere Methode erstellt Zugriff auf strukturierte Daten für User-Space-Anwendungen, um Informationen zu Prozessattributen zu erhalten. Dies war das / proc-Dateisystem. Mit / proc können die Schnittstellen und Strukturen (Verzeichnisse und Dateien) beibehalten werden, selbst wenn sich die zugrunde liegenden Datenstrukturen im Kernel ändern. Dies war viel weniger anfällig als das frühere System und es skalierte besser.

Das / proc-Dateisystem wurde ursprünglich entwickelt, um Prozessinformationen und einige wichtige Systemattribute zu veröffentlichen, die für 'ps', 'top', 'free' und einige andere Systemdienstprogramme erforderlich sind. Da es jedoch einfach zu bedienen war (sowohl vom Kernel als auch vom User-Space aus), wurde es zu einer Ablage für eine ganze Reihe von Systeminformationen. Außerdem begann es, Lese- / Schreibdateien zu erhalten, mit denen Einstellungen vorgenommen und der Betrieb des Kernels oder seiner verschiedenen Subsysteme gesteuert werden konnten. Die Methode zur Implementierung von Steuerungsschnittstellen war jedoch ad-hoc und / proc entwickelte sich bald zu einem Wirrwarr.

Das sysfs (oder / sys-Dateisystem) wurde entwickelt, um diesem Durcheinander eine Struktur zu verleihen und eine einheitliche Möglichkeit zu bieten, Systeminformationen und Kontrollpunkte (einstellbare System- und Treiberattribute) dem Benutzerbereich des Kernels zugänglich zu machen. Das Treiber-Framework im Kernel erstellt nun automatisch Verzeichnisse unter / sys, wenn Treiber registriert werden, basierend auf dem Treibertyp und den Werten in ihren Datenstrukturen. Dies bedeutet, dass Treiber eines bestimmten Typs dieselben Elemente aufweisen, die über sysfs verfügbar gemacht werden.

Viele der älteren Systeminformationen und Kontrollpunkte sind noch in / proc verfügbar, aber alle neuen Busse und Treiber sollten ihre Informationen und Kontrollpunkte über sysfs verfügbar machen.

Tim Bird
quelle
8
Ein Grund dafür , dass es „schlechte Form“ zu verwenden , /dev/memund /dev/kmemist , dass sie Root - Zugriff erfordern, so dass die Anwendungen , die sie haben , nutzen zu setuid.
Barmar
2
Auf vielen Unix-Systemen und unter Linux gehören diese Gerätedateien der Gruppe kmem, und Tools wie psSGID kmem.
Gegenmodus
2
In der Tat, die alte Methode der direkten Zugriff auf /dev/memoder /dev/kmemwar schneller für den Kernel , da Benutzermodus - Prozess konnte nur mmapdie Datei und holt alle Informationen einfach durch RAM zu lesen. Das Abrufen von Informationen aus dem /procDateisystem erfordert einen Systemaufruf für openund einen anderen, readsodass es viel langsamer ist. Allerdings /procerfordern Kernel keine spezifischen Hacks den Speicher und macht viel weniger sensible Daten in den Benutzermodus Prozesse zu lesen.
Mikko Rantalainen
10

procfs erlaubt beliebig file_operations, sysfs ist eingeschränkter

Ciro Santilli ist ein Schauspieler
quelle
3

sysfs ist das virtuelle Dateisystem, das während des 2.6-Kernel-Release-Zyklus erstellt wurde, um Geräteinformationen anzuzeigen, da procfs diese Art von Informationen nicht so gut verarbeitet hat.

Speicher usw. wurden nicht nach sysfs portiert, da diese Art von Informationen nie angezeigt werden sollten, so dass es unwahrscheinlich ist, dass sie überhaupt portiert werden.

kemra102
quelle
Speicher usw. wurde nicht nach sysfs portiert. Was meinen Sie mit Portierung? Und warum sollte diese Art von Information nicht angezeigt werden? Könnten Sie mir das bitte erklären?
Sen
Mit portiert meinte ich bewegt, was eine Antwort auf Ihre Frage war, ob Speicher usw. nach sysfs verschoben werden. Und es war immer nur beabsichtigt, Geräteinformationen anzuzeigen, da procfs dies nicht gut gemacht hat. Procfs eignet sich immer noch hervorragend für andere Arten von Informationen.
kemra102
1

Wie ich auch hier hinzufügen möchte ... Da / proc die ältere Version ist, enthält es die Informationen des Kernel-Geräts aus dieser Zeit. Als sysfs mit der Kernel-Version 2.6 geliefert wurde, erstellt der Gerätetreiber ein eigenes Verzeichnis, anhand dessen es sich befindet ein bisschen strukturiert und leicht zugänglich ..

Gagan Bajaj
quelle