Provided by:
manpages-de-dev_0.10-1_all 
BEZEICHNUNG
mlockall - Schaltet Paging fur den aktuellen Prozess aus.
Diese Handbuchseite ist eventuell veraltet. Im Zweifelsfall ziehen Sie
die englischsprachige Handbuchseite zu Rate, indem Sie
man -LC 2 mlock
eingeben.
"UBERSICHT
#include <sys/mman.h>
int mlockall(int flags);
BESCHREIBUNG
mlockall sperrt das Paging fur alle Seiten, die in den Adressraum des
aufrufenden Prozesses eingebunden sind. Dieses bezieht sich auf die
Seiten des Code-, Daten- und Stacksegments genauso wie auf gemeinsame
Bibliotheken, Kernel-Daten im Userspace, Shared Memory und Shared
Dateien. Es ist garantiert, dass alle eingebundenen Speicherseiten im
RAM bleiben, wenn der mlockall-Aufruf erfolgreich zuruckkehrt. Und es
wird ebenfalls garantiert, dass sie solange im RAM bleiben, bis die
Seiten mit munlock oder munlockall entsperrt werden, das Programm
terminiert wird oder mit exec ein anderes Programm aufruft. Diese
Sperrungen werden nicht an Tochterprozesse uber ein fork hinaus
vererbt.
Das Sperren von Speicher hat zwei Hauptanwendungen: Echtzeitalgorithmen
und Hochsicherheits-Datenverarbeitung. Echtzeitalgorithmen erfordern
deterministisches Timing, und, wie auch Scheduling, ist Paging einer
der Hauptgrunde fur unerwartete Verzogerungen in der
Programmausfuhrung. Echtzeitapplikationen werden auBerdem fur
gewohnlich mit sched_setscheduler auf einen Echtzeit-Scheduler
umschalten. Kryptographische Sicherheitssoftware arbeitet oft mit
sicherheitskritischen Bytes wie Passwortern oder geheimen Schlusseln
als Datenstrukturen. Durch Paging konnten diese geheimen Daten auf
eine permanente Swappartition ubertragen werden, von wo aus sie auch
dann noch Dritten zuganglich sein konnen, lange nachdem das Programm
die geheimen Daten aus dem RAM geloscht und sich beendet hat. Fur
Sicherheitsapplikationen mussen nur kleine Teile des Speichers gesperrt
werden. Dafur steht mlock zur Verfugung.
Die flags Parameter konnen mit logischem ODER aus folgenden Konstanten
konstruiert werden:
MCL_CURRENT
Sperrt alle Seiten, die momentan in den Adressraum des Prozesses
umgerechnet sind.
MCL_FUTURE
Sperrt alle Seiten, die in Zukunft in den Adressraum des
Prozesses gelegt werden. Das konnten zum Beispiel neue
Adressseiten sein, die bei einem sich vergroBernden Heap und
Stack benotigt werden, Dateien, die in den Speicher gebunden
werden, oder gemeinsam benutzte Speicherregionen.
Wenn MCL_FUTURE angegeben ist und die Anzahl der gesperrten Seiten das
obere Limit der zulassigen gesperrten Seiten uberschreitet, wird der
Systemaufruf, der das neue umrechnen veranlaBte mit ENOMEM
fehlschlagen. Wenn diese Seiten durch wachsenden Stack eingebunden
wurden, wird der Kernel die Ausdehnung des Stacks nicht zulassen und
ein SIGSEGV an den Prozess senden.
Echtzeitprozesse sollten genug gesperrte Stackseiten reservieren, bevor
sie in die zeitkritische Phase treten, so dass kein Fehler durch einen
Funktionsaufruf entstehen kann. Dies kann durch den Aufruf einer
Funktion erreicht werden, die eine ausreichend groBe automatische
Variable erzeugt und in den Speicher schreibt, in dem diese liegt, um
diese Stackseiten zu belegen. Auf diesem Wege werden genug Seiten fur
den Stack bereitgestellt und konnen im RAM gesperrt werden. Der
Schreibvorgang stellt sicher, dass nicht einmal ein Schreib-Kopier-
Seitenfehler in der kritischen Phase entstehen konnen.
Speichersperren werden nicht gestapelt, das heiBt, Seiten die mehrmals
durch den Aufruf von mlockall oder mlock gesperrt wurden werden sofort
wieder freigegeben durch einen einzigen Aufruf von munlockall. Seiten
die an verschiedene Orte oder fur verschiedene Prozesse bereitgestellt
wurden bleiben solange im RAM gesperrt wie sie mindestens an einen Ort
oder durch einen Prozess benotigt werden.
In POSIX Systemen, wo mlockall und munlockall verfugbar sind, ist
_POSIX_MEMLOCK definiert in <unistd.h>.
R"UCKGABEWERT
Bei Erfolg gibt mlockall eine Null aus. Falls ein Fehler auftritt wird
-1 zuruckgegeben und errno sofort gesetzt.
FEHLER
ENOMEM Der Prozess versuchte die maximal zulassige Anzahl gesperrter
Seiten zu uberschreiten.
EPERM Der aufrufende Prozess hat nicht die erforderlichen Rechte. Nur
Rootprozesse durfen Seiten sperren.
EINVAL Unbekannte Flags wurden angegeben.
STANDARDS
POSIX.1b, SVR4
SIEHE AUCH
munlockall (2), mlock(2), und munlock(2).