Hallo,
Dass das üblicherweise zwischen Applikation und Kernel kommt liegt doch daran das übliche OSe Monolithen sind, bei einem Micro-Kernel-OS hat der Kernel überhaupt gar nichts damit zu tun da trifft das eher die Personality und die libc muss das passend verbergen so das auch dieses Konglomerat von Services wie ein OS aussieht.
Eben. Dem Anwendungsprogramm ist es völlig egal, mit wem es da eigentlich redet, im Endeffekt ist es "der Kernel". Die Abstraktion, mit wem da eigentlich geredet wird, verbirgst du in der libc. Mein Gedanke ist, wenn du die Schnittstelle von der libc im Kernel zumindest ansatzweise auch hast, bleibt diese Abstraktion sehr dünn.
Das macht die libc einfacher. Denn meine Frage ist: Wenn ich schon eine gut funktionierende API im Userspace habe - warum dann nicht die gleichen Konzepte auch im Kernel verwenden?
Prinzipiell musst du ja "nur" die IPC-Kommunikation über Sockets machen, die du miteinander verbinden kannst. Das heißt, dein Prozess redet via libc mit dem VFS, das VFS kriegt mit, dass der Plattentreiber gemeint ist und verbindet diese Deskriptoren quasi-miteinander, so dass die Kommunikation nicht mehr über das VFS läuft. Wenn der Plattentreiber nicht mehr kann oder will (z.B. nicht im HD-Treiber implementierte Funktion wie "cd"), gibt er den Deskriptor zurück an das VFS, was dann damit machen kann, was es will.
Kann dein Kernel das, ist die libc einfacher. Andersrum gilt entsprechendes.
Ich hab XML mal für eine ganz simple Konfigurationsdatei benutzt und ich bin mir sicher das dort kaum Fehler drin waren. Der Quell-Code fürs speichern und wieder einlesen war kaum über 20 kBytes und basierte im wesentlichen auf fprintf und strcmp (beim einlesen hab ich erst die komplette Datei in einen Puffer geladen und diesen dann durchgearbeitet).
Dann hast du gerade kein XML verwendet, sondern eine XML-ähnliche, eigene Markup-Language. Guck mal in die XML-Spec, was du für
XML alles können musst!
Wenn man kein durchreichen der Daten will dann benötigt man eine zentrale Stelle im System, da bietet sich zwar der VFS an aber IMHO ist das nicht seine Aufgabe, man würde ihm eigentlich fremde Arbeit aufbürden nur weil man versucht alles auf Dateien abzubilden.
Richtig. Wenn du aber dem VFS die Möglichkeit gibst, allgemeingültig "alles" auf Dateien abzubilden, dann sparst du dir in anderen Layern sehr viel Arbeit, wenn du dieses Konzept gründlich umsetzt. Und dann ist es Kernaufgabe des VFS.
Waren Stdout/Stderr/Stdin nicht die ersten 3 Filehandles eines Prozesses?
Prinzipiell ja.
Ich habe mir das dann so vorgestellt, das man einfach so als wenn man in die Datei schreiben würde den write-Aufruf macht und das VFS dann die Daten an meinen App-Server per Pipe weitersendet. So wird zwar unnötig kopiert aber das sollte mir einige Probleme vom Hals halten.
So kann ich auch ganz einfach das Vererben lösen.
Siehe oben. Wenn es möglich ist, solltest du einen Mechanismus implementieren können, damit du dir das durchreichen sparst. Wie man das konkret lösen kann, weiß ich nicht und vermute, dass es stark vom IPC-Konzept abhängt.[/quote]
Ich muss allerdings erik zustimmen, dass das eigentlich nicht die Aufgabe des VFS ist.
Nun, wenn du alles auf Dateien abbildest, dann schon... dann ist es sogar die exakte Aufgabe des VFS (darum ist es ja "virtual"...)
Grüße.
Svenska