Hauptindex | Abschnitt 2 | English | 日本語 | Optionen |
#include <sys/mman.h>int mlockall(int flags);
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. | |
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>.
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. |
6. Juni 1996 | MLOCKALL (2) | Linux 1.3.43 |
Hauptindex | Abschnitt 2 | English | 日本語 | Optionen |
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 |