tail head cat sleep
QR code linking to this page

Manpage  — MLOCKALL

BEZEICHNUNG

mlockall - Schaltet Paging für den aktuellen Prozeß aus.

INHALT

ÜBERSICHT

#include <sys/mman.h> 

int mlockall(int flags);

BESCHREIBUNG

mlockall sperrt das Paging für alle Seiten, die in den Adreßraum 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, daß alle eingebundenen Speicherseiten im RAM bleiben, wenn der mlockall-Aufruf erfolgreich zurückkehrt. Und es wird ebenfalls garantiert, daß 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 Paßwö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 Adreßraum des Prozesses umgerechnet sind.
MCL_FUTURE
  Sperrt alle Seiten, die in Zukunft in den Adreßraum des Prozesses gelegt werden. Das könnten zum Beispiel neue Adreßseiten 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 Prozeß senden.

Echtzeitprozesse sollten genug gesperrte Stackseiten reservieren, bevor sie in die zeitkritische Phase treten, so daß 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, daß 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 Prozeß 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 ein -1 zurückgegeben und errno sofort gesetzt.

FEHLER

ENOMEM Der Prozeß versuchte die maximal zulässige Anzahl gesperrter Seiten zu überschreiten.
EPERM Der Aufrufende Prozeß hat nicht die erforderlichen Rechte. Nur Rootprozesse dürfen Seiten sperren.
EINVAL Unbekannte Flags wurden angegeben.

STANDARDS

POSIX.1b, SVR4

SIEHE AUCH

munlockall(2) [Englisch] , mlock(2) [Englisch], und munlock(2) [Englisch].


6. Juni 1996 MLOCKALL (2) Linux 1.3.43

tail head cat sleep
QR code linking to this page


Bitte richten Sie Ihre Kommentare zu diesem Handbuch Seite Service, Ben Bullock. Privacy policy.

I define UNIX as “30 definitions of regular expressions living under one roof.”
— Donald Knuth