Shared Memory limitation?

11/12/2009 - 01:14 von Martin Freiberg | Report spam
Hallo,

Ich möchte für eine Bastelei Shared Memory zwischen Kernelmodul und
Userland verwenden.
Gibt es (unter Linux) eine Limitation, wie viele Bereiche man definiert,
und wie groß die Bereiche sein dürfen?

Eigentlich möchte ich das ganze ja unter Rtai durchführen.
Dazu möchte ich zwei Bereiche definieren.
im Kernelmodul mit rtai_kmalloc (Key, Groesse) festlegen,
und im Userprogramm mit rtai_malloc (Key,1) wieder hohlen.

In den Testprogrammen funktioniert das wunderbar. In meinen Versuchen
natürlich nicht. Kann es sein dass unter Rtai nur ein Speicherbereich
möglich ist? (Ist mir eben eingefallen, das dies der einzige Unterschied
ist.)


Zur "Verwaltung" lauft das ja über ein device /dev/rtai_shm das es nur
einmal gibt. Bedeutet das, das so auch nur ein Bereich möglich ist?

Und wie ist das ohne RTai als "normales" Kernelmodul? Je Bereich ein
eigenes Device, oder alle Bereiche über ein Device?

Danke für Tips und Hinweise.

Gruß
Martin
 

Lesen sie die antworten

#1 Martin Freiberg
25/12/2009 - 16:25 | Warnen spam
Martin Freiberg schrieb:

Nachdem hier niemand weiterhelfen konnte, ich habe inzwischen den
"Fehler" gefunden.

Zum einen hatte ich in meinem Programm einen Fehler, und zugleich mich
von einem Linux Sicherheitskonzept in die Irre führen lassen.
Und wenn zwei Dinge zusammen kommen, dannn ... ihr wisst ja selber.

Mein Fehler war, das ich die Variable im Struct, die ich zum Testen
verwendet hatte an anderer Stelle immer wieder überschrieben hatte.
(Logischer Denkfehler) :-)
Hàtte ich eine andere Variable verwendet, dann hàtte ich die Daten
gesehen. Dumm gelaufen, aber voll im Sinne von Murphys Gesetzen. ;-)

Was in Linux für Verwirrung gestiftet hat war, dass das Speichermapping
für den Bereich im Kernel-Modul ganz andere Adressen ausgespuckt hat
als wie für den Bereich im Userland. Dazu kommt noch, das bei jedem
Programmaufruf die Userland-Adressen anderst sind, im Kernelmodul
hingegen immer exakt die selben.
Ich hàtte beim Zugriff über "shared memory" immer exakt die selben
Speicheradressen erwartet.

Das Speichermapping sorgt dafür das die unterschiedlichen Adressangaben
bei "shared memory" immer auf die selben Hardware-Adressen im Speicher
zeigen.

Die zufàlligen Adressen im Userland sorgen dafür das ein Hack-Angriff
per Bufferüberlauf nur sehr schwer möglich wird.
(Ja, da war mal ein c't Bericht dazu.)

Ich hoffe das ich mit der Lösung hier dem einen oder anderen viele
Stunden der Suche und Verzweifelung ersparen kann.


Gruß
Martin

PS: Mindetens 50 Prozent eines vertrakten Fehlers sitzen vor
dem Bildschirm.

Ähnliche fragen