Antworten:
Was ist der Unterschied zwischen procfs und sysfs?
proc
ist das alte, es ist mehr oder weniger ohne Regeln und Struktur. Und irgendwann wurde entschieden, dass proc
es ein bisschen zu chaotisch war und ein neuer Weg nötig war.
Dann sysfs
wurde 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 sysfs
etwas 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 proc
kann, die nicht verschoben wurden.
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.
/dev/mem
und /dev/kmem
ist , dass sie Root - Zugriff erfordern, so dass die Anwendungen , die sie haben , nutzen zu setuid.
kmem
, und Tools wie ps
SGID kmem
.
/dev/mem
oder /dev/kmem
war schneller für den Kernel , da Benutzermodus - Prozess konnte nur mmap
die Datei und holt alle Informationen einfach durch RAM zu lesen. Das Abrufen von Informationen aus dem /proc
Dateisystem erfordert einen Systemaufruf für open
und einen anderen, read
sodass es viel langsamer ist. Allerdings /proc
erfordern Kernel keine spezifischen Hacks den Speicher und macht viel weniger sensible Daten in den Benutzermodus Prozesse zu lesen.
procfs erlaubt beliebig file_operations
, sysfs ist eingeschränkter
procfs Einträge erhalten eine file_operations
Struktur, die Funktionszeiger enthält , die bestimmen , was zu jedem dateibasierten Systemaufruf geschieht, zum Beispiel open
, read
, mmap
usw., und Sie können sich von denen beliebige Aktionen ausführen .
Minimale Beispiele:
sysfs ist in folgenden Punkten eingeschränkt:
show
und store
, die Linux zu implementieren verwendet open
, close
, read
, write
und lseek
für Sie. Siehe auch: So hängen Sie Dateioperationen an das sysfs-Attribut im Plattformtreiber an | Paketüberflusskobject
Minimales Beispiel: So erstellen Sie ein einfaches sysfs-Klassenattribut im Linux-Kernel v3.2 | Paketüberfluss
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.
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 ..