Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ memcntl(2) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

Related Articles

mmap(2)

mprotect(2)

plock(2)

mlock(3C)

mlockall(3C)

msync(3C)

sysconf(3C)

memcntl(2)                                                       memcntl(2)

NAME
     memcntl - Speicherverwaltung kontrollieren

SYNTAX
     #include <sys/types.h>
     #include <sys/mman.h>

     int memcntl(caddrt addr, sizet len, int cmd, caddrt arg,
                 int attr, int mask);

BESCHREIBUNG
     Die Funktion memcntl() erlaubt dem aufrufenden Prozeß die Anwendung
     einer Vielzahl von Kontrolloperationen auf den Adreßbereich, der durch
     [addr, addr + len) festgelegt ist.

     addr muß ein Vielfaches der Seitenlänge sein, die von sysconf(3C)
     zurückgegeben wird. Der Geltungsbereich der Kontrolloperationen kann
     weiterhin mit weiteren Auswahlkriterien (in der Form von Attributen)
     durch Verknüpfung von Bitmustern in attr belegt werden.

     Die folgenden Attribute geben die Auswahlkriterien für das Mapping
     (die Abbildung) der Seiten an:

     SHARED
          Seite ist als gemeinsam benutzbar abgebildet

     PRIVATE
          Seite ist als privat abgebildet

     Die folgenden Attribute geben die Auswahlkriterien für den Seiten-
     schutz an:

     PROTREAD
          Seite kann gelesen werden.

     PROTWRITE
          Seite kann geschrieben werden.

     PROTEXEC
          Seite kann ausgeführt werden.

     Die Auswahlkriterien werden durch ODER-Verknüpfung der Attributmasken
     zusammengesetzt.

     Außerdem können folgende Kriterien angegeben werden:

     PROCTEXT
          Prozeßtext

     PROCDATA
          Prozeßdaten




Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

memcntl(2)                                                       memcntl(2)

     wobei PROCTEXT alle privat abgebildeten Segmente mit Lese- und Aus-
     führungsrechten angibt, und PROCDATA alle privat abgebildeten Seg-
     mente mit Schreibrechten angibt.

     Auswahlkriterien können benutzt werden, um verschiedene abstrakte
     Speicherobjekte innerhalb des verfügbaren Adreßbereichs zu beschrei-
     ben. Wenn eine Operation nicht durch Auswahlkriterien beschränkt sein
     soll, dann muß attr den Wert 0 enthalten.

     Die auszuführende Operation wird durch das Argument cmd identifiziert.
     Die symbolischen Namen für die Operationen werden in der Datei
     sys/mman.h wie folgt definiert:

     MCLOCK
          sperrt alle Seiten im Bereich mit den Attributen attr im Spei-
          cher. Eine gegebene Seite kann mehrmals über unterschiedliche
          Mappings gesperrt werden; innerhalb eines gegebenen Mappings ver-
          schachteln sich die Seitensperren nicht. Mehrfache Sperroperatio-
          nen mit derselben Adresse im selben Prozeß können durch einen
          Befehl freigegeben werden. Ist eine Seite in einem Prozeß
          gesperrt und in einem anderen abgebildet (oder sichtbar über ein
          anderes Mapping im sperrenden Prozeß), so wird sie im Speicher
          gesperrt, bis der sperrende Prozeß eine implizite oder explizite
          Freigabeoperation ausführt. Wenn ein gesperrtes Mapping entfernt
          wird oder eine Seite durch das Löschen einer Datei oder Abschnei-
          den einer Datei gelöscht wird, wird eine implizite Freigabeopera-
          tion ausgeführt. Wenn eine schreibbare MAPPRIVATE-Seite im
          Adreßbereich verändert wird, wird die Sperre auf die private
          Seite übertragen.

          Momentan ist arg nicht in Verwendung, jedoch muß dieser Parameter
          0 enthalten, um Kompatibilität mit zukünftigen Veränderungen zu
          gewährleisten.

     MCLOCKAS
          sperrt im Speicher alle Seiten, die vom Adreßbereich mit den
          Attributen attr abgebildet sind. Die Parameter addr und len wer-
          den gegenwärtig nicht verwendet, müssen jedoch NULL bzw. 0 sein,
          um Kompatibilität mit zukünftigen Veränderungen zu gewährleisten.
          arg ist ein Bitmuster, das die folgenden Werte enthalten kann:

          MCLCURRENT    aktuelle Abbildungen sperren

          MCLFUTURE     zukünftige Abbildungen sperren

          Der Wert von arg bestimmt, ob die zu sperrenden Seiten momentan
          im Adreßbereich abgebildet sind, zukünftig abgebildet sind, oder
          aber beides. Wenn MCLFUTURE angegeben wird, werden alle nachfol-
          genden Abbildungen, die dem Adreßbereich hinzugefügt werden,
          ebenfalls gesperrt, vorausgesetzt, daß genügend Speicher verfüg-
          bar ist.



Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

