ein Kapitel zurück                                           ein Kapitel weiter

Mit der Funktion.........

int mprotect(const void *addresse, size_t len, int protect);  

können sie den Schutz für den mapped-Speicherbereich adresse mit der Größe len Bytes ändern. Für protect können sie einer der 4 Konstanten PROT_READ, PROT_WRITE, PROT_EXEC oder PROT_NONE angeben.

Um zu vermeiden das bei Mangel an Hauptspeicher Speicherbereiche auf die Festplatte ausgelagert wird (zu erkennen mit dem Befehl ps x in der Sparte STAT mit der Abkürzung SW für Swap) kann man bestimmte Bereiche im RAM sperren. Das macht speziell bei Zeitkritischen Aufgaben Sinn. Leider sind die nun folgenden Funktionen nur als root durchführbar.

Um einen bestimmten Speicherbereich zu sperren haben wir die Funktion.......

int mlock(caddr_t adresse, size_t laenge);  

Das Gegenstück zu mlock um den Speicherbereich wieder freizugeben ist.......

int munlock(caddr_t adresse, size_t laenge);  

Wenn sie denn gesamten Adressraums des Prozesses Sperren wollen können sie die Funktion.......

int mlockall(int flags);  

...verwenden. Als flags können sie folgende eine oder beide Konstanten verwenden...

  • MCL_FUTURE - Alle Pages die noch hinzugefügt werden zum Prozess werden im Hauptspeicher gesperrt.
  • MCL_CURRENT - Alle Pages die gerade im Speicherbereich des Prozesses sind werden gesperrt.

Das Gegenstück zum Aufheben der Sperre mit mlockall lautet........

int munlockall(void);  

Alle Funktionen liefern bei Erfolg 0 zurück und bei Fehler -1

In den kommenden Kapitel werden wir Memory Mapped I/O noch ein paar mal sinnvoll einsetzen.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf