
Ich habe am Dateisystem in Linux herumgebastelt /proc
und bin auf gestoßen /proc/self
, was ein symbolischer Link zum Prozessverzeichnis des aktuellen Prozesses ist. Ich würde gerne wissen, wie es implementiert ist. Eine Lösung wäre, diesen symbolischen Link zu ändern aufjeder Kontextwechsel, aber das ist offensichtlich sehr teuer, da es einen Festplattenzugriff erfordert.
Antwort1
http://lxr.linux.no/linux+v3.2.9/fs/proc/base.c#L2482ist die aktuelle Implementierung.
Das proc
Dateisystem ist vollständig virtuell und wird so implementiert, dass das interne VFS readlink
spezielle symbolische Links an die richtige Stelle weiterleitet. Es berechnet also, worauf self
es beim Lesen/Durchlaufen verweist, nicht bei jedem Kontextwechsel.
Antwort2
Dateien in /proc
werden nicht auf einer Festplatte gespeichert, sondern werden vom Kernel im laufenden Betrieb generiert. SieheWas passiert, wenn ich /proc öffne und daraus lese?
Wenn Sie programmtechnisch versiert sind, können Sie die Implementierung /proc
imKernel-QuellcodeDer Inhalt der/proc/self
Der symbolische Link wird erzeugt durchFunktiondas einen Puffer mit der PID des aufrufenden Prozesses füllt.