Durch ihre virtuellen Adressübersetzungen können die verschiedenen Operationen dieselben Realseiten blockieren. Durch verschiedene virtuelle Übersetzungen derselben Seiten oder gestapelten MLOCK -Anfragen zum identischen Adressbereich kann eine Einzelmethode auch mehrere Seiten haben, die gesperrt sind. Eine Aufruf zur Munmap () -Funktion.
Nach nur einer Gabel werden die blockierten Übersetzungen nicht an den Kinderprozess weitergegeben. Themen können nur eine bestimmte Menge physischer RAM schließen, da es sich um ein relativ knappes Gut handelt. Sowohl die Beschränkung der Asset-Beschränkung von Rlimit_Memlock Asset als auch die plattformweite „verdrahtete Seiten“ können durch einen einzelnen Thread blockiert werden. Obwohl die NETBSD -Implementierungen das nächste Vielfache der Seitenzahl runden würden, muss der transportable Code sicherstellen.
Rückgabewerte
Rückkehr 0 bedeutet, dass der Anruf erfolgreich ist und fast alle Seiten im Bereich entweder blockiert oder freigegeben wurden. Der Sperrzustand jeder Seite in der Domäne bleibt unverändert, wenn der numerische Wert -1 beträgt, was auf eine Ausnahme hinweist. Der Fehler wird in dieser Situation angezeigt, indem der globale Standort errno festgelegt wird.
Fehler
Die Funktion mLock () kann aus mehreren Gründen fehlschlagen. In diesem Teil des Artikels werden wir die Anzahl der Ausnahmen diskutieren, die wir nach dem Fehler der Funktion mLock () zusammen mit ihren Gründen für die Ausführung von Ausführung erhalten haben. Hier sind einige der Fehler, die wir bisher finden können:
Die Munlock () -Funktion, die gleichzeitig mit der Funktion mLock () verwendet wird, kann aus mehreren Gründen fehlschlagen. In diesem Teil des Artikels werden wir die Anzahl der Ausnahmen diskutieren, die wir nach dem Versagen der Munlock () -Funktion erhalten, zusammen mit ihren Gründen für die Ausführung. Hier sind einige der Fehler, die wir bisher finden:
Beispiel:
Um das Konzept der MLOCK () C -Funktion zu verstehen, werfen wir einen einfachen Beispiel an. Wir haben eine neue C -Datei namens „MSEG erstellt.c ”innerhalb des Ordners" Linux "Works".
Wir starten diesen Code mit der Verwendung der Standard -C -Bibliotheken, die für die reibungslose Ausführung des C -Codes erforderlich sind, i.e. stdio.H und Unistd.H. Das sys/mman.H Header wird verwendet, um die Verwendung der Speicherverriegelungsfunktionen zu ermöglichen. Danach beginnt die Ausführung mit der Initialisierung einer Ganzzahlvariablen von Data_Size bis 2048. Das Zeichenarray „Data_lock“ der Data_Size ist definiert und an die benutzerdefinierte Memory_Lock () -Funktion zusammen mit der Variablen data_size als Argument in der ersten „if“ -Anweisung übergeben.
Die benutzerdefinierte Memory_lock () -Funktion wird ausgeführt und erhält die Größe einer Seite in der Variablen page_size. Das Page_Offset wird berechnet und die Adresse wird an die Seitengrenze angepasst. Die Größe wird mit der Seite page_offset angepasst und die Funktion mLock () wird aufgerufen und mit den Variablen "Größe" und "Adress" zurückgegeben und zurückgegeben. Die Methode "if" Anweisung PERROR () wirft einen Fehler "lock_memory", wenn das zurückgegebene Ergebnis gleich -1 ist. Andernfalls druckt die Anweisung an der elen.
Eine weitere Anweisung "IF-ELSE" wird verwendet, um das Schloss freizugeben. Die Funktion MEAMMEIT_UNLOCK () wird in der Anweisung „if“ aufgerufen, indem die Data_lock und data_size als Argumente bestanden werden. Nach derselben Prozedur folgt diese Funktion, wie wir in der Funktion memory_lock () befolgt werden. Die einzige Änderung besteht darin. Die zweite Anweisung "if" wirft eine Ausnahme "Unlock_Memory" mit der Perror -Funktion aus, wenn das Ergebnis -1 äquivalent ist. Andernfalls wird in der else -Anweisung angezeigt, dass „der Speicher entsperrt wird“ mit der Printf -Funktion.
Wir haben eine Objektdatei dieser C-Datei mit der Option GCC Compiler "-o" erstellt.
Nachdem wir die Objektdatei ausgeführt hatten.
Abschluss
Hier geht. Wir haben die Erklärung, die Syntax, die Fehler und die Rückgabewert der MLOCK -Funktion zusammen mit einem detaillierten Beispiel hinzugefügt. Dieses Tutorial würde den Benutzern ausreichen, um diese Funktion in der C -Programmiersprache in die Hände zu bekommen.