Ich arbeite an einem Forschungsprojekt, und ich muss eine große Datenstruktur zwischen einem Kernel-Modul und einem Benutzer-Space-Programm teilen. Die Datenstruktur kann sehr groß werden, und da die Anwendung leistungskritisch ist, habe ich versucht, gemeinsam genutzten Speicher zu verwenden, um den Overhead der Serialisierung der Struktur (unter Verwendung anderer Schnittstellen wie NetLink) zu reduzieren. Ich habe derzeit einen Testcode basierend auf diesem Link erstellt:
[ Ссылка
Sie verwenden debugfs . Ich habe den Code im Link in mein Kernel-Modul eingefügt und ein benutzerdefiniertes Benutzer-Space-Programm geschrieben, das ihnen ähnlich ist. Ich habe es mit kleinen Größen meiner Datenstruktur versucht, die perfekt funktionierten. Sie können im Code bemerken, dass sie nur 1 Seite des Speichers teilen. Ich wollte wissen, ob es eine einfache Möglichkeit gibt, viel mehr Speicher als nur eine Seite zu teilen.
Es gibt nicht viele verschiedene Seiten.
Verteilen Sie mehr Seiten im offenen Bereich (alloc_pages oder eine Variante), speichern Sie diese in einem Array, dann muss Ihr Fehlerbehandler (basierend auf der fehlerhaften Adresse):
struct page *
aus dem Array Sie können weiterhin debugfs verwenden oder, mit einer kleinen Menge zusätzlicher Arbeit bei der Modulinitialisierung, ein einheitlicheres Zeichengeräte-Frontend darauf setzen. (Dazu muss sich wirklich nichts außerhalb der Module module_init / module_exit ändern.)
Tags und Links c kernel linux shared-memory linux-kernel