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