Provided by:
manpages-de-dev_0.5-4.1ubuntu1_all 
BEZEICHNUNG
mlockall - Schaltet Paging für den aktuellen Prozess aus.
ÜBERSICHT
#include <sys/mman.h>
int mlockall(int flags);
BESCHREIBUNG
mlockall sperrt das Paging für 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 zurückkehrt. 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 über 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 Hauptgründe für unerwartete Verzögerungen in der
Programmausführung. Echtzeitapplikationen werden außerdem für
gewöhnlich mit sched_setscheduler auf einen Echtzeit-Scheduler
umschalten. Kryptographische Sicherheitssoftware arbeitet oft mit
sicherheitskritischen Bytes wie Passwörtern oder geheimen Schlüsseln
als Datenstrukturen. Durch Paging könnten diese geheimen Daten auf
eine permanente Swappartition übertragen werden, von wo aus sie auch
dann noch Dritten zugänglich sein können, lange nachdem das Programm
die geheimen Daten aus dem RAM gelöscht und sich beendet hat. Für
Sicherheitsapplikationen müssen nur kleine Teile des Speichers gesperrt
werden. Dafür steht mlock zur Verfügung.
Die flags Parameter können 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 könnten zum Beispiel neue
Adressseiten sein, die bei einem sich vergrößernden Heap und
Stack benötigt 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 zulässigen gesperrten Seiten überschreitet, wird der
Systemaufruf, der das neue umrechnen veranlaßte 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 große automatische
Variable erzeugt und in den Speicher schreibt, in dem diese liegt, um
diese Stackseiten zu belegen. Auf diesem Wege werden genug Seiten für
den Stack bereitgestellt und können im RAM gesperrt werden. Der
Schreibvorgang stellt sicher, dass nicht einmal ein Schreib-Kopier-
Seitenfehler in der kritischen Phase entstehen können.
Speichersperren werden nicht gestapelt, das heißt, 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 für verschiedene Prozesse bereitgestellt
wurden bleiben solange im RAM gesperrt wie sie mindestens an einen Ort
oder durch einen Prozess benötigt werden.
In POSIX Systemen, wo mlockall und munlockall verfügbar sind, ist
_POSIX_MEMLOCK definiert in <unistd.h>.
RÜCKGABEWERT
Bei Erfolg gibt mlockall eine Null aus. Falls ein Fehler auftritt wird
-1 zurückgegeben und errno sofort gesetzt.
FEHLER
ENOMEM Der Prozess versuchte die maximal zulässige Anzahl gesperrter
Seiten zu überschreiten.
EPERM Der aufrufende Prozess hat nicht die erforderlichen Rechte. Nur
Rootprozesse dürfen Seiten sperren.
EINVAL Unbekannte Flags wurden angegeben.
STANDARDS
POSIX.1b, SVR4
SIEHE AUCH
munlockall (2), mlock(2), und munlock(2).