memcntl(2)                                                       memcntl(2)

     MCSYNC
          speichert alle veränderten Seiten im Bereich mit den Attributen
          attr. Wahlweise werden die Kopien im Cache ungültig gemacht. Der
          Speicher für eine veränderte MAPSHARED-Abbildung ist die Datei,
          auf die die Seite abgebildet wird; der Speicher für eine verän-
          derte MAPPRIVATE-Abbildung ist der Swap-Bereich. arg enthält ein
          Bitmuster, daß sich aus den Werten zusammensetzt, welche das Ver-
          halten der Operation bestimmen:

          MSASYNC       asynchrone Schreibzugriffe ausführen

          MSSYNC        synchrone Schreibzugriffe ausführen

          MSINVALIDATE  Abbildungen ungültig machen

          MSASYNC kehrt zurück, sobald alle Schreiboperationen vom Schedu-
          ler gesteuert werden; der Systemaufruf kehrt bei MSSYNC nicht
          zurück, solange nicht alle Schreiboperationen vollständig ausge-
          führt wurden.

          MSINVALIDATE macht alle Datenkopien im Cache des Speichers
          ungültig, so daß bei weiteren Referenzen auf die Seiten diese vom
          System vom Sekundärspeicher gelesen werden müssen. Diese Opera-
          tion sollte von Applikationen verwendet werden, welche ein Spei-
          cherobjekt in einem bekannten Zustand voraussetzen.

     MCUNLOCK
          gibt alle Seiten im Bereich mit den Attributen attr frei. Gegen-
          wärtig wird arg nicht verwendet; dieser Parameter muß jedoch 0
          enthalten, um Kompatibilität mit zukünftigen Veränderungen zu
          gewährleisten.

     MCUNLOCKAS
          entfernt die Speichersperren im Adreßbereich und die Sperren auf
          allen Seiten im Adreßbereich mit den Attributen attr. Momentan
          werden addr, len, und arg zwar nicht benutzt, aber sie müssen
          NULL bzw. 0 sein, um Kompatiblität mit zukünftigen Veränderungen
          zu gewährleisten.

     Das Argument mask muß Null sein; es ist für zukünftige Benutzung
     reserviert.

     Sperren, die mit Sperroperationen errichtet wurden, werden von einem
     Sohnprozeß nach einem fork() nicht geerbt. memcntl() schlägt fehl,
     wenn versucht wird, mehr Speicher zu sperren, als der Grenzwert des
     Systems erlaubt.

     Aufgrund der möglichen Auswirkungen auf die Systemressourcen sind alle
     Operationen mit Ausnahme von MCSYNC auf Prozesse beschränkt, welche
     die effektive Benutzernummer des Systemverwalters haben. Die Funktion
     memcntl() subsummiert die Operationen von plock() und mctl()



Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

memcntl(2)                                                       memcntl(2)

     Unter den folgenden Bedingungen schlägt die Funktion memcntl() fehl
     und setzt errno auf:

     EAGAIN    wenn der Speicher nicht ganz oder teilweise von der Opera-
               tion gesperrt werden kann, wenn MCLOCK oder MCLOCKAS ange-
               geben ist.

     EBUSY     wenn die Adressen im Bereich [addr, addr + len) ganz oder
               teilweise gesperrt sind und die Option MCSYNC zusammen mit
               MSINVALIDATE angegeben wurde.

     EINVAL    wenn addr nicht ein Vielfaches der Seitenlänge (die von
               sysconf zurückgeliefert wird) ist.

     EINVAL    wenn addr und/oder len nicht den Wert 0 enthalten, wenn
               MCLOCKAS oder MCUNLOCKAS angegeben wird.

     EINVAL    wenn arg für die angegebene Funktion nicht gültig ist.

     EINVAL    wenn ungültige Auswahlkriterien in attr angegeben wurden.

     ENOMEM    wenn die Adressen im Bereich [addr, addr + len) ganz oder
               teilweise für den Adreßbereich des Prozesses ungültig sind
               oder nicht verzeichnete Seiten angegeben wurden.

     EPERM     wenn die effektive Benutzernummer des Prozesses nicht die
               des Systemverwalters ist und eine der Optionen MCLOCK,
               MCLOCKAS, MCUNLOCK oder MCUNLOCKAS angewählt wurde.

ERGEBNIS
     Nach erfolgreicher Beendigung liefert memcntl() den Wert 0; ansonsten
     wird -1 zurückgegeben und errno gesetzt.

SIEHE AUCH
     mmap(2), mprotect(2), plock(2), mlock(3C), mlockall(3C), msync(3C),
     sysconf(3C).


















Seite 4                      Reliant UNIX 5.44               Gedruckt 11/98

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026