+ Antworten
Ergebnis 1 bis 6 von 6

Shared Memory Segment vergrössern

Diskussion über Shared Memory Segment vergrössern in C und C++ der Kategorie Programmierung; hallo! Ich beschäftige mich mit Systemprogrammierung im Linux und habe folgendes Problem: Wenn ich eine Shared Memory Segment erzeuge(shmget) und ...

  1. #1
    Reg.-Benutzer
    Reg.-Datum
    20.04.2009
    Beiträge
    44

    Standard Shared Memory Segment vergrössern

    hallo!

    Ich beschäftige mich mit Systemprogrammierung im Linux und habe folgendes Problem:
    Wenn ich eine Shared Memory Segment erzeuge(shmget) und dieses an den Prozess anbinde (shmat), wie kann ich dann nachträglich dieses Segment vergrößern?
    Ich erzeuge einen neuen Prozess (fork()), im Child Prozess will ich dann Daten in ein Array einlesen und dieses array dann im Shared Memory Speichern. Das Problem ist, dass ich nicht weiß wieviele Daten ich einlese. Das Shared Memory Segment soll also dynamisch wachsen können, der Vater soll dann Zugriff auf dieses Array haben.
    Bei der Umsetzung fehlt mir etwas das Verständnis. Ich habe auch nirgendwo im Internet gefunden, wie ich ein Shared Memory Segment vergrößere...

    lg Thomas

  2. #2
    Moderator Daily Talk Avatar von Guybrush Threepwood
    Reg.-Datum
    01.09.2002
    Ort
    Melee Island
    Beiträge
    4.413

    Standard

    Also ich weiß nicht wie das in dem Fall jetzt genau ist aber wenn du dir bei C++ mit new Speicher holst und diesen dann vergrößern willst musst du dir einen neuen größeren Speicherblock holen und die Daten aus dem alten Block darein kopieren.
    Wenn es keine Funktion gibt um deinen Speicherblock zu vergrößern wird es wahrscheinlich genauso sein.
    Ich bin Guybrush Threepwood, ein mächtiger Pirat!

  3. #3
    Reg.-Benutzer Avatar von Pointerman
    Reg.-Datum
    06.02.2002
    Ort
    Erlangen
    Beiträge
    486

    Standard

    Moin!

    Muss es denn unbedingt ein Array sein? Du koenntest ja auch eine Liste nehmen (musst Du wahrscheinlich selber schreiben), die ihre Bestandteile auf mehrere Shared Memory Segmente verteilt. Dann kannst Du Dir das von Guybrush beschriebene Kopieren sparen.

  4. #4
    Reg.-Benutzer
    Reg.-Datum
    20.04.2009
    Beiträge
    44

    Standard

    Ich muss C (ohne ++) verwenden.
    Es muss ein Array sein. Das ist leider die Aufgabenstellung.

    Wenn ich meine werte auf den Pointer *shared_memory schreiben und einfach shared_memory[i] immer erhöhe, dann geht mir irgendwann der Shared Memory aus.
    Genau hier liegt das Problem. Ich bin im Child Prozess, habe dann irgendwann zu wenig Shared Memory und will diesen vergrößern. Ich könnte über umwegen ein größeres Speichersegment anfordern, den Inhalt des alten rüberkopieren und so den Shared Memory immer Blockweise neu anfordern. Ist ein wenig umständlich das dann wirklich so zu realistieren. Die frage wäre eben, ob es eine shmget oder ähnliche Funktion gibt, wo ich das Speichersegment einfach vergrößere (ähnlich malloc/realloc).

  5. #5
    Reg.-Benutzer
    Reg.-Datum
    17.05.2011
    Beiträge
    1

    Standard

    Die frage wäre eben, ob es eine shmget oder ähnliche Funktion gibt, wo ich das Speichersegment einfach vergrößere (ähnlich malloc/realloc).
    Gibt es nicht. Du musst es manuell machen, indem Du den Inhalt des aktuellen Shared Memory-Bereichs temporaer in den Heap-Speicher des Prozesses kopierst, den ShMem mit shmdt() unattachest, neuen, groeszeren mit shmget() anforderst, in den Kontext des Prozesses mapst shmat() und bei Erfolg den Inhalt aus dem Heap-Speicher wieder zurueck in den neuen ShMem kopierst.
    Geändert von frinky (17.05.2011 um 22:26 Uhr)

  6. #6
    Reg.-Benutzer
    Reg.-Datum
    08.01.2012
    Beiträge
    111

    Standard

    Warum willst Du überhaupt das veraltete sysv-shm ?
    Das ist ein antikes Relikt aus Urzeiten, wo's noch keine (richtigen) MMUs gab.

    Wie wärs mit mmap() und mremap() ?

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

     

Ähnliche Themen

  1. struktur im shared memory
    Von cable545 im Forum C++: Compiler, IDEs, APIs
    Antworten: 4
    Letzter Beitrag: 09.01.2011, 20:39
  2. PHP5 Shared Memory ?
    Von Aiun im Forum Skript- und Webserverprogrammierung
    Antworten: 1
    Letzter Beitrag: 28.07.2008, 11:53
  3. Shared Memory
    Von Sloenig im Forum C++: Compiler, IDEs, APIs
    Antworten: 2
    Letzter Beitrag: 02.04.2007, 17:00
  4. notebook mit shared memory???
    Von bergi im Forum Hardware
    Antworten: 6
    Letzter Beitrag: 09.03.2005, 11:52
  5. Shared-Memory beim Notebook
    Von kuekenMcNugget im Forum Hardware
    Antworten: 1
    Letzter Beitrag: 13.07.2002, 21:12

Die häufigsten Suchbegriffe für diese Seite:

Bisher noch keine Treffer von einer Suchmaschine