Provided by: manpages-de-dev_0.5-4.1ubuntu1_all bug

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