Wie man Shared Objekt im Shared Memory

Unserer app hängt auf einem externen, 3rd-party-gelieferten Konfiguration (einschließlich der benutzerdefinierten Fahr - /Entscheidungsfindung-Funktionen) ladbare .damit die Datei.

Unabhängig, kooperiert es mit externen CGI-Module über einen Teil des shared memory, wo fast alle seiner flüchtigen Zustand gehalten wird, so dass die externen Module können Lesen Sie es und ändern Sie es gegebenenfalls.

Das problem ist die CGI-Module benötigen eine Menge der ständigen config-Daten aus der .so, und die Haupt-app führt eine ganze Menge von völlig unnötige kopieren zwischen den zwei Speicherkarten Bereiche, um die Daten zur Verfügung. Die Idee ist, den ganzen Shared-Object-laden in Shared Memory, und stellen Sie es direkt an die CGI. Das problem ist: wie?

  • dlopen und dlsym bieten keine Einrichtungen für die Zuweisung von wo laden Sie die SO-Datei.
  • wir haben versucht, shmat(). Es scheint zu funktionieren nur bis einige externe CGI tatsächlich versucht, auf das shared memory zugreifen. Dann wird die Fläche wies auf angezeigt, genauso wie die privaten, als ob es nie geteilt. Vielleicht machen wir etwas falsch?
  • laden .also in jedem script, die es braucht, steht außer Frage. Die schiere Größe, die Struktur, verbunden mit der Häufigkeit der Anrufe (einige Skripte werden aufgerufen, wenn eine zweite zu generieren, live-updates), und das ist eine embedded app machen es no-go.
  • einfach memcpy()'ing der .so in shm ist entweder nicht gut - einige Strukturen und alle Funktionen sind miteinander durch Zeiger.
InformationsquelleAutor SF. | 2010-01-25
Schreibe einen Kommentar