Provided by: manpages-de-dev_0.10-1_all bug

BEZEICHNUNG

       mlockall - Schaltet Paging für 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.

Ü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).