GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Was ist der Unterschied zwischen procfs und sysfs?

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
  • sysfs ist in folgendem Sinne eingeschränkter:

    • Sie implementieren nur zwei Methoden show und store , die Linux verwendet, um open zu implementieren , close , read , write und lseek 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


Linux
  1. Was ist der Unterschied zwischen InnoDB und MyISAM?

  2. Der Unterschied zwischen Halt- und Shutdown-Befehlen?

  3. Der Unterschied zwischen [[ $a ==Z* ]] und [ $a ==Z* ]?

  4. Was ist der Unterschied zwischen fsck und e2fsck?

  5. Was ist der Unterschied zwischen ls und l?

Was ist der Unterschied zwischen Linux und Unix?

Was ist der Unterschied zwischen Login- und Non-Login-Shell

Was ist der Unterschied zwischen apt und dem Befehl apt-get?

Was ist ein Hypervisor? Was ist der Unterschied zwischen Typ 1 und 2?

Was ist der Unterschied zwischen Curl und Wget?

Was ist der Unterschied zwischen Systemaufruf und Bibliotheksaufruf?