Lowlevel

Lowlevel => tyndur => Thema gestartet von: OsDevNewbie am 24. July 2014, 15:52

Titel: VFS und Ressourcen
Beitrag von: OsDevNewbie am 24. July 2014, 15:52
Hallo Leute,
ich implementiere bei meinem OS gerade das VFS, aber stecke momentan in einer kleinen Krise, wie ich das Öffnen von Dateien implementieren will. Daher habe ich mal bei tyndur vorbei geschaut. Aber selbst nach Tagelangem analysieren des Quellcodes von lostio komme ich immer noch nicht klar mit den Ressourcen, die da die ganze Zeit als Parameter übergeben werden. Was ist eine Ressource und warum ist eine Ressource Bestandteil einer Node?
Also bei mir ist eine Node ein Teil des Baumes für das VFS. Ein Mountpoint ist bei mir eine Node in der steht, dass sie ein Mountpoint ist und hat einen Zeiger auf eine cdi_fs_filesystem Struktur.
Ich hoffe ihr könnt mir ein bisschen helfen.
Titel: Re: VFS und Ressourcen
Beitrag von: kevin am 24. July 2014, 16:00
Redest du von LIOv2, also dem Code im Kernel?

Ressource ist in tyndur jedenfalls der Überbegriff für Datei oder Verzeichnis. Falls du tatsächlich vom Kernel redest, dann ist die Beziehung zwischen lio_resource und lio_node meines Wissens so, dass eine lio_resource mehrere lio_nodes haben, also unter mehreren verschiedenen Namen erreichbar sein kann. Das ist dann so ähnlich wie der Unterschied zwischen Inode und Verzeichniseintrag.

Hilft das?
Titel: Re: VFS und Ressourcen
Beitrag von: OsDevNewbie am 24. July 2014, 19:10
Was ist denn der Unterschied zwischen node und Verzeichniseintrag?
Titel: Re: VFS und Ressourcen
Beitrag von: Svenska am 24. July 2014, 21:33
Ohne jetzt tyndur im Detail zu kennen: Ein Verzeichniseintrag wird in einem Dateisystem gespeichert, eine node im Arbeitsspeicher. :-)
Titel: Re: VFS und Ressourcen
Beitrag von: OsDevNewbie am 25. July 2014, 18:43
Das heisst eine Resource ist ein Verezeichniss oder eine Datei und eine Node ist ein virtueller Ordner im VFS? D.h. tyndur legt für jedes Verzeichniss und jede Datei auf dem FS eine Resource an. Braucht das nicht ein bisschen viel Speicher? Habe ich das richtig verstanden?
Titel: Re: VFS und Ressourcen
Beitrag von: kevin am 25. July 2014, 19:26
Es wird nicht immer der komplette Verzeichnisbaum im Speicher gehalten. Stell dir das eher wie einen Cache vor, der auf jeden Fall das enthält, was im Moment benutzt wird, und den Rest kann er bei Bedarf rauswerfen.
Titel: Re: VFS und Ressourcen
Beitrag von: OsDevNewbie am 27. July 2014, 15:15
Also wenn eine Datei geöffnet wird, die vorher noch nicht geöffnet wurde, dann wird eine neue Ressource erstellt?
Titel: Re: VFS und Ressourcen
Beitrag von: kevin am 27. July 2014, 22:37
Ich glaube, tyndur hält immer komplette Verzeichnisse im Speicher, aber das kannst du machen wie du willst.
Titel: Re: VFS und Ressourcen
Beitrag von: OsDevNewbie am 29. July 2014, 16:36
Aber benötigt das nicht sehr viel Speicher? Wenn zum Beispiel ein Verzeichniss tausende Unterordner hat und in jedem dieser Unterordner wieder tausende Dateien liegen.
Titel: Re: VFS und Ressourcen
Beitrag von: Jidder am 29. July 2014, 17:07
In meiner Vorstellung sieht das so aus:

Das VFS sollte nur zweckgebunden Sachen laden. Wenn jemand alle Dateien in einem Verzeichnis auflistet, sollte das VFS nicht einfach so auch die Unterverzeichnisse laden, sondern erst, wenn das Programm danach fragt. Und die Schnittstellen zum User Space sehen in der Regel so aus, dass dem VFS die Option bleibt, beim rekursiven Auflisten von Verzeichnissen nicht genutzte Objekte wieder freizugeben. Das VFS funktioniert da ja nur als eine Art Cache. Die tatsächlichen Dateiinformationen können immer vom Dateisystemtreiber rekonstruiert werden. Die paar VFS-Objekte, die keine Repräsentation in einem anderen Treiber haben (Mountpoints evtl.), sollten so wenige sein, dass sie nicht ins Gewicht fallen.

Unter Windows gibt es beispielsweise FindFirstFile/FindNextFile zum Auflisten von Dateien im Verzeichnis. Mit FindFirstFile wird nur ein Handle erzeugt, und zum User Space hin nur eine Datei/Verzeichnis präsentiert. Durch wiederholtes Aufrufen von FindNextFile wird über die weiteren Dateien/Verzeichnisse iteriert. Dem VFS steht es offen nachdem FindNextFile aufgerufen wurde, die Informationen über die Datei, die davor betrachtet wurde, schon wieder freizugeben, falls der Platz knapp wird.

Das heißt, wenn du deine API ähnlich wie FindNextFile oder opendir (POSIX) strukturierst, wirst du nie das Problem haben, dass du zu viele Informationen verwalten musst, weil du immer die Option hast, die wieder freizugeben.