1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162
|
.\" Hey Emacs! This file is -*- nroff -*- source.
.\"
.\" Copyright (C) Markus Kuhn, 1996
.\" German Version (C) Michaela Hohenner und Hanno Wagner, 1996
.\"
.\" This is free documentation; you can redistribute it and/or
.\" modify it under the terms of the GNU General Public License as
.\" published by the Free Software Foundation; either version 2 of
.\" the License, or (at your option) any later version.
.\"
.\" The GNU General Public License's references to "object code"
.\" and "executables" are to be interpreted as the output of any
.\" document formatting or typesetting system, including
.\" intermediate and printed output.
.\"
.\" This manual is distributed in the hope that it will be useful,
.\" but WITHOUT ANY WARRANTY; without even the implied warranty of
.\" MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
.\" GNU General Public License for more details.
.\"
.\" You should have received a copy of the GNU General Public
.\" License along with this manual; if not, write to the Free
.\" Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
.\" USA.
.\"
.\" 1995-11-26 Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>
.\" First version written
.\" Translated into german (c) Michaela Hohenner und Hanno Wagner, 1996
.\" Modified 6 June 1996 by Martin Schulze (joey@linux.de)
.\"
.TH MLOCKALL 2 "6. Juni 1996" "Linux 1.3.43" "Systemaufrufe"
.SH BEZEICHNUNG
mlockall \- Schaltet Paging fr den aktuellen Proze aus.
.SH "BERSICHT"
.nf
.B #include <sys/mman.h>
.sp
.BI "int mlockall(int " flags );
.fi
.SH BESCHREIBUNG
.B mlockall
sperrt das Paging fr alle Seiten, die in den Adreraum 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
.BR mlockall \-Aufruf
erfolgreich zurckkehrt. Und es wird ebenfalls garantiert, da sie
solange im RAM bleiben, bis die Seiten mit
.B munlock
oder
.B munlockall
entsperrt werden, das Programm terminiert wird oder mit
.B exec
ein anderes Programm aufruft. Diese Sperrungen werden nicht an
Tochterprozesse ber ein
.B 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 Hauptgrnde fr unerwartete
Verzgerungen in der Programmausfhrung.
Echtzeitapplikationen werden auerdem fr gewhnlich mit
.B sched_setscheduler
auf einen Echtzeit-Scheduler umschalten.
Kryptographische Sicherheitssoftware arbeitet oft mit
sicherheitskritischen Bytes wie Pawrtern oder geheimen Schlsseln
als Datenstrukturen. Durch Paging knnten diese geheimen Daten auf
eine permanente Swappartition bertragen werden, von wo aus sie auch
dann noch Dritten zugnglich sein knnen, lange nachdem das Programm
die geheimen Daten aus dem RAM gelscht und sich beendet hat.
Fr Sicherheitsapplikationen mssen nur kleine Teile des Speichers
gesperrt werden. Dafr steht
.B mlock
zur Verfgung.
Die
.I flags
Parameter knnen mit logischem ODER aus folgenden Konstanten konstruiert
werden:
.TP
.B MCL_CURRENT
Sperrt alle Seiten, die momentan in den Adreraum des Prozesses umgerechnet
sind.
.TP
.B MCL_FUTURE
Sperrt alle Seiten, die in Zukunft in den Adreraum des Prozesses
gelegt werden. Das knnten zum Beispiel neue Adreseiten sein, die
bei einem sich vergrernden Heap und Stack bentigt werden,
Dateien, die in den Speicher gebunden werden, oder gemeinsam benutzte
Speicherregionen.
.PP
Wenn
.B MCL_FUTURE
angegeben ist und die Anzahl der gesperrten Seiten das obere Limit der
zulssigen gesperrten Seiten berschreitet, wird der Systemaufruf,
der das neue umrechnen veranlate mit
.BR ENOMEM
fehlschlagen.
Wenn diese Seiten durch wachsenden Stack eingebunden wurden, wird der
Kernel die Ausdehnung des Stacks nicht zulassen und ein
.BR 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 groe
automatische Variable erzeugt und in den Speicher schreibt, in dem
diese liegt, um diese Stackseiten zu belegen. Auf diesem Wege werden
genug Seiten fr den Stack bereitgestellt und knnen im RAM gesperrt
werden. Der Schreibvorgang stellt sicher, da nicht einmal ein
Schreib-Kopier-Seitenfehler in der kritischen Phase entstehen knnen.
Speichersperren werden nicht gestapelt, das heit, Seiten die mehrmals durch
den Aufruf von
.B mlockall
oder
.B mlock
gesperrt wurden werden sofort wieder freigegeben durch einen einzigen Aufruf
von
.BR munlockall .
Seiten die an verschiedene Orte oder fr verschiedene Prozesse
bereitgestellt wurden bleiben solange im RAM gesperrt wie sie mindestens
an einen Ort oder durch einen Proze bentigt werden.
In POSIX Systemen, wo
.B mlockall
und
.B munlockall
verfgbar sind, ist
.B _POSIX_MEMLOCK
definiert in <unistd.h>.
.SH "RCKGABEWERT"
Bei Erfolg gibt
.B mlockall
eine Null aus. Falls ein Fehler auftritt wird ein \-1 zurckgegeben und
.I errno
sofort gesetzt.
.SH FEHLER
.TP
.B ENOMEM
Der Proze versuchte die maximal zulssige Anzahl gesperrter Seiten zu
berschreiten.
.TP
.B EPERM
Der Aufrufende Proze hat nicht die erforderlichen Rechte. Nur Rootprozesse
drfen Seiten sperren.
.TP
.B EINVAL
Unbekannte Flags wurden angegeben.
.SH STANDARDS
POSIX.1b, SVR4
.SH SIEHE AUCH
munlockall (2),
.BR mlock (2),
und
.BR munlock (2).
|