2009-04-24 5 views
3

Ich arbeite an einem Stück einer sehr leistungsstarken Hardware, die unter Linux funktioniert. Wir würden gerne einige Daten zwischenspeichern, aber wir machen uns Gedanken über den Speicherbedarf - also ist die Idee, einen Benutzerprozess zu erstellen, um den Cache zu verwalten. Auf diese Weise kann sich der Cache im virtuellen Speicher befinden, nicht im Kernel-Bereich und so weiter.Verwenden von User-Space-Prozessen zur Unterstützung von Kernel-Modulen

Die Frage ist: Was ist der beste Weg, dies zu tun? Mein erster Instinkt ist, dass das Kernelmodul eine Zeichengerätedatei erstellt und ein Benutzerprogramm hat, das diese Datei öffnet und dann auf eine select-Anweisung wartet, um darauf zu warten, dass Befehle ankommen. Aber ich bin besorgt, dass dies nicht optimal sein könnte. Ein Freund erwähnte, dass er von einer Socket-basierten Schnittstelle wusste, aber wenn er gedrückt wurde, konnte er keine Details liefern ....

Irgendwelche Vorschläge?

+0

Sie könnten in Betracht ziehen, FUSE-Quelle zu betrachten ... –

+0

Noch besser, Sie könnten CacheFiles und cachefilesd, Intro hier anschauen: http://git.kernel.org/?p=linux/kernel/git/torvalds/ linux-2.6.git; a = blob; f = Dokumentation/filesystems/caching/cachefiles.txt; hb = HEAD – ephemient

Antwort

2

Ich denke, Sie suchen nach der netlink Schnittstelle. Weitere Informationen finden Sie unter Why and How to Use Netlink Socket [sic]. Achten Sie auf Sicherheitsprobleme beim Sprechen zwischen dem Kernel und dem Benutzerbereich; Es gab eine kürzlich vulnerability, wenn udev vernachlässigt, um zu überprüfen, dass Nachrichten aus dem Kernel statt Benutzer Speicherplatz kommen.

+0

Die aktuelle Sicherheitslücke hatte eine etwas andere Ursache als von Ihnen angegeben: udev ging davon aus, dass alle empfangenen Netlink-Nachrichten ihren Ursprung hatten der Kernel, aber Benutzerprozesse könnten böswillig Nachrichten an udev gesendet haben. – ephemient

+0

Wird dies eine bessere Leistung haben, als einfach ein Zeichengerät zu erstellen? –

+0

Ich habe keine Erfahrung damit, dies selbst zu benutzen; Ich habe gerade davon gehört, und da Sie nach einer Socket-basierten Schnittstelle gefragt haben, dachte ich, ich würde es erwähnen. –